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的更多相关文章

  1. Spring boot+Mybatis+MySQL插入中文乱码

    转载:https://www.jianshu.com/p/bd0311a33c16 现象: 搭建spring boot+mybatis+mysql时出现插入mysql的中文出现乱码???.   mys ...

  2. 使用spring boot+mybatis+mysql 构建RESTful Service

    开发目标 开发两个RESTful Service Method Url Description GET /article/findAll POST /article/insert 主要使用到的技术 j ...

  3. 从.Net到Java学习第三篇——spring boot+mybatis+mysql

    从.Net到Java学习第一篇——开篇 环境:mysql5.7 新建mysql数据库demo,然后执行如下sql脚本进行数据表创建和数据初始化: -- ------------------------ ...

  4. spring boot+mybatis+mysql增删改查分页

    server: port: servlet: context-path: /springBootMybatis spring: datasource: name: test url: jdbc:mys ...

  5. Spring Boot+MyBatis+MySQL读写分离

    读写分离要做的事情就是对于一条sql语句该选择去哪个数据库执行,至于谁来做选择数据库的事情,无非两个,1:中间件(比如MyCat):二:程序自己去做分离操作. 但是从程序成眠去做读写分离最大的弱点就是 ...

  6. Spring Boot + MyBatis + MySQL 实现读写分离

    读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做. 读写分离有两种实现方式: 第一种是依靠中间件(比如:MyCat ...

  7. Spring boot + mybatis + mysql代码生成器

    引入依赖: 在pom文件最下边: <build> <plugins> <!--逆向工程--> <plugin> <groupId>org.m ...

  8. Spring Boot + Mybatis 实现动态数据源

    动态数据源 在很多具体应用场景的时候,我们需要用到动态数据源的情况,比如多租户的场景,系统登录时需要根据用户信息切换到用户对应的数据库.又比如业务A要访问A数据库,业务B要访问B数据库等,都可以使用动 ...

  9. (45). Spring Boot MyBatis连接Mysql数据库【从零开始学Spring Boot】

    大家在开发的时候,会喜欢jdbcTemplate操作数据库,有喜欢JPA操作数据库的,有喜欢MyBatis操作数据库的,对于这些我个人觉得哪个使用顺手就使用哪个就好了,并没有一定要使用哪个,个人在实际 ...

随机推荐

  1. [P1082][NOIP2012] 同余方程 (扩展欧几里得/乘法逆元)

    最近想学数论 刚好今天(初赛上午)智推了一个数论题 我屁颠屁颠地去学了乘法逆元 然后水掉了P3811 和 P2613 (zcy吊打集训队!)(逃 然后才开始做这题. 乘法逆元 乘法逆元的思路大致就是a ...

  2. 如何绘制UML图?

    首先推荐在线绘制UML的网址:https://www.processon.com/,很好用. 在软件开发过程中,开发人员往往需要通过绘制类图来理清业务的实现思路,从而方便代码实现,也便于后期的代码维护 ...

  3. es6冲刺01

    1.let/const 1)作用域:es5中有全局作用域.函数作用域.es6中新增了块级作用域 2)let定义的变量在所在块级作用域外失效,严格模式下失效后直接报错, 且不允许重复声明同名变量 3)c ...

  4. JSAP106

    JSAP106 一.clientX.clientY 点击位置距离当前body可视区域的x,y坐标 二.pageX.pageY 对于整个页面来说,包括了被卷去的body部分的长度 三.screenX.s ...

  5. JAVA自学笔记24

    JAVA自学笔记24 1.能使用同步代码块就使用同步代码块,除非锁对象是this,就可以考虑使用同步方法.静态方法的锁是类的字节码对象. 2.JDK5新特性 1)接口Lock void Lock()/ ...

  6. CentOS 7配置成网关服务器

    其实在Linux下配置网关服务器很简单,如果配置好之后出现无法访问外网的情况,那么可以排查以下情况: 1.防火墙和iptables的服务关掉(firewalld.iptables) 2.清空iptab ...

  7. 推荐一款jQueryajax插件(Ajaxify jQuery )

    推荐一款jQueryajax插件(Ajaxify jQuery )       此插件相当强悍,但最后一个版本是在2008年,作者很久没更新了,我在寻找了好多关羽ajax的工具,没有发现比这个更灵活的 ...

  8. 对类的理解(c++)

    介绍目录: 1.类成员 1.1 成员函数 1.2 构造函数 1.2.1 对构造函数的理解 1.2.2成员初始化列表 1.2.3必须使用成员初始化列表的几种情况 1.2.4对于拷贝构造函数的参数是一个引 ...

  9. 使用python实现深度神经网络 1(转)

    使用python实现深度神经网络 1(转) https://blog.csdn.net/oxuzhenyi/article/details/73026790

  10. 使用AShot进行网页全页截图

    import org.junit.Test; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.Chrom ...