源码学习的博文
http://www.cnblogs.com/dongying/p/4031382.html
http://blog.csdn.net/isea533/article/category/2092001
工具或插件
IDEA安装Mybatis插件"Free MyBatis plugin",mac上按住Command+option键单击mapper函数可以直接跳转到xml方法中
PageHelper分页插件,(不推荐mybatis-paginator,这个插件早已经不再更新,并且不支持foreach)
通用mapper:插件会根据实体类中的字段自动拼接生成sql语句
Mybatis Generator:自动生成实体类和mapper中的通用方法
Mybatis可执行语句拼接工具 原理简单能够满足基本的需求
Mybatis拦截器打印可执行语句 见博文中最后面我使用的拦截类
下面是一些基于mybatis generator的工具,可以更简单的生成model和mapper
现在集成mybatis推荐使用mybatis-plus即可,方便简单
mybatis-plus = PageHelper+Mybatis Generator+MyBatis 通用 Mapper
还可以试一下图形界面生成mybatis代码,
https://github.com/astarring/mybatis-generator-gui,jar下载地址,会生成example类,每一张表都要手动选择生成
https://github.com/xialeistudio/mybatis-generator-gui,jar下载地址,可以直接下载可运行的jar包,不会生成example类,全局生成
IDE上可以安装免费的EasyCode插件
1.模糊查询,mysql数据库支持三种写法
1)like '%${search}%'
2) like concat('%',trim(#{search}),'%')
3) like "%"#{search}"%" mysql支持这样的条件写法比如select * from user where name like "%"'刘'"%"是可以查出所有姓刘的用户的
2.单元测试
在测试类的类定义上面加上注解
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes={DataConfig.class,MybaitsConfig.class, ServiceImpl.class})
MybatisConfig.java代码为
@Configuration
@MapperScan(basePackages={"com.companyName.dao.mapper"})
public class MybaitsConfig {}
因为我都是用的java配置,所以使用classes,需要把自己使用了注解的类全部包含,否则会出现注入失败
如果数据库和mybatis配置是用的spring-db.xml中配置,@ContextConfiguration(locations={"classpath:spring-db.xml"}),locations和classes不能同时使用
当然也可以参照网上创建SqlSessionTemplate和SqlSessionFactory来测试mapper方法
上次面试被问到一级缓存和二级缓存,我去平时都不用mybatis的缓存好不,一级缓存就是同一次sqlsession请求中再次用同样的sql查询就会缓存,二级缓存就是不同sqlsession之间共用的缓存
1.字段为保留词会报语法错误,mybatis-plus默认语句没有给查询字段添加反引号
调试技巧:在com.mysql.cj.jdbc.ClientPreparedStatement的executeInternal方法打上断点,可以查看向mysql发送的数据包sendPacket变量
原因:发现mybatis-plus并没有给每个字段名加上反引号,如果字段是保留词,例如我的字段名为'groups'就会报语法错误,这个问题困扰了我两个小时
解决方案:@TableField("`groups`") 在实体类的字段上面加上@TableField注解,注意其中的反引号