12.20 Java基礎篇:開源框架Mybatis創建流程入門實踐


<code>認真寫文章,用心做分享。 

公眾號:Java耕耘者 (整套Java資料)/<code>
Java基礎篇:開源框架Mybatis創建流程入門實踐

開始安裝

如果使用 Maven 來構建項目,則需將下面的 dependency 代碼置於 pom.xml 文件中:

<code><dependency>
<groupid>org.mybatis/<groupid>
<artifactid>mybatis/<artifactid>
<version>x.x.x/<version>
/<dependency>/<code>

配置文件

XML 配置文件(configuration XML)中包含了對 MyBatis 系統的核心設置,包含獲取數據庫連接實例的數據源(DataSource)和決定事務範圍和控制方式的事務管理器(TransactionManager)
示例(mybatisConfig.xml):

<code>

br> PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

<environments>
<environment>

<transactionmanager>

<datasource>
<property>
<property>

<property>
<property>
/<datasource>
/<environment>
/<environments>

<mappers>
<mapper>
/<mappers>
/<configuration>/<code>

關於更多配置及用法,詳見官方文檔(翻譯中文版的)XML映射配置文件

Mapper映射器

創建一個user表

<code>CREATE TABLE `users` (
`id` int(3) NOT NULL AUTO_INCREMENT,
`username` varchar(20) DEFAULT NULL,
`birthday` datetime DEFAULT NULL,
`sex` char(2) DEFAULT NULL,
`address` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;/<code>

創建一個實體類Users

<code>public class Users {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
// 這裡省略了Getter/Setter方法
@Override
public String toString() {
return super.toString() + "users = " + this.id + " | "+ this.username + " | "
+ this.birthday + " | " + this.sex + " | " + this.address;
}
}/<code>

寫一個接口來描述方法的接口

最後SQL語句的執行也是通過調用這個方法,再通過代理執行。

<code>package com.ncusoft.mybatisdemos.mapper;
public interface UserMapper {
/**
* 根據用戶id獲取數據
* @param id 用戶id
* @return Users
*/
Users findById(Integer id);
}/<code>

編寫XML映射文件(UsersMapper.xml)

它能直接映射到剛剛定義的接口中的方法,並在XML中定義要執行的SQL語句(有個要注意的是,Mapper接口和XML映射文件的路徑一定要一模一樣,不然就無法映射了)。
更多詳細用法見Mapper XML 文件

<code>

br> PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper>


<select>
select * from users where id = #{id}
/<select>
/<mapper>/<code>

使用

執行流程:

Java基礎篇:開源框架Mybatis創建流程入門實踐

下面是一個使用示例,把這個代碼放在測試代碼中執行。

<code>// 從配置文件中獲取字節流(通過類加載器的方法) 配置文件應該放在項目資源的根路徑下
InputStream in = Resources.getResourceAsStream("mybatisConfig.xml");
// 創建一個工廠的構建器
SqlSessionFactoryBuilder bulider = new SqlSessionFactoryBuilder();
// 構建器通過傳入字節流來構建一個SqlSessionFactory,
SqlSessionFactory factory = bulider.build(in);
// 通過工廠來創建一個SqlSession實例
SqlSession session = factory.openSession();
// 通過SqlSession對象來獲取Mapper接口的代理對象,用來實現Mapper接口的操作
UserMapper userMapper = session.getMapper(UserMapper.class);
// 通過剛剛創建的代理對象來執行Mapper接口中的方法
Users users = userMapper.findById(1);
System.out.println(users);/<code>

來看一下執行的結果日誌並分析一下:

<code>// 打開一個數據庫連接
16:35:24.478 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Opening JDBC Connection
// 連接池中沒有空閒連接,於是新建了一個連接
16:35:25.197 [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource - Created connection 1832532108.
// 由於factory.openSession()使用的是默認方法,所以autocommit的值將會被設置為false,也就是關閉了數據庫的自動事務提交
16:35:25.197 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@6d3a388c]
// 要執行的語句,這裡使用了SQL預處理,用?做佔位符

16:35:25.204 [main] DEBUG com.ncusoft.mybatisdemos.mapper.UserMapper.findById - ==> Preparing: select * from users where id = ?
// 傳入的參數, Integer類型的1
16:35:25.263 [main] DEBUG com.ncusoft.mybatisdemos.mapper.UserMapper.findById - ==> Parameters: 1(Integer)
// 查詢到的結果總數為1
16:35:25.348 [main] DEBUG com.ncusoft.mybatisdemos.mapper.UserMapper.findById - <== Total: 1
// 打印查出來的結果
com.ncusoft.mybatisdemos.entity.Users@5ba3f27ausers = 1 | 小熊 | Mon Dec 16 08:00:00 GMT+08:00 2019 | 男 | 江西九江
// SQL操作完畢,將autocommit重置為true
16:35:25.382 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@6d3a388c]
// 關閉當前數據庫連接
16:35:25.382 [main] DEBUG org.apache.ibatis.transaction.jdbc.JdbcTransaction - Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@6d3a388c]
// 連接空閒,則放回連接池中
16:35:25.383 [main] DEBUG org.apache.ibatis.datasource.pooled.PooledDataSource - Returned connection 1832532108 to pool./<code>


分享到:


相關文章: