記事のディレクトリ
MyBatisの紹介
- MyBatisはもともとApacheのオープンソースプロジェクトiBatisでした
- 2010年に、プロジェクトはApache Software FoundationからGoogleコードに移行され、MyBatisに名前が変更されました。
- 2013年11月にGitHubに移行しました
- MyBatisは、カスタムSQLクエリ、ストアドプロシージャ、高度なマッピングをサポートする永続性フレームワークです。
- 従来のJDBC開発と比較して、MyBatisはコードとパラメーターのほとんどすべての手動設定を排除します
- MyBatisはORMフレームワークです
- MyBatisは、構成とマッピングにXMLまたは注釈を使用できます。 エンティティクラスとSQLステートメント マッピング関係が確立され、Hibernateがエンティティクラスとデータベーステーブル間のマッピング関係を確立しました。
HibernateとMyBatisは、どちらも永続フレームワークとORMフレームワークです。すべてが永続化操作を簡素化しています。
MyBatisによって最終的に生成されるすべてのプログラムは、プログラマーによって手動で生成されます。
- GitHubソースコード:
https://github.com/mybatis/mybatis-3 - MyBatis中国語マニュアル:
http://www.mybatis.org/mybatis-3/zh/index.html
MyBatisコアXML構成ファイル
XML構成ファイル(構成XML)には、データベース接続インスタンスを取得するためのデータソース(DataSource)や、トランザクションのスコープと制御方法を決定するトランザクションマネージャー(TransactionManager)など、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>
<settings>
全局参数的设置
打印SQL语句
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
多个数据源环境配置
<environments default="development">
<environment id="development">
事务和数据源
</environment>
</environments>
</configuration>
<environment id="development">
<!-- 事务管理器类型 -->
<transactionManager type="JDBC"/>
<!-- 数据源选择从数据库连接池获得对象 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
管理対象を選択すると、コンテナによって管理され
ます。Springを使用した後、次のタイプを使用できます。
unpooled:データベース接続プールはありません。新しいリンクが作成されるたびにpooled:データベース接続プール。
データベースリンクプールのリンク
jndiを使用します。
-
UNPOOLED:このデータソースの実装は、要求されるたびに接続を開いたり閉じたりするだけです。少し遅いですが、タイムリーに利用可能な接続を必要としないため、単純なアプリケーションに適しています。
-
POOLED:これは、JDBC接続オブジェクトのデータソース接続プールの実装であり、新しい接続インスタンスを作成するときに必要な初期接続と認証時間を回避するために使用されます。これは、リクエストにすばやく応答するために現在のWebアプリケーションで使用されている一般的な方法です。
-
JNDI:このデータソースは、Springサーバーやアプリケーションサーバーなどのコンテナーを使用するように実装されています。コンテナーは、データソースを一元的または外部的に構成し、JNDIコンテキストへの参照を配置できます。
<?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">
<!-- SQL映射文件的配置 -->
<!-- nameSpace=映射空间。唯一标识的字符串-->
<mapper namespace="com.mybatis.mapper.UserMapper">
<select id="selectAllUsers"
resultType="com.mybatis.entity.User">
select * from user
</select>
</mapper>
MyBatisのメインクラス階層
SqlSessionFactory:Seiionファクトリクラスを作成できます
Executor:動的ステートメントの生成とキャッシュのメンテナンス
Javaデータ型とjdbcデータ型の比較表https://blog.csdn.net/qq_43517117/article/details/86551215
public class MyBatisUtil {
private static SqlSessionFactory factory;
//第一次加载时自动执行
static {
try {
//参数:主配置文件的文件名。默认路径resources文件目录
InputStream is = Resources.getResourceAsStream("mybatis.xml");
factory = new SqlSessionFactoryBuilder().build(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static SqlSession openSqlSession() {
return factory.openSession();
}
}
最初のMyBatisプログラム
マニュアル
プロジェクト構造
-
Javaプロジェクトを作成する
-
MyBatisに必要なjarパッケージをインポートします
1つは、MyBatisをパッケージ化する必要があることです。1つはMySqlドライバーパッケージです。
-
エンティティクラスとマッパーインターフェイス(DAO)を作成する
user.java
package com.mybatis.entity;
public class User {
private Integer id;
private String userName;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User [id=" + id + ", userName=" + userName + ", password=" + password + "]";
}
}
UserMapper.java
package com.mybatis.mapper;
import java.util.List;
import com.mybatis.entity.User;
//类型是interface ,
//这是映射器接口,定义对持久化对象的增删改查方法
//一个映射器接口对应一个映射文件
public interface UserMapper {
List<User> findAllUsers();
}
-
MyBatisのメイン構成ファイルmybatis.xmlを作成します
プロジェクトに新しいソースフォルダーを作成し、MyBatisのメイン構成ファイルを格納するためにresourcesという名前を付け、リソースに新しいXMLファイルを作成してmybatis.xmlという名前を付けます。
MaBatis.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>
<!--全局参数的设置,例如日志的实现类 -->
<settings>
<setting name="logImpl" value="STDOUT_LOGGING" />
</settings>
<!--多个数据源环境配置,default:下面定义的标签的id-->
<environments default="development">
<environment id="development">
<!-- 事务管理器类型 -->
<transactionManager type="JDBC"/>
<!-- 数据源选择从数据库连接池获得对象 -->
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/database_mybatis?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<!-- SQL映射文件 -->
<mappers>
<mapper resource="com/mybatis/mapper/UserMapper.xml"/>
</mappers>
</configuration>
-
MyBatisのSQLマッピングXMLファイルを作成します
MyBatisのSQLマッピングXMLファイルを作成します。マッピングファイルは、作成したばかりのマッパーインターフェイスと同じパッケージに含まれている必要があり、マッパーインターフェイスの名前も同じであるため、マッピングファイル名はUserMapper.xmlです。
注:マッピングファイルをメイン構成ファイルに関連付けるには
UserMapper.xml
<?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">
<!-- 映射文件 -->
<!-- nameSpace为唯一标识,映射器接口的全限定名 -->
<mapper namespace="com.mybatis.mapper.UserMapper">
<!-- select用来映射查询语句
id=对应的映射器接口的方法名
resultType同映射接口中该方法的返回值类型一致,或跟返回值中元素类型一致
因为没有声明文件位置,所以参数需要输入全部包名-->
<select id="findAllUsers" resultType="com.mybatis.entity.User">
select * from mybatis_01_01_user
</select>
<select id=""></select>
</mapper>
- SQLマッピングファイルをメイン構成ファイルに関連付けます
MyBatis.xmlファイルにコードを追加します
<!-- SQL映射文件 -->
<mappers>
<mapper resource="com/mybatis/mapper/UserMapper.xml"/>
</mappers>
- テストするコードを書く
Test.java
package com.mybatis.ui;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.mybatis.entity.User;
import com.mybatis.mapper.UserMapper;
import com.mybatis.util.MyBatisUtil;
public class Test {
public static void main(String[] args) {
System.out.println("=-=-=-=-=-=-=-=-=-=-=-=-=-=-");
//创建SqlSession对象
SqlSession session = MyBatisUtil.openSqlSession();
//映射器接口权限定名+方法名(映射文件的nameSpace的数值+某一条SQL语句映射的id属性的值)
//方式1,调用SqlSession的方法
System.out.println("-=---------------------");
List<User> users = session.selectList("com.mybatis.mapper.UserMapper.findAllUsers");
System.out.println(users);
session.close();
}
}
Test.java
package com.mybatis.ui;
import java.util.List;
import org.apache.ibatis.session.SqlSession;
import com.mybatis.entity.User;
import com.mybatis.mapper.UserMapper;
import com.mybatis.util.MyBatisUtil;
public class Test {
public static void main(String[] args) {
//方式2:更推荐
//参数=映射器接口的类型,
//返回值=该接口实现类型对象
SqlSession session = MyBatisUtil.openSqlSession();
UserMapper userMapper = session.getMapper(UserMapper.class);
List<User> users = userMapper.findAllUsers();
System.out.println(users);
System.out.println("----------------------------");
session.close();
}
}
SqlSessionワークフロー
トランザクションの操作はここに置かれます
SQLステートメントは、一意のIDを介して見つけることができます