mybatis学习笔记

1、mybatis提供了SqlSession接口,用来执行sql,进行增删改查。SqlSession由factory获得。

  SqlSession sqlSession= sqlSessionFactory.openSession();

2、mybatis通过mapper动态代理的方式,负责生成sqlSession、执行sql等公有部分的代码实现。也就是动态代理生成dao层(mapper接口)的实现类,只需手动写dao层和mapper的xml文件就可以。

3、可以用xml方式和注解(@select等)的方式,来代理生成mapper接口的实现类。

4、使用mybatis需要三个部分构成:全局配置文件(<settings>、<properties>、<mapper>、<environments>、<typeAlias>等标签)、mapper接口、mapper的xml文 件。

5、mapper xml文件的parameterType可以是基本数据类型、pojo、map、集合(数组)。

  当类型是pojo时,是根据反射的原理取属性的值。

6、mapper xml文件的输出类型可以用resultType,可以用resultMap。

7、mybatis关联查询:

  一对一查询:resultMap中需要用<association>标签,用来映射结果集

  一对多查询:resultMap中需要用<collection>标签,用来映射结果集

8、延迟加载(嵌套查询):

  (1)由resultMap标签实现,只对关联对象的查询有延迟。

  (2)延迟加载是:先查询完成主表对象,当用到关联表对象时,才进行加载关联表的对象。比如:

     select * from user u left join on order o on o.user_id=u.id where u.id='bonnie'

     比如bonnie用户对应5个订单(order)信息,那么,查询时先查询出用户信息,当用到订单信息时才去查询订单信息,这时是需要查询5个sql。

  (3)延迟加载适用于,关联信息条数不多的情况。

9、mybatis缓存:

  一级缓存(sqlSession级别):slqSession对象中有一个hashmap用来缓存数据,不同的sqlSession的缓存互不影响。

  二级缓存(mapper中的namespace级别):namespace下的二级缓存是跨sqlSession的。

10、动态sql:

  拼接sql片段(<sql>标签、用<include>拼接)、应用循环(<foreach>标签)、判断(<if>标签)

 <sql id="query_where">
    <if test="ids !=null and ids.size()>0">
      and id in
      <foreach collection="ids" item="id" open="(" close=")" seperator=","
        #{id}
      </foreach>
    </if>
  </sql>

 

11、mybatis逆向工程:

  根据数据库表生成mapper文件和pojo

12、分页插件pagehelper

  拦截sql语句,封装分页语句。

 

    

posted @ 2020-01-03 10:55  第二人生Bonnie  阅读(104)  评论(0编辑  收藏  举报