Mybatis之(二)Mybatis基本要素

二、Mybatis基本要素

2.1 SqlSessionFactoryBuilder

每一个mybatis的应用程序的入口是SqlSessionFactoryBuilder,它的作用是通过XML配置文件创建Configuration对象,然后通过build方法创建SqlSessionFactory对象,一般使用全局。
它有五个方法build()方法,每一种都允许你从不同的资源中创建一个SqlSession实例。

SqlSessionFactory build(InputStream inputStream)
SqlSessionFactory build(InputStream inputStream, String environment)
SqlSessionFactory build(InputStream inputStream, Properties properties)
SqlSessionFactory build(InputStream inputStream, String environment, Properties properties)
SqlSessionFactory build(Configuration config)

由于方法参数environment 和peoperties都可以为null,那么去除重复的,真正地重载方法其实只有如下三种:

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

我们会发现配置信息可以以三种形式提供给SqlSessionFactoryBuild的build()方法,分别是InputStream(字节流)、Reader(字符流)、Configuration(类),由于字节流与字符流都属于读取配置文件的方式,所以从配置信息的来源就很容易想到构建一个SqlSessionFactory有两种方式:读取XML配置文件的方式和编程构造方式。我们采用读取XML配置文件的方式来构造SqlSessionFactory。

2.2 SqlSessionFactory

SqlSessionFactory简单的理解就是创建SqlSession实例的工厂。所有的Mybatis应用都是以SqlSessionFactory实例为中心,SqlSessionFactory的实例可以通过SqlSessionFactoryBuilder对象来获得。有了它之后,很容易就可以通过SqlSessionFactory提供的openSession()方法来获取SqlSession实例了。
默认的openSession()方法没有参数,它会创建有以下特性:

  1. 会开启一个事务(也就是不会自动提交);
  2. 将从由当前环境配置的DataSource实例中获取Connection对象,事务隔离级别将会使用驱动或数据源的默认设置;
  3. 预处理语句不会被复用,也不会批量处理更新。

注意:
openSession()方法的参数为boolean值时,若传入为true表示关闭事务控制,自动提交;false表示开启事务控制。若不传入参数,默认为true。

2.3 SqlSession

SqlSession是用于执行持久化操作的对象,类似于JDBC中的Connection。
它提供了面向数据库执行SQL命令所需的所有方法,可以通过SqlSession实例直接运行已映射的SQL语句。

执行语句的方法,这些方法被用来执行定义在 SQL 映射的 XML 文件中的 SELECT、INSERT、UPDATE 和 DELETE 语句。它们都会自行解释,每一句都使用语句的 ID 属性和参数对象,参数可以是原生类型(自动装箱或包装类)、JavaBean、pojo或 Map。

<T> T selectOne(String statement, Object parameter)
<E> List<E> selectList(String statement, Object parameter)
<K,V> Map<K,V> selectMap(String statement, Object parameter, String mapKey)
int insert(String statement, Object parameter)
int update(String statement, Object parameter)
int delete(String statement, Object parameter)

selectOne 和 selectList 的不同仅仅是 selectOne 必须返回一个对象或 null 值。如果返回值多于一个,那么就会抛出异常。selectMap 稍微特殊一点,因为它会将返回的对象的其中一个属性作为 key 值,将对象作为 value 值,从而将多结果集转为 Map 类型值。因为并不是所有语句都需要参数,所以这些方法都重载成不需要参数的形式。

核心对象最佳生命周期最佳作用域
SqlSessiionFactoryBuilder方法体内方法体内(局部变量)
SqlSessiionFactory从应用服务启动开始一直到应用服务停止-application整个应用内
SqlSessiion一次请求的有效期一次请求的有效期内

提取出一个MyBatis.java工具类:

package cn.ebuy.util;
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.InputStream;
public class MyBatisUtil {
    private static SqlSessionFactory sqlSessionFactory = null;
    static {
        String resource = "mybatis-config.xml";
        InputStream is = null;
        try {
            is = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public static SqlSession createSqlSession() {
        return sqlSessionFactory.openSession();
    }
    public static void closeeSqlSession(SqlSession sqlSession) {
        if (sqlSession != null)
            sqlSession.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值