MyBatis核心接口和类

核心接口和类

MyBatis框架的核心对象

MyBatis框架的核心对象包括核心接口和类

SqlSessionFactory实例是MyBatis框架应用程序的核心。

SqlSessionFactory实例由SqlSessionFactoryBuilder对象根据XML配置文件或Configuration类的实例进行创建。

通过SqlSessionFactory实例可获得SqlSession实例包括执行SQL操作的方法,可以同过该实例执行已映射的SQL语句。

SqlSessionFactoryBuilder

SqlSessionFactoryBuilder负责根据配置文件信息构建SqlSessionFactory实例。为此,其提供了多种builder()重载方法,

在这里插入图片描述

通过分析MyBatis框架的源码可以发现,核心builder()重载方法有以下三种,其他重载方法实际是三种方法的的简化调用。

  • builder(Reader reader, String environment, Properties properties)
  • builder(InputStream inputStream, String environment, Properties properties)
  • builder(Configuration config)

通过以上重载方法可以发现,MyBatis框架的配置信息可以通过三种形式提供给builder()重载方法,分别是字节流InputStream,字符流Reader和Configuration类,因为字节流与字符流均属于读取文件的方法,所以获取构建SqlSessionFactory实例所需配信息的方式可以分为两种:读取XML配置文件方式和编程方式。

SqlSessionFactory

由SqlSessionFactoryBuilder构建的SqlSessionFactory实例是MyBatis框架应用的核心。顾名思义SqlSessionFactory是创建SqlSession实例的工厂,SqlSessionFactory提供了openSession()方法来获取SqlSession实例。

在这里插入图片描述

openSession()方法中boolean类型的参数用于控制是否开启自动提交。true表示开启自动提交,关闭事务控制;false表示关闭自动提交,开启事务控制。

在应用运行过程中,不建议反复销毁和创建SqlSessionFactory实例,SqlSessionFactory实例一旦创建就应该在应用的运行周期中始终存在。

因此,需要对获取SqlSessionFactory实例的代码进行优化,使SqlSessionFactory实例只被创建一次并可反复使用。

public class MyBatisUtil {
    private static String CONFIG_FILE = "mybatis-config.xml";

    private static SqlSessionFactory factory;

   static {
       try {
           InputStream stream = Resources.getResourceAsStream(CONFIG_FILE);
           factory = new SqlSessionFactoryBuilder().build(stream);
       } catch (IOException e) {
           e.printStackTrace();
       }
    }

   public static SqlSession getSqlSession(){
       return factory.openSession();
    }

    public static void close(SqlSession sqlSession){
       if (sqlSession!=null){
           sqlSession.close();
       }
    }
}
SqlSession

SqlSession用于执行持久化操作,它提供数据执行SQL命令的能力。可以通过SqlSession提供的方法执行已映射的SQL语句。

在这里插入图片描述

SqlSession表示一次数据库会话。SqlSession实例是非线程安全的,不能被共享,每个线程都应该使用自己独立的SqlSession实例,SqlSession实例的生命周期不应该是永久的。因此,SqlSession实例最佳的作用域范围是一次HTTP请求,或方法作用域内。

一个SqlSession实例并非只能执行一次SQL语句,在一次会话中完全可以执行多次SQL语句。

及时关闭SqlSession是非常重要的。

SqlSessionFactoryBuilder执行绑定的SQL语句有两种方式:

基于字符串常量

该方法有类型转换的问题

Integer result = sqlSession.selectOne("com.dao.SysUserDao.count");
System.out.println("count = " + result);

基于Mapper接口

推荐使用Mapper接口,无需进行类型转换。

SysUserDao sysUserDao = sqlSession.getMapper(SysUserDao.class);
        Integer count = sysUserDao.count();
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值