mybatis使用心得

源码学习的博文

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-plus http://mp.baomidou.com

现在集成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注解,注意其中的反引号

 

你可能感兴趣的:(mysql,数据库,mybatis)