MyBatis复习(三):MyBatis核心对象SqlSessionFactory和SqlSession

MyBatis有两个核心对象:SqlSessionFactory、SqlSession
  • SqlSessionFactory是MyBatis的核心对象,主要用于加载配置文件,初始化MyBatis,并创建SqlSession的作用。所以需要保证SqlSessionFactory在应用中全局唯一

  • SqlSession是MyBatis操作数据库的核心对象。SqlSession实在原始JDBC的基础上进行扩展,简化了与数据库的交互工作。并且SqlSession对象提供了数据表的CRUD对应的API方法。

  • SqlSession可以形象的看作是一个扩展过的JDBC的Connection扩展对象,它在原有的Connection对象的基础上封装了大量额外的实用方法

MyBatisUtils工具类

package com.cd.blog.config;

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: 落叶无痕
 * @Date: 2020/5/15 16:45
 */
public class MyBatisUtils {
    
    

    /*MyBatisUtils工具类,目的是创建全局唯一的SqlSessionFactory对象*/


    //static属于类不属于对象,且全局唯一
    private static SqlSessionFactory sqlSessionFactory = null;

    //利用静态块在初始化类时初始化SqlSessionFactory
    static {
    
    
        InputStream input = null;
        try {
    
    
			// 使用字节流方式加载classpath下的mybatis-config.xml核心配置文件
            input = Resources.getResourceAsStream("mybatis-config.xml");
			// 初始化SqlSessionFactory对象,并解析mybatis-config.xml文件
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(input);
        } catch (IOException e) {
    
    
            e.printStackTrace();
            //初始化错误时,抛出ExceptionInInitializerError异常通知调用者
            throw new ExceptionInInitializerError(e);
        }
    }

	// 创建SqlSession对象(SqlSession是JDBC的扩展类,专门用于与数据库交互)
    public static SqlSession openSession(){
    
    
    	//sqlSession默认会自动commit提交事务,设置为false代表关闭自动提交,改为手动提交
        return sqlSessionFactory.openSession(false);
    }

	// 释放一个有效的SqlSession对象
    public static void closeSession(SqlSession sqlSession){
    
    
        if(sqlSession != null){
    
    
            sqlSession.close();
        }
    }

}


测试

package com.cd.blog.config;

import org.apache.ibatis.session.SqlSession;
import org.junit.Test;

/**
 * @Author: 落叶无痕
 * @Date: 2020/5/15 17:14
 */
public class TestMyBatisUtils {
    
    

    @Test
    public void demo(){
    
    
        SqlSession sqlSession = null;
        try{
    
    
            sqlSession = MyBatisUtils.openSession();

            Teacher teacher=new Teacher();
            // 增
            teacher.setName("wang");
            sqlSession.insert("add",teacher);

            // 改
            teacher.setId(3);
            teacher.setName("chen");
            sqlSession.insert("update",teacher);

            // 删
            teacher.setId(3);
            sqlSession.insert("delete",teacher);

            //查
            System.out.println("查");
            getAll(sqlSession);

            sqlSession.commit(); // 提交事务

        }catch (Exception e){
    
    
            throw e;
        }finally {
    
    
            MyBatisUtils.closeSession(sqlSession);
        }
    }

    private static void getAll(SqlSession sqlSession){
    
    
        List<Teacher> ts=sqlSession.selectList("getAll");
        for (Teacher t:ts){
    
    
            System.out.print(t.getId()+" , ");
            System.out.println(t.getName());
        }
    }

}

猜你喜欢

转载自blog.csdn.net/weixin_42950079/article/details/106163312
今日推荐