ホームページ  >  記事  >  Java  >  マイバティスとは何ですか? Mybatis関連コンテンツのご紹介

マイバティスとは何ですか? Mybatis関連コンテンツのご紹介

不言
不言転載
2018-10-12 14:44:062975ブラウズ

この記事では、Mybatis とは何ですか? Mybatis関連のコンテンツの紹介は、必要な友人が参考になれば幸いです。

MyBatis の紹介

MyBatis はもともと Apache のオープン ソース プロジェクト iBatis でしたが、2010 年にこのプロジェクトは Apache ソフトウェア基盤から Google Code に移行されました。 MyBatis という名前に変更されました。 2013 年 11 月に Github に移行しました。

MyBatis は、カスタマイズされた SQL、ストアド プロシージャ、高度なマッピングをサポートする優れた永続層フレームワークです。 MyBatis は、ほとんどすべての JDBC コード、パラメータの手動設定、結果セットの取得を回避します。 MyBatis は、単純な XML またはアノテーションを構成に使用し、ネイティブ マップを使用してインターフェイスと Java POJO (Plain Old Java Objects、通常の Java オブジェクト) をデータベース内のレコードにマップできます。

MyBatis リファレンス公式 Web サイト

http://www.mybatis.org/mybatis-3/zh/index.html

MyBatis ダウンロード アドレス

https://github.com/mybatis/mybatis-3

MyBatis の利点

  • オープンソースの優れた永続層フレームワーク

  • SQL ステートメントとコードの分離

  • ##構成指向プログラミング

  • ##複雑なデータ マッピングの優れたサポート
  • 動的 SQL
MyBatis 開発手順

1. 必要な jar パッケージを追加します。
##1) mybatis-3.3.0 コアパッケージ (ログ操作が必要な場合は、依存パッケージをインポートできます)
2) データベースドライバー (mysql-connector-java-5.1.22) -bin)

2. データベースを作成し、テスト データを追加します

create table `tal_employee` (
    `id` int (11),
    `last_name` varchar (360),
    `email` varchar (300),
    `gender` char (9)
);
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('1','韩信','hanxin@gemail.com','男');
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('2','LiBaihH','libai@gemail.com','男');
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('3','孙尚香','sunshangxiang@gemail.com','女');
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('4','安琪拉','anqila@gemail.com','女');
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('5','Hello','Hello@gemail.com','男');
INSERT INTO `tal_employee` (`id`, `last_name`, `email`, `gender`) VALUES('6','Miya','Miya@gemail.com','男');
3. エンティティ クラスを作成します

public class Employee {
    private Integer id;
    private String lastName;
    private String email;
    private String gender;
    //此处省略get set toString。。。
}
4. エンティティ クラス マッピング設定ファイルを作成します
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 该配置命名空间 -->
<mapper namespace="EmployeeMapper">
    <!-- 定义一个查询方法  resultType 返回值类型-->
    <select id="findAll" resultType="com.simple.mybatis.entitys.Employee">
        select * from tal_employee
    </select>
</mapper>
5. mybatis メイン設定ファイルを作成します
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 配置环境  default默认使用环境名字-->
    <environments default="development">
        <!-- 配置一个环境 -->
        <environment id="development">
            <!-- 使用事务JDBC事务管理器 -->
            <transactionManager type="JDBC" />
            <!-- 配置数据库连接 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatis" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </dataSource>
        </environment>
    </environments>
    <!-- 加载映射 -->
    <mappers>
        <mapper resource="com/simple/mybatis/entitys/EmployeeMapper.xml" />
    </mappers>
</configuration>
SqlSessionFactory オブジェクトを取得します
private SqlSessionFactory sqlSessionFactory;
    @Before
    public void init() throws IOException{
        //读取mybatis主配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        /**
         * 实例化SqlSessionFactory
         * 如果没有指定默认环境,可以在这里指定使用的环境ID,比如我先在有个DEV环境
         * sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream,"DEV");
         * 我这里已经使用了默认环境所以我就不用这种方式创建了
         */
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

データベースへのアクセス

SqlSession オブジェクトの取得、データベースとの会話の実行、データベースとの会話の実行

SqlSession session = sqlSessionFactory.openSession();
Getすべての従業員レコード

EmployeeMapper はエンティティ クラス マッピング ファイルの名前空間、findAll は選択タグの IDです

List<Employee> employees = session.selectList("EmployeeMapper.findAll");
        for (Employee employee : employees) {
            System.out.println(employee);
        }

アクセス結果:

Employee [id=1, lastName=null, email=hanxin@gemail.com, gender=男]
Employee [id=2, lastName=null, email=libai@gemail.com, gender=男]
Employee [id=3, lastName=null, email=sunshangxiang@gemail.com, gender=女]
Employee [id=4, lastName=null, email=anqila@gemail.com, gender=女]
Employee [id=5, lastName=null, email=Hello@gemail.com, gender=男]
Employee [id=6, lastName=null, email=Miya@gemail.com, gender=男]

これは私たちにとっては正常ですここのデータベースにアクセスするには、なぜ lastName が空なのでしょうか?

テーブル フィールドとクラス属性名の不一致に対する解決策

理由: lastName というエンティティ クラスの属性が、エンティティ クラスの名前に対応していないためです。データベース列 last_name なので、それが取得されます。値は空です。解決策 1: エンティティ クラス マッピング ファイルの select タグに別名を付けます。

<select id="findAll" resultType="com.simple.mybatis.entitys.Employee">
        select id,last_name AS lastName,email,gender from tal_employee
</select>

解決策 2: キャメル ケースの名前付けをmybatis メイン設定ファイルを使用する必要があります。設定が最初にランク付けされます。そうでない場合は、XML エラーが報告されます。

