目錄
- 一、MyBatis 物件分析
- 1. Resources 類
- 2. SqlSessionFactoryBuilder類
- 3. SqlSessionFactory介面
- 4. SqlSession 介面
- 二、創建工具類
- 1. 創建 MyBatisUtils類
- 2. 使用MyBatisUtils
一、MyBatis 物件分析
1. Resources 類
mybatis中的一個類, 負責讀取主組態檔,回傳 IO 流物件
InputStream in = Resources.getResourceAsStream("mybatis.xml");
2. SqlSessionFactoryBuilder類
SqlSessionFactory 的 創 建 , 需 要 使 用 SqlSessionFactoryBuilder 對 象 的 build() 方 法 ,
由 于SqlSessionFactoryBuilder 物件在創建完工廠物件后,就完成了其歷史使命,即可被銷毀,
所以,一般會將該 SqlSessionFactoryBuilder 物件創建為一個方法內的區域物件,方法結束,物件銷毀
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
SqlSessionFactory factory = builder.build(in);
3. SqlSessionFactory介面
重量級物件, 程式創建一個物件耗時比較長,使用資源比較多,是執行緒安全的,
在整個專案中,有一個就夠用了
SqlSessionFactory作用: 獲取SqlSession物件
SqlSession sqlSession = factory.openSession();
openSession()方法說明:
- openSession() :無引數的, 獲取是非自動提交事務的SqlSession物件
- openSession(boolean): openSession(true) 獲取自動提交事務的SqlSession.
openSession(false) 非自動提交事務的SqlSession物件
對于 insert 、delete、update 如果使用的無引數的,那么需要在執行完sql陳述句之后,手動的提交事務
4. SqlSession 介面
SqlSession 介面物件用于執行持久化操作,
SqlSession介面 :定義了操作資料的方法 例如 selectOne() ,selectList() ,insert(),update(), delete(), commit(), rollback()
在IDEA中 Ctrl + H就可以看到實作類
需要注意:
SqlSession物件不是執行緒安全的,需要在方法內部使用, 在執行sql陳述句之前,使用openSession()獲取SqlSession物件,
在執行完sql陳述句后,需要關閉它,執行SqlSession.close(). 這樣能保證他的使用是執行緒安全的
這樣的話在看之前寫的操作就懂了
public void testInsert() throws IOException {
// 訪問mybatis讀取student資料
//1.定義mybatis主組態檔的名稱, 從類路徑的根開始(target/clasess),編譯之后的目錄
String config = "mybatis.xml";
//2.讀取這個config表示的檔案
InputStream in = Resources.getResourceAsStream(config);
//3.創建了SqlSessionFactoryBuilder物件
SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
//4.創建SqlSessionFactory物件
SqlSessionFactory factory = builder.build(in);
//5.獲取SqlSession物件,從SqlSessionFactory中獲取SqlSession
SqlSession sqlSession = factory.openSession();
//6.【重要】指定要執行的sql陳述句的標識, sql映射檔案中的namespace + "." + 標簽的id值
// String sqlId = "com.md.dao.StudentDao"+"."+"selectStudents";
String sqlId = "com.md.dao.StudentDao.insertStudent";
//7.【重要】執行sql陳述句,通過sqlId找到陳述句
// 第一個引數是執行的sql陳述句,第二個是物件
int i = sqlSession.insert(sqlId,new Student(1004,"劉桑","[email protected]",18));
// 需要注意,mybatis默認不是自動提交事務,所以在寫完insert、update、delete之后,手動的提交事務
sqlSession.commit();
//8.輸出結果
System.out.println("執行insert影響的行數:"+i);
//9.關閉SqlSession物件
sqlSession.close();
}
二、創建工具類
1. 創建 MyBatisUtils類
在com.md下新建一個包utils,里面創建MyBatisUtils
至于為什么使用靜態代碼塊,主要看SqlSessionFactory介面的特性
package com.md.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.IOException;
import java.io.InputStream;
/**
* @author MD
* @create 2020-08-05 10:59
*/
public class MyBatisUtils {
private static SqlSessionFactory factory = null;
// 保證了SqlSessionFactory物件只創建一次
static {
// 和你專案的主組態檔名一致
String config = "mybatis.xml";
// 讀取這個config表示的檔案
try {
InputStream in = Resources.getResourceAsStream(config);
// 創建了SqlSessionFactory物件,使用創建了SqlSessionFactoryBuilder物件
factory = new SqlSessionFactoryBuilder().build(in);
} catch (IOException e) {
e.printStackTrace();
}
}
// 獲取SqlSession的方法
public static SqlSession getSqlSession() {
SqlSession sqlSession = null;
if (factory != null){
// 非自動提交事務
sqlSession = factory.openSession();
}
return sqlSession;
}
}
2. 使用MyBatisUtils
public static void main(String[] args) {
SqlSession sqlSession = MyBatisUtils.getSqlSession();
String sqlId = "com.md.dao.StudentDao.selectStudents";
List<Student> studentList = sqlSession.selectList(sqlId);
studentList.forEach(stu -> System.out.println(stu));
sqlSession.close();
}
這樣就方便很多,只用專注于寫sql就行了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/102088.html
標籤:Java
下一篇:設計模式之禪(六大設計原則)
