SqlSessionFactory实现过程

SqlSessionFactory实现过程

package mybatis.common;

import java.io.IOException;
import java.io.InputStream;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
*单例创建SqlSessionFatory对象
*/
public class SqlSessionFactoryUtil {

    private static SqlSessionFactory sqlSessionFactory;

    public static SqlSession openSqlSession() {
        if (sqlSessionFactory == null) {
            init();
        }
        return sqlSessionFactory.openSession(true);
    }

    //单例创建sqlSessionFactory对象
    private static SqlSessionFactory init() {
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        } catch (IOException e) {
            e.printStackTrace();
        }

        synchronized(SqlSessionFactoryUtil.class) {
            if (sqlSessionFactory == null) {
                //调用 SqlSessionFactoryBuilder 对象的 build(inputStream) 方法;
                sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
            }
            return sqlSessionFactory;
        }
    }
}

  1. 调用 SqlSessionFactoryBuilder 对象的 build(inputStream) 方法;
    public SqlSessionFactory build(InputStream inputStream) {
        return this.build((InputStream)inputStream, (String)null, (Properties)null);
    }
public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
    SqlSessionFactory var5;
    try {
        //SqlSessionFactoryBuilder 会根据输入流 inputStream 等信息创建XMLConfigBuilder 对象 ;
        XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
        //调用 XMLConfigBuilder 对象的 parse() 方法 获取 Configuration 对象;
        //然后返回一个DefaultSqlSessionFactory
        var5 = this.build(parser.parse());
    } catch (Exception var14) {
        throw ExceptionFactory.wrapException("Error building SqlSession.", var14);
    } finally {
        ErrorContext.instance().reset();

        try {
            inputStream.close();
        } catch (IOException var13) {
        }

    }
 //然后返回一个DefaultSqlSessionFactory
public SqlSessionFactory build(Configuration config) {
    return new DefaultSqlSessionFactory(config);
}

总结

SqlSessionFactory对象build()方法创建一个XMLConfigBuilder,通过parse()方法创建Config对象,最后返回DefaultSqlSessionFactory对象也就是SqlSessionFactory对象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis实现逻辑过程主要包括以下几个步骤: 1. 配置:首先,需要配置MyBatis的环境和数据源。这可以通过XML配置文件或Java注解来完成。配置文件中包括数据库连接信息、映射文件路径、类型别名等。 2. 创建SqlSessionFactory:通过配置文件或者Java代码创建SqlSessionFactory对象,SqlSessionFactory是MyBatis的核心对象,用于创建SqlSession。 3. 创建SqlSession:通过SqlSessionFactory.openSession()方法来创建SqlSession对象,SqlSession是与数据库交互的会话对象,可以执行SQL语句、提交事务等操作。 4. 定义映射文件或注解:定义SQL语句和结果映射规则。映射文件可以使用XML配置方式或注解方式来定义SQL语句和结果映射规则。 - XML配置方式:在XML配置文件中定义SQL语句和结果映射规则。例如: ```xml <select id="getUserById" parameterType="int" resultType="com.example.User"> SELECT * FROM users WHERE id = #{id} </select> ``` - 注解方式:在DAO接口的方法上使用注解定义SQL语句和结果映射规则。例如: ```java @Select("SELECT * FROM users WHERE id = #{id}") User getUserById(@Param("id") int id); ``` 5. 执行SQL语句:通过SqlSession的方法执行SQL语句。例如,使用selectOne()方法执行查询操作,使用insert()、update()、delete()方法执行增删改操作。 6. 处理结果:根据SQL语句的不同,可以通过调用SqlSession的方法来获取查询结果。例如,使用selectOne()方法获取单个结果对象,使用selectList()方法获取结果集列表。 7. 提交事务和关闭资源:在需要提交事务时,调用SqlSession的commit()方法进行事务提交。最后,调用SqlSession的close()方法关闭会话,释放资源。 以上是MyBatis实现逻辑的基本过程。通过配置环境、创建SqlSessionFactory、创建SqlSession、定义映射文件或注解、执行SQL语句等步骤,可以实现与数据库的交互操作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值