spring boot+mybatis+mysql
Posted Badwood-涂鸦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot+mybatis+mysql相关的知识,希望对你有一定的参考价值。
spring boot整合mybatis,曾经的几个小困惑和踩的坑。
一、mybatis的结构
mybatis和spring boot的整合,网上无数的教程,都是教你一步步集成,照着做没问题,但做下来令我这半桶水有些知其然不知其所以然的感觉。总结一下:
- 结构:实体层(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/77249029、https://www.cnblogs.com/goloving/p/9126187.html。推荐后者,逻辑比较清晰。
二、mysql的自增字段
oracle中有序列号来保证id字段唯一、自增且能在代码中获取。mysql也能,建表时先定义主键、自增:create table log (id int(8) not null primary key auto_increment,...);
在mybatis的插入配置中定义自增类:useGeneratedKeys="true" keyProperty="id"
在使用的时候注意:执行插入方法返回的并不是新记录的id值,新记录的id值需要从实体类中的id属性获取。
三、mysql的jdbc报错
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版本
以上是关于spring boot+mybatis+mysql的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot项目搭建(Spring Boot 2.2.4 + MyBatis + MySql)
Spring Boot集成 MyBatis 操作 MySQL 8