Mybatis入門例項
MyBatis 簡介
MyBatis 是一款優秀的持久層框架,它支援定製化 SQL、儲存過程以及高階對映。MyBatis 避免了幾乎所有的 JDBC 程式碼和手動設定引數以及獲取結果集。MyBatis 可以使用簡單的 XML 或註解來配置和對映原生資訊,將介面和 Java 的 POJOs(Plain Old Java Objects,普通的 Java物件)對映成資料庫中的記錄。
構建專案
使用gradle
compile 'org.mybatis:mybatis:3.4.6'
使用Maven
<dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>x.x.x</version> </dependency>
準備
使用gradle匯入MySQL驅動
compile 'mysql:mysql-connector-java:8.0.13'
準備資料庫
入門例項
SqlSessionFactory
每個基於MyBatis的應用都是以一個SqlSessionFactory的例項為中心的。它可以通過SqlSessionFactoryBuilder產生。而SqlSessionFactoryBuilder的例項則可以從XML配置檔案或者一個預先設定好的Configuration的例項構建出來。
MyBatis包含了一個名叫Resources的工具類,它包含一些使用方法,可以使得從classpath或者其他位置載入資原始檔更加方便。
我們可以採用如下的方式使用XML構建SqlSessionFactory:
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
編寫XML配置檔案
在XML配置檔案中,包含了對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>
<!--配置MyBatis的環境設定 -->
<environments default="development">
<!-- 開發環境下的環境設定-->
<environment id="development">
<transactionManager type="JDBC"/>
<!--配置資料庫連線-->
<dataSource type="POOLED">
<!--MySQL驅動,使用舊版驅動會報錯-->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<!--相應的URL,在某個驅動版本之後,不使用SSL會報錯,不設定時區也會報錯,後面設定接受的字元編碼等-->
<property name="url" value="jdbc:mysql://127.0.0.1:3306/java?useSSL=true&
serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--SQL對映-->
<mappers>
<mapper resource="Mapper/StudentMapper.xml"/>
</mappers>
</configuration>
從 SqlSessionFactory 中獲取 SqlSession
SqlSessionFactory 是一個工廠類,用來生產SqlSession類例項。
SqlSession 例項包含了所有面向資料庫執行SQL命令所需要的全部方法,可以通過SqlSession例項來直接執行已經映射了的SQL語句,
我們可以使用如下的方法獲取SqlSession:
SqlSession sqlSession = sqlSessionFactory.openSession();
為結果建立DataObject
為了將從資料庫中獲取的結果集儲存在物件中,我們需要為其建立一個DataObject,按照需求為每個欄位建立屬性變數。對於一些不需要的屬性比如自增的ID,可以無需建立對應的屬性變數。
相應的DataObject:
package TestMybatis;
public class DataObject {
private int id;
private String name;
private int num;
private String birthday;
private String department;
//----------Setter and Getter--------------
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getNum() {
return num;
}
public String getBirthday() {
return birthday;
}
public String getDepartment() {
return department;
}
public void setId(int id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setNum(int num) {
this.num = num;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public void setDepartment(String department) {
this.department = department;
}
//----------Setter and Getter--------------
@Override
public String toString(){
return getName() + " 的ID是 " + getId() + " 出生於 " + getBirthday() + " 是 " + getDepartment() + "學院的學生";
}
}
為SQL語句建立對映
在MyBatis中,使用的SQL語句都是通過對映定義的。存在XML對映以及Java註解兩種方法。對於簡單的SQL語句Java註釋可以輕鬆應對,但是對於一些複雜的語句,還是推薦使用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">
<!--為該mapper指定一個唯一的namespace-->
<mapper namespace="StudentMapper">
<!--
在select標籤中定義一個select語句。其唯一的ID屬性為getStudent,查詢所需要使用到的引數型別為int
查詢返回的型別為TestMybatis.DataObject,即將查詢結果封裝成一個DataObject類的物件進行返回
-->
<select id="getStudent" parameterType="int" resultType="TestMybatis.DataObject">
select * from student where id=#{id}
</select>
</mapper>
在這裡我們就可以向上翻一翻上面的MyBatis的配置檔案,在在下方的mapper中引用了我們剛剛編寫的StudentMapper.xml,這樣就完成了對映的註冊。
剩下的幾步
最後使用獲取的sqlSession進行查詢,並且列印返回的實體類:
DataObject data = sqlSession.selectOne("getStudent",100);
System.out.println(data);