目次
序文
この記事は知識復習に便利なmybatisのクイックスタートと基礎知識ポイントをまとめたもので、今後も不足分は随時追加していく予定です。
Mybatsi の紹介
Apache のオープン ソース プロジェクト iBatis
これは、ネイティブ JDBC コードの大きなチャンクを簡素化する Java ベースの永続レイヤー フレームワークです。
軽量、優れたパフォーマンス
- SQL と Java のコーディングは分離されており、機能の境界は明確です。Java コードはビジネスに焦点を当て、SQL ステートメントはデータに焦点を当てます
- 開発効率はHIbernateより若干劣るが許容範囲
MyBatisの特徴
- MyBatis は、カスタム SQL、ストアド プロシージャ、および高度なマッピングをサポートする優れた永続レイヤー フレームワークです。
- MyBatis は、ほぼすべての JDBC コードを回避し、パラメーターを手動で設定して結果セットを取得することを回避します。
- MyBatis は、構成とオリジナルのマッピングに単純な XML またはアノテーションを使用し、インターフェイスと Java POJO (Plain Old Java Objects、通常の Java オブジェクト) をデータベース内のレコードにマップできます。
- MyBatis は、半自動の ORM (Object Relation Mapping) フレームワークです。
Mybatisのクイックスタート
1. Mybatis のコア依存関係をインポートする
<!-- Mybatis核心 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
2. MyBatis のコア設定ファイルを作成する
maven の場合は、resource フォルダーの下にコア構成ファイルを作成します。
<?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>
<!--设置连接数据库的环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/MyBatis"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<mapper resource="mappers/UserMapper.xml"/>
</mappers>
</configuration>
SpringならSpringで管理されている ymlの設定ファイルにどのような接続プールとデータソースが書かれているのか。
3. データベースのテーブル フィールドに従って、pojo パッケージの下にエンティティ クラスを作成します。
テーブルに対応する pojo の例
POJO のエンティティ クラスについては、これ以上説明する必要はありません。
4. パーシスタンス レイヤーとしてマッパー パッケージを作成する
pojo エンティティ クラスに従って、対応するマッパー インターフェイスを作成します。
たとえば、エンティティ クラスは User であり、これは UserMapper です。
public interface UserMapper {
/**
* 添加用户信息
*/
int insertUser();
}
新しい操作方法として挿入方法を追加
5. resource/mappers の下にマッパー マッピング ファイルを作成します。
テーブル実体クラスマッピングファイル xml
との 1 対 1 対応
<?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="com.atguigu.mybatis.mapper.UserMapper">
<!--int insertUser();-->
<insert id="insertUser">
insert into t_user values(null,'张三','123',23,'女')
</insert>
</mapper>
以下は2つの一貫したものですより重要
6. コア構成に xml マッピング ファイルを導入する
7. インターフェイスを呼び出して関数をテストする
ここに新規データ用の業務コードを書いてあるのに誰も調整してない. プロジェクトと同じではない. ビジネスレイヤがあってそれを呼び出すので, ここではマッパーメソッドを呼び出すjunitテストを書いている.データベースを操作します。
public class UserMapperTest {
@Test
public void testInsertUser() throws IOException {
//读取MyBatis的核心配置文件
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
//获取SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//通过核心配置文件所对应的字节输入流创建工厂类SqlSessionFactory,生产SqlSession对象
SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(is);
//获取sqlSession,此时通过SqlSession对象所操作的sql都必须手动提交或回滚事务
//SqlSession sqlSession = sqlSessionFactory.openSession();
//创建SqlSession对象,此时通过SqlSession对象所操作的sql都会自动提交
SqlSession sqlSession = sqlSessionFactory.openSession(true);
//通过代理模式创建UserMapper接口的代理实现类对象
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
//调用UserMapper接口中的方法,就可以根据UserMapper的全类名匹配元素文件,通过调用的方法名匹配映射文件中的SQL标签,并执行标签中的SQL语句
int result = userMapper.insertUser();
//提交事务
//sqlSession.commit();
System.out.println("result:" + result);
}
}
これで mybatis の基本的なデモが完成し、新しいデータを追加する機能が実現されました. mapper インターフェースが呼び出されると、mapper.xml にマップされ、xml で sql ステートメントが実行されます.
8. 取引の自動提出
他の crud 操作も基本的には同様です. 変更するか削除するかなどの操作メソッドを作成し, マッパーのマッピング xml に対応する SQL ステートメントを記述します. ステートメント ID はメソッド名にバインドされているため,メソッドが呼び出されると、どれが実行された SQL かがわかります
マイバティスの知識復習
MyBatisの追加、削除、修正、問い合わせ
それらはすべてxmlのcrudで書かれた単純なSQLであり、言うことはありません
-
追加
<!--int insertUser();--> <insert id="insertUser"> insert into t_user values(null,'admin','123456',23,'男','[email protected]') </insert>
-
消去
<!--int deleteUser();--> <delete id="deleteUser"> delete from t_user where id = 6 </delete>
-
改訂
<!--int updateUser();--> <update id="updateUser"> update t_user set username = '张三' where id = 5 </update>
-
エンティティ クラス オブジェクトのクエリ
<!--User getUserById();--> <select id="getUserById" resultType="com.atguigu.mybatis.bean.User"> select * from t_user where id = 2 </select>
-
クエリ コレクション
<!--List<User> getUserList();--> <select id="getUserList" resultType="com.atguigu.mybatis.bean.User"> select * from t_user </select>
ただし、クエリの戻り値の受け取りについては、いくつかの変更があります
- クエリのラベル選択では、resultType または resultMap 属性を設定する必要があります、エンティティ クラスとデータベース テーブル間のマッピング関係を設定するために使用されます
- resultType: 自動マッピング。属性名がテーブルのフィールド名と一致する場合に使用されます
- resultMap: カスタム マッピング。1 対多、多対 1、または一貫性のないフィールド名と属性名に使用されます。
- クエリされたデータが複数の場合、エンティティ クラスを戻り値として使用できません。コレクションのみを使用できます。それ以外の場合は例外 TooManyResultsException がスローされますが、クエリされたデータが 1 つしかない場合は、エンティティ クラスまたはコレクションを使用できます。戻り値として
コア構成ファイルにプロパティを導入する
プロパティにデータベース接続構成情報を設定することで置き換え
設定後、設定したプロパティファイルをmybatisのコア設定ファイルにインポートする必要があります
元の読み取り構成情報は、次の ${ } メソッドに置き換えられて読み取られます。
resultType のエイリアスを設定する
ここでresultTypeの受け取り型はフルパスのクラス名をいちいち書くのが面倒なので、フルパスのクラス名に簡単な別名をつけて、SQLクエリが多すぎてもそうならないようにすると楽です。疲れる。
最初にエイリアスを設定する
効果をもう一度見る
2 番目の方法は、より一般的に使用されます。
package タグを使用して、pojo パッケージの下のすべてのクラスをデフォルトのエイリアスに設定します (エイリアスを記述しない場合は、デフォルトに設定します)。これはクラス名そのものです。これにより、パッケージの下のすべてのクラスが1 つずつ設定する必要がないように、はるかに簡単に設定できます。
パッケージ単位でパッケージ配下の全型のデフォルトの型エイリアスを設定する
コア構成ファイルは、上記のようにマッピング ファイルにインポートすることも、バッチでインポートすることもできます
このパッケージを作成する際、真ん中を . ではなく / で区切って
(上記は間違って .xml ではなく .mapper です。インターフェースとマッピングされたパッケージ名は一致している必要があります)、パッケージ
xml ファイルのテンプレートを作成する
デモごとにmybatisの設定を行うのは時間の無駄で、テンプレートとして作成すると作成と同時に初期化されてしまいます。
mybatis-config.xml コア構成ファイルのテンプレート
<?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>
<!-- 引入jdbc配置文件信息-->
<properties resource="jdbc.properties"/>
<!-- 配置别名-->
<typeAliases>
<!-- 给实体类设置别名-->
<package name=""/>
</typeAliases>
<!--设置连接数据库的环境-->
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<!-- 以包为单位,将包中的xml文件全部引入-->
<package name="com.mapper"/>
</mappers>
</configuration>
これらのコードをコピーし、次のように
設定で開きます
ここに mybatis-config テンプレートを追加します
このようにマッパーのテンプレートを作ることもできるので、マッパーの前に大きなセクションを書く必要はありません.
マッパーのコードは、上記の操作もテンプレートとして設定されています.
<?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="">
</mapper>