mybatis源码学习笔记

£神魔★判官ぃ 2021-09-24 15:42 600阅读 0赞

1.读取配置文件mybatis-config.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
  3. <configuration>
  4. <!--数据库配置文件-->
  5. <properties resource="jdbc.properties"></properties>
  6. <typeAliases>
  7. <package name="com.xqc.model" />
  8. </typeAliases>
  9. <environments default="development">
  10. <environment id="development">
  11. <transactionManager type="JDBC" />
  12. <!-- 配置数据库连接信息 -->
  13. <dataSource type="POOLED">
  14. <property name="driver" value="${jdbc.driverClass}" />
  15. <property name="url" value="${jdbc.url}" />
  16. <property name="username" value="${jdbc.username}" />
  17. <property name="password" value="${jdbc.password}" />
  18. </dataSource>
  19. </environment>
  20. </environments>
  21. <mappers>
  22. <mapper resource="mapper/EoStockMapper.xml" />
  23. </mappers>
  24. </configuration>

注意配置文件的属性顺序,不然会报错,typeAliases要写在properties猴儿面,不然会报错,例如这样写

20200905222059717.png
202009052218498.png读取mybatis-config.xml的方法

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

2.创建SqlSessionFactory,最为关键的步骤

  1. SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

SqlSessionFactory的解析过程,解析configuration的属性,
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RoajE5OTE4MQ_size_16_color_FFFFFF_t_70
mybatis解析mappers文件的几种方式,官网上有4种,resource、url、class、package
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RoajE5OTE4MQ_size_16_color_FFFFFF_t_70 1
其中package优先级最高。接着是resource、url、class
20200905230651388.png
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RoajE5OTE4MQ_size_16_color_FFFFFF_t_70 2

20200905230824136.png
3.打开SqlSession

  1. SqlSession sqlSession = sqlSessionFactory.openSession();

mybatis的三种执行器,默认是SIMPLE
2020090523390227.png
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RoajE5OTE4MQ_size_16_color_FFFFFF_t_70 3
mybatis的一级缓存默认是开启的
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RoajE5OTE4MQ_size_16_color_FFFFFF_t_70 4
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RoajE5OTE4MQ_size_16_color_FFFFFF_t_70 5

4.执行SQL

  1. EoStockMapper eoStockMapper = sqlSession.getMapper(EoStockMapper.class);
  2. EoStockMapper接口文件
  3. public interface EoStockMapper {
  4. List<EoStockModel> selectList();
  5. }
  6. EoStockMapper接口对应的xml文件
  7. <?xml version="1.0" encoding="UTF-8" ?>
  8. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
  9. <mapper namespace="com.xqc.mapper.EoStockMapper" >
  10. <select id="selectList" resultType="EoStockModel" useCache="false" flushCache="true">
  11. select
  12. *
  13. from eo_stock
  14. </select>
  15. </mapper>
  16. 为什么只写接口和xml就能实现查询返回结果呢?核心精髓就是jdk的动态代理

连续查询两次,第二次没有查询数据库,(同一个SqlSession ,不同的SqlSession对象都是相互隔离的)
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RoajE5OTE4MQ_size_16_color_FFFFFF_t_70 6
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RoajE5OTE4MQ_size_16_color_FFFFFF_t_70 7
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RoajE5OTE4MQ_size_16_color_FFFFFF_t_70 8
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RoajE5OTE4MQ_size_16_color_FFFFFF_t_70 9
关闭一级缓存的方法:sql映射文件的配置
20200905235533926.png
可以看到两次都查询了数据库
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RoajE5OTE4MQ_size_16_color_FFFFFF_t_70 10

EoStockMapper.xml
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2RoajE5OTE4MQ_size_16_color_FFFFFF_t_70 11

5.关闭SqlSession

  1. sqlSession.close();

发表评论

表情:
评论列表 (有 0 条评论,600人围观)

还没有评论,来说两句吧...

相关阅读