mybaits分析

Mybaitys  的源码分析

  1. 读取xml文件中的configuration标签中的数据,封装到configuration类中

 

mybaits分析_第1张图片

2.解析中mappers的xml文件,把里面的sql语句封装成Statements,并把这个statements放到configuration类中

     resource="org/mybatis/example/BlogMapper.xml"/>

  

 

mybaits分析_第2张图片

 

3.创建默认的执行器simpleExecutor,利用statementHandler,把configuration中的数据源和封装的MappedStatement(也就是sql和类型的封装),先从缓存中取,如果缓存没有,调用Java jdbc原始的 执行步骤:Connection连接,创建preparedStatement  ,执行语句,拿到结果集ResultSet对象, 把得到的结果和java对应进行映射。

 

核心知识点

Mybaits解析 mapper有几种方式,4种

mybaits分析_第3张图片

 

 

Mybaitys的执行器有几种?

  3种,默认的是simpleExecutor

mybaits分析_第4张图片

Mybaitys 默认是否开启一级缓存

是的

@Test
public void testSelectOrderAndUserByOrderId(){
    //根据 sqlSessionFactory 产生 session
    SqlSession sqlSession = sessionFactory.openSession();
    String statement = "one.to.one.mapper.OrdersMapper.selectOrderAndUserByOrderID";
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    //第一次查询,发出sql语句,并将查询的结果放入缓存中
    User u1 = userMapper.selectUserByUserId(1);
    System.out.println(u1);
     
    //第二步进行了一次更新操作,sqlSession.commit()
    u1.setSex("女");
    userMapper.updateUserByUserId(u1);
    sqlSession.commit();
     
    //第二次查询,由于是同一个sqlSession.commit(),会清空缓存信息
    //则此次查询也会发出 sql 语句
    User u2 = userMapper.selectUserByUserId(1);
    System.out.println(u2);
     
    sqlSession.close();
}

  ①、一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。

  ②、二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

你可能感兴趣的:(MyBatis,java)