spring boot整合mybatis,曾经的几个小困惑和踩的坑。html
1、mybatis的结构mysql
mybatis和spring boot的整合,网上无数的教程,都是教你一步步集成,照着作没问题,但作下来令我这半桶水有些知其然不知其因此然的感受。总结一下:spring
- 结构:实体层(pojo类)+数据访问层(dao接口)+服务层(service类),而后就是在action层(controller类)使用service。
- 数据绑定:dao层有两种方法将sql与方法链接起来,即xml或注解,各有各的好。
- dao层标注:dao层须要被框架扫描到。能够在dao类中直接用@Mapper标注,也能够在启动类(XXXApplication)中用@MapperScan("xxx.dao")统一标注标注,也是各有各好
- service层:有的人喜欢用interface+class implements的方式,先定义一个接口,而后再用继承接口方式来实现service。也能够简单一点直接定义service类。也是各有各好,我的认为简单项目就别整接口+继承的方式。不过不管哪一种方法,都须要在service类中使用@Service注解来标注,不然不能被框架扫描到。
- 参考连接:https://blog.csdn.net/winter_chen001/article/details/7724902九、https://www.cnblogs.com/goloving/p/9126187.html。推荐后者,逻辑比较清晰。
2、mysql的自增字段sql
oracle中有序列号来保证id字段惟1、自增且能在代码中获取。mysql也能,建表时先定义主键、自增:create table log (id int(8) not null primary key auto_increment,...);服务器
在mybatis的插入配置中定义自增类:useGeneratedKeys="true" keyProperty="id"mybatis
在使用的时候注意:执行插入方法返回的并非新记录的id值,新记录的id值须要从实体类中的id属性获取。oracle
3、mysql的jdbc报错app
mysql的服务端和客户端jdbc须要匹配,主要有几个问题:框架
- 6以上的jdbc,须要将com.mysql.jdbc.Driver 改成com.mysql.cj.jdbc.Driver
- 5.5以上的服务器要求默认要求创建SSL链接,此时经过设置useSSL=false来显式禁用SSL链接:jdbc:mysql://localhost:3306/dev?useSSL=false
- 8的服务器若是用低版本客户端链接报caching-sha2-password错误,须要修改相登陆户名的密码规则:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';FLUSH PRIVILEGES;
- 服务器版本和客户端版本不一致时可能报错:Unknown system variable 'query_cache_size',就须要在maven中根据服务器设置合适的jdbc版本