<settings>
    <!-- 开启驼峰式命名规则 -->
    <setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>

オプション 2 を使用します。クラスの属性 lastName は、データベース フィールド last_name

# と一致します。 ##ログを使用して SQL ステートメントなどを表示します

まず、mybatis 依存関係パッケージを追加する必要があります

log4j.properties

#设置输出级别和输出位置
log4j.rootLogger=debug,Console
#设置控制台相关的参数
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.layout=org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n  
#设置MyBatis的输出内容
log4j.logger.java.sql.ResultSet=INFO  
log4j.logger.org.apache=INFO  
log4j.logger.java.sql.Connection=DEBUG  
log4j.logger.java.sql.Statement=DEBUG  
log4j.logger.java.sql.PreparedStatement=DEBUG

これを行うには、 log4j を使用して、SQL ステートメントと受信パラメータを表示します。 。お待ちください

MyBatis 設定ファイル

前述の単純な MyBatis のケースを通じて、MyBatis フレームワークの基本構造を理解する必要があります。 Hibernate と同様に、MyBatis にはコア構成ファイルとマッピング ファイルが含まれています。

  • コア構成ファイル (mybatis-config.xml): 接続プール情報、トランザクション、ロード マッピング ファイル、パラメーター設定、その他の構成を含む、Mybatis のコア構成が含まれます。

  • マッピング ファイル (EmployeeMapper.xml): 主にエンティティ オブジェクトのデータベース、関連付け、SQL ステートメントなどへのマッピングを実装します。

  • #コア構成ファイル
タグ

説明#構成環境

##一部の外部プロパティ。これらのプロパティは置き換えることができます

Mybatis の非常に重要な調整設定により、Mybatis のデフォルトの動作が変更されます。

Java タイプのエイリアスを設定します。これは XML 設定にのみ関連します。

Mapper、MyBatis マッピング ファイルをロードします。

プラグイン Mybatis を使用すると、ユーザーはマッピング内の特定のポイントでインターセプトできます。

环境配置

  1. Mybatis可以通过

    配置多种环境,比如开发环境、测试环境和生产环境等。

  2. 不过要记住,尽管可以配置多个环境,但是SqlSessionFactory对象只能加载一个。如果你需要同时连接多个数据库,需要创建多个SqlSessionFactory实例。

事务管理

在 MyBatis来进行事务的设置,其中有两种类型的事务管理器。

  1. JDBC:这个配置就是直接使用了 JDBC 的提交和回滚设置,它依赖于从数据源得到的连接来管理事务范围。

  2. MANAGED:这个配置几乎没做什么。它从来不提交或回滚一个连接,而是让容器来管理事务的整个生命周期(比如 JEE 应用服务器的上下文)。 默认情况下它会关闭连接,然而一些容器并不希望这样,因此需要将 closeConnection 属性设置为 false 来阻止它默认的关闭行为。

<transactionManager type="MANAGED">
    <property name="closeConnection" value="false"/>
</transactionManager>

如果你正在使用 Spring + MyBatis,则没有必要配置事务管理器, 因为 Spring 模块会使用自带的管理器来覆盖前面的配置。

数据源

使用标准的 JDBC 数据源接口来配置 JDBC 连接对象的资源。有三种数据源类型

  1. UNPOOLED:这个数据源的实现只是每次被请求时打开和关闭连接。

  2. POOLED:这种数据源的实现利用“池”的概念将 JDBC 连接对象组织起来, 避免了创建新的连接实例时所必需的初始化和认证时间。

  3. JNDI:使用JNDI在外部配置数据源。

properties标签

properties为外部属性,比如数据库连接信息可以配置到一个单独的properties文件中,然后在xml中进行引入。

添加一个db.properties文件

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/test
username=root
password=root

在mybatis主配置文件中引用

<properties resource="db.properties" />
<environments default="development">
    <environment id="development">
        <transactionManager type="JDBC" />
        <dataSource type="POOLED">
            <property name="driver" value="${driver}" />
            <property name="url" value="${url}" />
            <property name="username" value="${username}" />
            <property name="password" value="${password}" />
        </dataSource>
    </environment>
</environments>

映射器

通常MyBatis中将映射关系(非必须)和SQL语句写入到映射文件中,在配置文件中需要手动进行加载映射文件。加载映射文件使用进行加载。Mybatis中有4种加载方式。

1.使用resource,加载classpath路径进行加载。

<mappers>
    <mapper resource="com/simple/mybatis/entitys/EmployeeMapper.xml"/>
</mappers>

2.使用url路径进行加载。

<mappers>
    <mapper url="file:///var/mappers/AuthorMapper.xml"/>
</mappers>

3.使用calss进行加载,注解方式。

<!– 加载class类-->
<mappers>
    <mapper class="使用注解的全类名"/>
</mappers>

4.使用package进行加载,注解方式。

<!– 加载某个包下的所有class文件-->
<mappers>
    <package name="com.simple.mybatis.entitys"/>
</mappers>

别名的使用

之前,我们在sql映射xml文件中的引用实体类时,resultType需要写上实体类的全类名(包名+类名),如下:

<select id="findAll" resultType="com.simple.mybatis.entitys.Employee">
        select id,last_name AS lastName,email,gender from tal_employee
</select>

在mybatis主配置文件中加入

<typeAliases>
    <typeAlias type=“com.simple.mybatis.entitys.Employee" alias="Employee"/>
</typeAliases>

这样在resultType中就可以直接使用Employee类型了。这个别名是不区分大小写的。

以上がマイバティスとは何ですか? Mybatis関連コンテンツのご紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はcnblogs.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。