MyBatis入門實驗(2)之介面程式設計
實驗內容
在上一章中,實現了直接通過 sqlSession 執行指定的SQL語句,但如果SqlID拼寫出錯,或者是入引數據型別不正確都可能導致執行時異常,並不能在編譯階段檢查出來。
本次實驗將使用 mybatis 的介面類的方式執行SQL語句從資料庫中取出資料,並封裝成Java物件返回
這種方式更加安全、更加簡單,也是現在主流使用的方式
操作步驟
一、安裝
新增Maven依賴(本文使用版本為3.4.6)
<dependency>
<groupId>org.mybatis</groupId>
<artifactId >mybatis</artifactId>
<version>x.x.x</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.42</version>
</dependency>
二、建立資料庫及表結構
CREATE TABLE `user` (
`id` bigint(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`username` varchar(32) NOT NULL COMMENT '使用者名稱',
`password` varchar(64) NOT NULL COMMENT '密碼',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
INSERT INTO `user` VALUES ('1', 'admin', '123');
三、建立 Mybatis 配置檔案
在 src/main/resources
目錄下建立 mybatis-config.xml
檔案,內容如下
與上一章不同的地方:載入 mappers
時,不僅需要載入XML檔案,還需要載入新建立的介面類
<configuration>
<properties resource="jdbc.properties"></properties>
<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="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
</environments>
<!-- 載入XML,同時載入介面類 -->
<mappers>
<mapper class="tutorial.mybatis.mapper.UserMapper"></mapper>
<mapper resource="mybatis/User.xml"></mapper>
</mappers>
</configuration>
在 src/main/resources
目錄下建立 jdbc.properties
檔案,內容如下
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/tutorial_mybatis?characterEncoding=utf-8&useSSL=true
jdbc.username=root
jdbc.password=
四、建立實體類和對映檔案
建立包 tutorial.mybatis.model
,並在該包下建立 User
類,內容如下
public class User {
private Long id;
private String username;
private String password;
// 省略 get / set 方法
}
在 src/main/resources
目錄下建立目錄 mybatis
,並在該目錄下建立 User.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">
<!-- 名稱空間修改為介面類的路徑,mybatis 會通過介面類自動定址至相應的XML檔案,獲取SQL語句 -->
<mapper namespace="tutorial.mybatis.mapper.UserMapper">
<select id="getUserByID" parameterType="int" resultType="tutorial.mybatis.model.User">
select * from `user` where id = #{id}
</select>
</mapper>
五、建立介面類
建立包 tutorial.mybatis.mapper
,並在該包下建立介面 UserMapper
,內容如下
public interface UserMapper {
User getUserByID(Long id);
}
六、構建
準備工作就緒,開始最終章,建立啟動類 MybatisConfig
,內容如下:
與上一章不同的地方:使用 session.getMapper(UserMapper.class)
的方式獲取介面類,然後安全地執行介面類中的方法。
public class MybatisConfig {
private static SqlSessionFactory sqlSessionFactory;
private static Reader reader;
static {
try {
reader = Resources.getResourceAsReader("mybatis-config.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws IOException {
SqlSession session = sqlSessionFactory.openSession();
try {
UserMapper userMapper = session.getMapper(UserMapper.class);
User user = userMapper.getUserByID(1L);
if (user != null) {
String userInfo = "名字:" + user.getUsername()+", 密碼:" + user.getPassword();
System.out.println(userInfo);
}
} finally {
session.close();
}
}
}
流程梳理
1、main函式啟動,執行 static 程式碼塊,使用 mybatis-config.xml
檔案構建sqlSessionFactory,這個過程中會載入 xml 檔案及介面類
2、建立 sqlSession 連線,使用 session.getMapper() 方法獲取介面類例項
3、執行介面類方法,mybatis 會根據介面類路徑去匹配 namespace,方法名匹配 sqlId,去XML檔案中查詢相應的SQL語句來執行