二、MyBatis常用对象分析 & 封装工具类

1.0 MyBatis 对象分析

(1) Resources 类
Resources 类,顾名思义就是资源,用于读取资源文件。其有很多方法通过加载并解析资源文件,返回不同类型的 IO 流对象。
在这里插入图片描述

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

(3) SqlSessionFactory 接口
SqlSessionFactory 接口对象是一个重量级对象(系统开销大的对象),是线程安全的,所以一个应用只需要一个该对象即可。创建 SqlSession 需要使用 SqlSessionFactory 接口的的 openSession()方法。
➢ openSession(true):创建一个有自动提交功能的 SqlSession
➢ openSession(false):创建一个非自动提交功能的 SqlSession,需手动提交
➢ openSession():同 openSession(false)
在这里插入图片描述

(4) SqlSession 接口
SqlSession 接口对象用于执行持久化操作。一个 SqlSession 对应着一次数据库会话,一次会话以SqlSession 对象的创建开始,以 SqlSession 对象的关闭结束。
SqlSession 接口定义了操作数据的方法 例如 selectOne() ,selectList() ,insert(),update(), delete(), commit(), rollback()
SqlSession 接口对象是线程不安全的,所以每次数据库会话结束前,需要马上调用其 close()方法,将其关闭。再次需要会话,再次创建。 SqlSession 在方法内部创建,使用完毕后关闭。
在这里插入图片描述

1.1创建工具类,简化代码

在这里插入图片描述

(1) 创建 MyBatisUtils 类
在zep文件夹下新建utils文件夹,并在utils文件夹下创建MyBatisUtils 工具类

package com.zep.utils;

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 MybatisUtils {
    
    

    private static SqlSessionFactory factory = null;

    /*静态代码块:执行优先级高于非静态的初始化块,它会在类初始化的时候执行一次,执行完成便销毁*/
    //使用 静态块 创建一次 SqlSessionFactory
    static {
    
    
        String config = "mybatis.xml"; //需要和你的项目中的文件名一样
        try {
    
    
            //读取配置文件
            InputStream in = Resources.getResourceAsStream(config);
            //创建SqlSessionFactory对象,使用SqlSessionFactoryBuilder
            factory = new SqlSessionFactoryBuilder().build(in);

        } catch (IOException e) {
    
    
            e.printStackTrace();
        }
    }

    // 获取SqlSession对象的方法
    public static SqlSession getSqlSession() {
    
    
        SqlSession sqlSession = null;
        if (factory != null) {
    
    
            sqlSession = factory.openSession(); // 非自动提交事务
        }
        return sqlSession;
    }
}

(2) 使用 MyBatisUtil 类
通过MybatisUtils.getSqlSession()直接获取sqlSession对象
SqlSession sqlSession = MybatisUtils.getSqlSession()

package com.zep;


import com.zep.domain.Student;
import com.zep.utils.MybatisUtils;
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;
import java.util.List;

public class MyApp2 {
    
    
    public static void main(String[] args) throws IOException {
    
    
       // 5.【重要】获取SqlSession对象,从SqlSessionFactory中获取SqlSession
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        // 6.【重要】指定要执行的sql语句的标识。sql映射文件中的namespace + “.” + 标签的id值
        String sqlId = "com.zep.dao.StudentDao"+ "." +"selectStudents";
        // 7.执行sql语句,通过sqlId找到语句
        List<Student> studentList = sqlSession.selectList(sqlId);
        // 8.输出结果
        // studentList.forEach(student -> System.out.println(student));
        for (Student student : studentList) {
    
    
            System.out.println("查询到的学生=" + student);
        }
        
        // 9.关闭SqlSession对象
        sqlSession.close();
    }
}

运行结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44827418/article/details/111406560