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语句,封装分页语句。