記事のディレクトリ
序文
mybatisの基本情報を覚えておいてください
1.Mybatisの伝統とエージェントの開発
UserDaoインターフェースを書く
public interface UserDao {
List<User> findAll() throws IOException;
}
UserDaoImpl実装を書く
public class UserDaoImpl implements UserDao {
public List<User> findAll() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
List<User> userList = sqlSession.selectList("userMapper.findAll");
sqlSession.close();
return userList;
}
}
従来の方法のテスト
@Test
public void testTraditionDao() throws IOException {
UserDao userDao = new UserDaoImpl();
List<User> all = userDao.findAll();
System.out.println(all);
}
エージェント開発メソッド:
mybatisフレームワークは、インターフェイスmの定義に従ってインターフェイスの動的エージェントオブジェクトを作成します。エージェントオブジェクトのメソッド本体は、上記のDaoインターフェイス実装クラスメソッドのメソッド本体と同じです。
マッパーインターフェイスの開発は、次の仕様に従う必要があります
。1。Mapper.xmlファイルの名前空間は、マッパーインターフェイスの完全修飾名と同じです。2。
マッパーインターフェイスのメソッド名は、で定義されている各ステートメントのIDと同じです。
Mapper.xml 3. Mapperインターフェースメソッドの入力パラメータータイプは、
mapper.xmlで定義された各SQLのparameterTypeと同じです。4。Mapperインターフェースメソッドの出力パラメータータイプは、定義された各SQLのresultTypeと同じです。 mapper.xml
テストプロキシモードで
@Test
public void testProxyDao() throws IOException {
InputStream resourceAsStream = Resources.getResourceAsStream("SqlMapConfig.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
//获得MyBatis框架⽣成的UserMapper接⼝的实现类
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.findById(1);
System.out.println(user);
sqlSession.close();
}
2、Mybatis構成ファイル
1.コア構成ファイルSqlMapConfig.xml
1.1一般的な構成分析
1.1.1環境ラベル(データベース環境の構成、複数環境構成のサポート)
その中
には、2種類のトランザクションマネージャー(transactionManager)があります。
- JDBC:この構成は、JDBCのコミットおよびロールバック設定を直接使用します。JDBCは、データソースから取得した接続に依存してトランザクション
ドメインを管理します。 - 管理:この構成はほとんど何もしません。接続をコミットまたはロールバックすることはありませんが、コンテナー
がトランザクションのライフサイクル全体(JEEアプリケーションサーバーのコンテキストなど)を管理できるようにします。デフォルトで接続を閉じますが、一部のコンテナはこれを望まない
ため、closeConnectionプロパティをfalseに設定して、デフォルトの動作を閉じないようにする必要があります。
dataSourceには次の3つのタイプがあります。
- UNPOOLED:このデータソースの実装は、要求されるたびに接続を開いたり閉じたりするだけです。
- プール済み:このデータソースの実現には、「プール」の概念を使用してJDBC接続オブジェクトを編成します。
- JNDI:このデータソースは、EJBやアプリケーションサーバーなどのコンテナで使用するために実装されています。コンテナは
、データソースを一元的または外部的に構成し、JNDIコンテキストへの参照を配置できます。
1.1.2マッパータグ(役割はマップをロードすることです)
読み込み方法:
•使用相对于类路径的资源引用,例如:
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
•使用完全限定资源定位符(URL),例如:
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
•使用映射器接口实现类的完全限定类名,例如:
<mapper class="org.mybatis.builder.AuthorMapper"/>
•将包内的映射器接口实现全部注册为映射器,例如:
<package name="org.mybatis.builder"/>
1.1.3 [プロパティ]タブ
実際の開発では、データソースの構成情報を個別にプロパティファイルに抽出するのが通例です。このタグは、追加の構成プロパティファイルをロードできます。
1.1.4 typeAliasesタグ(タイプエイリアス、Javaタイプの短い名前を設定)
mybatisフレームワークは、一般的に使用されるいくつかのタイプのエイリアスをすでに設定しています。
エイリアス | マッピングのタイプ |
---|---|
_バイト | バイト |
_長いです | 長いです |
_ショート | ショート |
_int | int |
_整数 | int |
_ダブル | ダブル |
_浮く | 浮く |
_boolean | ブール値 |
ストリング | ストリング |
バイト | バイト |
長いです | 長いです |
ショート | ショート |
int | 整数 |
整数 | 整数 |
ダブル | ダブル |
浮く | 浮く |
ブール値 | ブール値 |
日付 | 日付 |
10進数 | BigDecimal |
bigdecimal | BigDecimal |
オブジェクト | オブジェクト |
地図 | 地図 |
ハッシュマップ | HashMap |
リスト | リスト |
配列リスト | 配列リスト |
コレクション | コレクション |
イテレータ | イテレータ |
2.マッピング構成ファイルmapper.xml
判断すれば
<select id="findByCondition" parameterType="user" resultType="user">
select * from User
<where>
<if test="id!=0">
and id=#{
id}
</if>
<if test="username!=null">
and username=#{
username}
</if>
</where>
</select>
ループSQLのスプライシング
<select id="findByIds" parameterType="list" resultType="user">
select * from User
<where>
<foreach collection="list" open="id in(" close=")" item="id" separator=",">
#{
id}
</foreach>
</where>
</select>
foreachタグは、コレクションをトラバースするために使用されます。
- コレクション:トラバースするコレクション要素を表します。書き込むときに#{}を書き込まないように注意してください
- open:ステートメントの始まりを表します
- close:終了部分を表します
- item:トラバーサルコレクションの各要素、生成された変数名を表します
- sperator:セパレーターを表します
SQLフラグメントの抽出
SQLは、重複するSQLを抽出し、使用時にincludeを使用して引用し、最終的にSQLの再利用の目的を達成できます。
<!--抽取sql片段简化编写-->
<sql id="selectUser" select * from User</sql>
<select id="findById" parameterType="int" resultType="user">
<include refid="selectUser"></include> where id=#{
id}
</select>
<select id="findByIds" parameterType="list" resultType="user">
<include refid="selectUser"></include>
<where>
<foreach collection="array" open="id in(" close=")" item="id" separator=",">
#{
id}
</foreach>
</where>
</select>