SqlSessionFactory 如何使用MyBatis,首先就是xml或java代碼生成SqlSessionFactory,MyBatis給咱們提供了SqlSessionFactoryBuilder(構造器),org.apache.ibatis.session.Configuration這個類做爲引導,使用的是Builder模式。java
在MyBatis中有兩種形式生成SqlSessionFactory,一種是XML,一種是java代碼實現。這裏小編推薦使用XML的形式,也是大多數企業開發的選擇。配置XML或java代碼後,MyBatis會讀取配置文件,經過Configuration類對象構建MyBatis的上下文。spring
須要提醒你們的是SqlSessionFactory是一個接口,而它的實現類爲SqlSessionManager和DefaultSqlSessionFactory兩個類。sql
通常用DefaultSqlSessionFactory,DefaultSqlSessionFactory在多線程中,而它的具體實現依靠DefaultSqlSessionFactory。數據庫
使用XML構建SqlSessionFactory 主要分爲兩類:一類是基礎配置文件,一般只有一個,主要配置最基礎的上下文參數和運行環境:另外一類爲映射文件,主要配置映射關係、SQL、參數等。apache
<mappers>
<!-- 註冊userMapper.xml文件,
userMapper.xml位於com.feiyu.mapping這個包下,因此resource寫成com/feiyu/mapping/userMapper.xml-->
<mapper resource="com/feiyu/mapping/userMapper.xml"/>
</mappers>
複製代碼
元素:定義一個別名,表明com.feiyu.POJO.User這個類,在上下文中科院代替全限定名使用。編程
元素:默認爲開發者,裏面的是配置事務管理器,採用JDBC管理器方式,使用 配置數據庫,type="POOLED"爲MyBatis內部提供的鏈接池方式。緩存
//mybatis的配置文件
String resource = "mybatis-config.xml";
//使用類加載器加載mybatis的配置文件(它也加載關聯的映射文件)
InputStream inputStream = Test1.class.getClassLoader().getResourceAsStream(resource);
//構建sqlSession的工廠
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//使用MyBatis提供的Resources類加載mybatis的配置文件(它也加載關聯的映射文件)
//Reader reader = Resources.getResourceAsReader(resource);
//構建sqlSession的工廠
//SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(reader);
//建立能執行映射文件中sql的sqlSession
SqlSession session = sessionFactory.openSession();
/*
* 映射sql的標識字符串,
* com.feiyu.mapping.userMapper是userMapper.xml文件中mapper標籤的namespace屬性的值,
* getUser是select標籤的id屬性值,經過select標籤的id屬性值就能夠找到要執行的SQL
*/
String statement = "com.feiyu.mapping.userMapper.getUser";//映射sql的標識字符串
//執行查詢返回一個惟一user對象的sql
User user = session.selectOne(statement, 1);
System.out.println(user);
複製代碼
讀取mybatis-config.xml,而後經過SqlSessionFactoryBuilder的Builber方法建立SqlSessionFactory。session
SqlSession 做用至關於一個JDBC中的Connection對象,表明一個鏈接資源的啓用。有如下三個做用:mybatis
SqlSession sqlSession = SqlSessionFactory.openSession();多線程
下面咱們來看看SqlSession在操做事務時的僞代碼:
//定義SqlSession SqlSession sqlSession = null; try{ //打開SqlSession會話 sqlSession = SqlSessionFactory.openSession(); sqlSession.commit();//提交事務 }catch (Exception ex) { sqlSession.rollback();//回滾事務 }finally { //在finally語句中確保資源被順利關閉 if (sqlSession != null) { sqlSession.close(); } }
使用commit方法提交事務,和使用rollback方法回滾事務。
注意:數據庫的鏈接資源使用後要及時的關閉它,若是不及時關閉,數據庫的鏈接資源就會很快被消耗光,整個系統將陷入癱瘓狀態,因此這裏使用finally語句使其順利關閉。
映射器 在MyBatis中,映射器尤其的重要,也是最複雜的組件,它是由一個接口和對應的XML文件(或@註解)構成。
有如下4個做用:
描述映射規則 配置緩存 提供SQL語句,配置SQL參數類型,返回類型,緩存刷新等 提供動態SQL 本文只實現XML文件形式映射器方式,也是大多數開發的選擇,下面首先定義一個POJO:
package com.feiyu.POJO; /**
@author gacl
users表所對應的實體類 */ public class User { //實體類的屬性和表的字段名稱一一對應 private int id; private String name; private int age;
public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", age=" + age + "]"; } }
映射器接口
package com.feiyu.mapping;
import com.feiyu.POJO.User;
public interface UserMapper { public User getUser(int id); }
引入XML文件
元素:其中的namespace對應的是一個接口的全限定名,這樣MyBatis就能夠根據上下文找到對應的接口