1つ、Mybatisの紹介
1. Mybatisとは何ですか?
MyBatisは、Javaに基づく永続化レイヤーフレームワークであるApacheのオープンソースプロジェクトiBatisです。用来写dao
2. Mybatisの特徴は何ですか?
(1)最も簡単なインストールでは2つのjarファイルと複数のSQLマッピングファイルの構成のみが必要です。自带连接池
(2)SQLはxmlで記述されているため、管理と最適化の統合に便利です。
(3)SQLとコードを分離すると保守性が向上します
(4)マッピングタグを提供し、オブジェクトとデータベースのORMフィールド関係マッピングをサポートします
(5)オブジェクト関係マッピングタグを提供し、オブジェクト関係の形成と保守をサポートします
(6)xmlタグを提供し、動的sqlの記述をサポートします
3.Mybatisアーキテクチャ
2、Mybatis環境構築
1.mybatisをダウンロードします
mybaitsのコードはgithub.comによって管理されています
ダウンロードリンク:https://github.com/mybatis/mybatis-3/releases
2.jarパッケージをインポートします
テスト関連パッケージ:junit hamcrest
ログ関連パッケージ:log4j-1.2.16 slf4-api slf4j-log4j12
データベース関連jarパッケージ:mysql-connector
Mybatisは最初にjarパッケージを閉じます:mybaits-3.4.5
- 関連する依存関係をmavenプロジェクトpom.xmlにインポートします
<dependencies>
<!-- junit-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!-- MySql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.32</version>
</dependency>
<!-- Mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.5</version>
</dependency>
<!--日志包-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
3.jarパッケージlog4j.propertiesをインポートします
# Global logging configuration
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
第三に、Mybatisの操作手順
1.Mybatis開発プロセス
(1)SqlMapConfig.xml構成ファイルをロードします
(2)SqlSessionFactoryBuilderオブジェクトを作成します
(3)SqlSessionFactoryオブジェクトを作成します
(4)SqlSessionオブジェクトを作成します
(5)削除するSqlSessionオブジェクトを実行します
(6)トランザクションを送信します
(7)リソースを解放します
2. Mybatisエントリケース(IDに従って削除)
(1)コア構成ファイル:SqlMapConfig.xml構成ファイル
src \ main \ resources \ SqlMapConfig.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">
<!--dtd是对xml配置标签与属性的约束-->
<configuration>
<!--配置mybatis的开发环境,该目录下可以有多个environment,
和spring整合后 environments配置将废除-->
<environments default="mysql"><!--当前默认选择的是mysql环境-->
<!--配置mysql的环境-->
<environment id="mysql">
<!--配置事务的类型:jdbc事务管理-->
<transactionManager type="JDBC"/>
<!--配置连接数据库的信息:用的是数据源(连接池)-->
<dataSource type="POOLED">
<!--四大配置信息-->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis01?characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value=""/>
</dataSource>
</environment>
</environments>
<!--配置多个映射文件,告知mybatis映射配置的位置-->
<mappers>
<mapper resource="UserMapper.xml"/>
</mappers>
</configuration>
(2)マッピングファイル:ユーザーのマッピング構成ファイルで構成し、このマッピングをSqlMapConfig.xmlのmappersタグに追加します。
src \ main \ resources \ UserMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!--mapper的约束文件-->
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--namespace命名空间,用于隔离sql
当我们有多个UserMapper.xml时,为了区分不同的文件,则需要指定namespace,这个值必须唯一。
需要取一个名字来辨别,可以随便取,但一般是用对应的实体类包名-->
<mapper namespace="cn.cyl.bean.User">
<!--id:Mybatis是将sql语句写在xml文件中,
以后sqlSession对象根据namespace.id的格式来获取sql语句-->
<!--parameterType:用于指定传入参数的类-->
<delete id="deleteById" parameterType="int">
<!--sql 语句中使用#{}字符:
它代表占位符,相当于原来 jdbc 部分所学的 ?,都是用于执行语句时替换实际的数据。
具体的数据是由#{}里面的内容决定的。
#{}中内容的写法:
由于数据类型是基本类型,所以此处可以随意写。 -->
delete from user where id = #{id}
</delete>
</mapper>
(3)テスト
src \ test \ java \ cn \ cyl \ pack01 \ Test01Mybatis.javaをテストクラスに追加します
public class Test01Mybatis {
@Test
public void test01(){
//1.使用类加载器 读取SqlMapConfig.xml配置文件
InputStream inputStream = Test01Mybatis.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
//2.创建构建者对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//3.创建SqlSessionFactory工厂对象; 加载核心配置文件,参1:输入流
SqlSessionFactory sessionFactory = sqlSessionFactoryBuilder.build(inputStream);
//4.创建SqlSession对象
SqlSession sqlSession = sessionFactory.openSession();
//5.执行SqlSession对象执行删除
//sql语句:delete from user where id = ?
//执行删除 参1:namespace.id的格式 参2:参数值
sqlSession.delete("cn.cyl.bean.User.deleteById",24);
//6.提交事务
//mybatis的sqlSession不会自动提交,需要手动提交,不然不会执行sql语句
//只有增删改需要提交,查询不需要(因为查询只有读操作,没有写操作)
sqlSession.commit();
//7.释放资源
sqlSession.close();
}
}
3.MySessionUtilをカプセル化します
(1)SqlSessionツールクラス
src \ main \ java \ cn \ cyl \ util \ MySessionUtils.java
public class MySessionUtils {
//定义为成员变量
private static SqlSessionFactory sessionFactory;
//static 静态代码,在类加载的时候执行一次,且只执行一次
static {
//1.使用类加载器 读取SqlMapConfig.xml配置文件
InputStream inputStream = MySessionUtils.class.getClassLoader().getResourceAsStream("SqlMapConfig.xml");
//2.创建构建者对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();
//3.创建SqlSessionFactory工厂对象
sessionFactory = sqlSessionFactoryBuilder.build(inputStream);//加载核心配置文件,参1:输入流
}
public static SqlSession getSession(){
//4.创建SqlSession对象
SqlSession sqlSession = sessionFactory.openSession();
return sqlSession;
}
}
(2)テストタイプtest
src \ test \ java \ cn \ cyl \ pack01 \ Test02Mybatis.java`
public class Test02Mybatis {
@Test
public void test01(){
//4.创建SqlSession对象
SqlSession sqlSession = MySessionUtils.getSession();
//5.执行SqlSession对象执行删除
//sql语句:delete from user where id = ?
sqlSession.delete("cn.cyl.bean.User.deleteById",24);//执行删除 参1:namespace.id的格式 参2:参数值
//6.提交事务
//只有增删改需要提交,查询不需要(因为查询只有读操作,没有写操作)
//mybatis的sqlSession不会自动提交,需要手动提交,不然不会执行sql语句
sqlSession.commit();
//7.释放资源
sqlSession.close();
}
}
4、主要なカテゴリー分析
SqlSessionの使用範囲SqlSessionは、クエリ、挿入、更新、削除など、データベースに対する操作をカプセル化します。
SqlSessionは、SqlSessionFactoryによって作成されます。
SqlSessionFactoryは、SqlSessionFactoryBuilderを介して作成されます。- SqlSessionFactoryBuilder
SqlSessionFactoryBuilderは、SqlSessionFacotyの作成に使用されます。SqlSessionFacotyが作成されると、SqlSessionはSqlSessionFactoryを介して作成されるため、SqlSessionFactoryBuilderは必要ありません。したがって、SqlSessionFactoryBuilderをツールクラスとして使用できます。最適な使用範囲は、メソッドスコープ、つまりメソッド本体のローカル変数です。 - SqlSessionFactory
SqlSessionFactoryは、openSessionのさまざまなオーバーロードメソッドを定義するインターフェイスです。SqlSessionFactoryの最適な使用範囲は、アプリケーションの実行時間全体です。作成すると、再利用できます。SqlSessionFactoryは、通常、シングルトンモードで管理されます。