MyBatis-源码学习--01

一、启动示例

  1. 代码示例
	@Test
    void test1() throws IOException {
        //加载核⼼配置⽂件
		InputStream resourceAsStream = Resources.getResourceAsStream("mybatis-config.xml");
		//获得sqlSession⼯⼚对象
		SqlSessionFactory sqlSessionFactory = new 
		 SqlSessionFactoryBuilder().build(resourceAsStream);
		//获得sqlSession对象
		SqlSession sqlSession = sqlSessionFactory.openSession();
		//执⾏sql语句
		List<User> userList = sqlSession.selectList("userMapper.findAll");
		//打印结果
		System.out.println(userList);
		//释放资源
		sqlSession.close();
    }
  1. 配置文件 mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<!-- 配置管理器 -->
<configuration>
    <!-- 配置mybatis运行环境 -->
    <environments default="development">
        <environment id="development">
            <!-- type="JDBC" 代表使用JDBC的提交和回滚来管理事务 -->
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.cj.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://10.16.23.113:3306/demo?allowMultiQueries=true" />
                <property name="username" value="root" />
                <property name="password" value="crux" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="userMapper.xml"/>
    </mappers>
</configuration>

  1. Mapper文件 userMapper.xml
   <?xml version="1.0" encoding="UTF-8"?>
   <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
   <mapper namespace="com.zzx.mybatis.start.mapper.UserMapper">
       <select id="findAll" resultType="java.util.Map" parameterType="java.lang.String">
          select * from user
       </select>
   </mapper>
   
  1. 源码解析,初始化

    InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
    

    这段代码将配置文件加载成InputStream,源码也很简单
    源码

// 创建SqlSessionFactoryBuilder对象
SqlSessionFactoryBuilder sqlSessionFactoryBuilder = new SqlSessionFactoryBuilder();

下面这行是进行初始化的开始入口

SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBuilder.build(inputStream);

以下是源码

// 1.我们最初调⽤的build
 public SqlSessionFactory build (InputStream inputStream){
 	//调⽤了重载⽅法
 	return build(inputStream, null, null);
 }
 
 // 2.调⽤的重载⽅法
  public SqlSessionFactory build(InputStream inputStream, String environment, Properties properties) {
    try {
      // XMLConfigBuilder是专⻔解析mybatis的配置⽂件的类
      XMLConfigBuilder parser = new XMLConfigBuilder(inputStream, environment, properties);
      //重载方法,解析xml配置,生成configuration对象,创建DefaultSqlSessionFactory对象
      return build(parser.parse());
    } catch (Exception e) {
      throw ExceptionFactory.wrapException("Error building SqlSession.", e);
    } finally {
      ErrorContext.instance().reset();
      try {
        inputStream.close();
      } catch (IOException e) {
        // Intentionally ignore. Prefer previous error.
      }
    }
  }
 // 3. 还是个重载方法,创建一个DefaultSqlSessionFactory
  public SqlSessionFactory build(Configuration config) {
    return new DefaultSqlSessionFactory(config);
  }

看一下XMLConfigBuilder#parse方法

  public Configuration parse() {
    //判断是否解析过,只能解析一次,否则抛出异常
    if (parsed) {
      throw new BuilderException("Each XMLConfigBuilder can only be used once.");
    }
    parsed = true;
    //开始解析
    parseConfiguration(parser.evalNode("/configuration"));
    return configuration;
  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值