zoukankan      html  css  js  c++  java
  • 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();
    }
    
  • 相关阅读:
    UVA 10462 Is There A Second Way Left?(次小生成树&Prim&Kruskal)题解
    POJ 1679 The Unique MST (次小生成树)题解
    POJ 2373 Dividing the Path (单调队列优化DP)题解
    BZOJ 2709 迷宫花园
    BZOJ 1270 雷涛的小猫
    BZOJ 2834 回家的路
    BZOJ 2506 calc
    BZOJ 3124 直径
    BZOJ 4416 阶乘字符串
    BZOJ 3930 选数
  • 原文地址:https://www.cnblogs.com/sout-ch233/p/13608299.html
Copyright © 2011-2022 走看看