mybatisの基本情報


序文

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タイプの短い名前を設定)

![](https://img-blog.csdnimg.cn/20210112183132344.png
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>

おすすめ

転載: blog.csdn.net/weixin_39417423/article/details/112541360
おすすめ