4、MyBatis使用的对象 & 封装工具类

学习资源:动力节点《2020最新MyBatis教程【IDEA版】-MyBatis从入门到精通》



@Test
public void testStart() throws IOException {
    // 1.mybatis 主配置文件
    String config = "mybatis-config.xml";
    // 2.读取配置文件
    InputStream in = Resources.getResourceAsStream(config);
    // 3.创建 SqlSessionFactoryBuilder 对象,目的是获取 SqlSession
    SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder();
    // 4.创建 SqlSessionFactory 对象
    SqlSessionFactory factory = builder.build(in);
    // 5.获取 SqlSession,SqlSession 能执行 sql 语句
    SqlSession session = factory.openSession();
    // 6.指定要执行的 sql 语句的标识 = SQL映射文件中的 namespace + "." + 标签的id
    String sql = "com.bjpowernode.dao.StudentDao.selectStudents";
    // 7.执行 SqlSession 的 selectList()
    List<Student> studentList = session.selectList(sql);
    // 8.循环输出查询结果
	studentList.forEach( student -> System.out.println(student));
    // 9.关闭 SqlSession,释放资源
	session.close();
}

1、MyBatis 中使用到的对象

Resources 类

Resources 类,顾名思义就是资源,用于读取资源文件。其有很多方法通过加载并解析资源文件,返回不同类型的 IO 流对象。


SqlSessionFactoryBuilder 类

SqlSessionFactory 的创建 , 需要使用 SqlSessionFactoryBuilder 对象的 build() 方 法 。 由于 SqlSessionFactoryBuilder 对象在创建完工厂对象后,就完成了其历史使命,即可被销毁。所以,一般会将该 SqlSessionFactoryBuilder 对象创建为一个方法内的局部对象,方法结束,对象销毁。


SqlSessionFactory 接口

SqlSessionFactory 接口对象是一个重量级对象(系统开销大的对象),是线程安全的, 所以一个应用只需要一个该对象即可。 创建SqlSession需要使用 SqlSessionFactory 接口的的 openSession()

  • openSession(true) :创建一个有自动提交功能的 SqlSession
  • openSession(false) :创建一个非自动提交功能的 SqlSession ,需手动提交
  • openSession() :同 openSession(false)

SqlSession 接口

SqlSession 接口对象用于执行持久化操作。一个 SqlSession 对应着一次数据库会话,一次会话以 SqlSession 对象的创建开始,以 SqlSession 对象的关闭结束。SqlSession 接口对象是线程不安全的,所以每次数据库会话结束前,需要马上调用其 close() 方法,将其关闭。再次需要会话,再次创建。 SqlSession 在方法内部创建,使用完毕后关闭。


2、工具类

获取 SqlSession 对象的代码还是有些冗余的,可以创建一个工具类,快速获取此对象。

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;

public class MyBatisUtil {
    //定义 SqlSessionFactory
    private static SqlSessionFactory factory = null;
    static {
        //使用 静态块 创建一次 SqlSessionFactory
        try{
        	String config = "mybatis-config.xml";
        	//读取配置文件
        	InputStream in = Resources.getResourceAsStream(config);
        	//创建 SqlSessionFactory 对象
        	factory = new SqlSessionFactoryBuilder().build(in);
        }catch (Exception e){
        	factory = null;
        	e.printStackTrace();
    	}
	}
    
	/* 获取 SqlSession 对象 */
	public static SqlSession getSqlSession(){
    SqlSession session = null;
    if( factory != null){
        
        // session = factory.openSession(true);
    	session = factory.openSession();
    }
    return session;
    }
}

使用方式:

@Test
public void testUtils() throws IOException {
    SqlSession session = MyBatisUtil.getSqlSession();
    List<Student> studentList = session.selectList("com.bjpowernode.dao.StudentDao.selectStudents");
    studentList.forEach( student -> System.out.println(student));
    session.close();
}
原文地址:https://www.cnblogs.com/sout-ch233/p/13608299.html