• 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();
    }
    
  • 相关阅读:
    消息中间件(一)MQ详解及四大MQ比较
    WebSocket 详解教程
    Nginx 简易教程
    排序七 归并排序
    排序五 简单选择排序
    排序四 希尔排序
    排序二 快速排序
    排序一 冒泡排序
    [算法题] 人民币大小写转换(阿拉伯数字和汉字转换)
    Linux编程 18 安装软件程序(yum工具对软件包安装,删除,更新介绍)
  • 原文地址:https://www.cnblogs.com/sout-ch233/p/13608299.html
Copyright © 2020-2023  润新知