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. 克罗内克符号kronecker_delta

    Kronecker delta 克罗内克函数 Wiki 维基百科 Kronecker delta 定义 \[\delta _{{ij}}={\begin{cases}0&{\text{if } ...

  2. 移动端页面:viewport与分辨率的坑

    <meta name="viewport" content="width=device-width, user-scalable=no"> < ...

  3. Source map error

    前端访问接口时火狐浏览器控制台出现了这个问题, source map文件是js文件压缩后,文件的变量名替换对应.变量所在位置等元信息数据文件,一般这种文件和min.js主文件放在同一个目录下. 比如压 ...

  4. PHP爬取历史天气

    PHP爬取历史天气 PHP作为宇宙第一语言,爬虫也是非常方便,这里爬取的是从天气网获得中国城市历史天气统计结果. 程序架构 main.php <?php include_once(". ...

  5. PAT Basic 1001

    1001 害死人不偿命的(3n+1)猜想 (15 分) 卡拉兹(Callatz)猜想: 对任何一个正整数 n,如果它是偶数,那么把它砍掉一半:如果它是奇数,那么把 (3n+1) 砍掉一半.这样一直反复 ...

  6. 初学JDBC的一些总结(二)

    一.简单介绍PreparedStatement 和Statement的区别: PreparedStatement是用来执行SQL查询语句的API之一,Java提供了 Statement.Prepare ...

  7. IDEA15 创建javaweb 并配置Tomcat(转)

    1.打开IDEA选择Web Application 2.在WEB-INF下创建如图两个文件夹 3.在右上角找到这个,准备配置Tomcat 4.在弹出的窗口里像这样配置LocaleHost 5.设置好本 ...

  8. uploadify Cookie 验证登入上传问题

    上传文件时必须验证是否已登入. 当用FormsAuthentication做登入,使用FormsAuthentication.FormsCookieName进行验证是否已登入即可. <scrip ...

  9. pygame-KidsCanCode系列jumpy-part5-屏幕滚动

    接上回继续,方块不断向上跳动的过程中,从视觉上看,整个背景屏幕应该不断向下滚动,而且上方要不断出现新档板(否则就没办法继续向上跳了),这节我们将来实现这种效果,感觉好象很复杂,但实现起来其实很简单,只 ...

  10. SeaweedFS的配置使用

    SeaweedFS是一个简单并且高度可扩展的分布式文件系统,可以存储数十亿的文件并且快速获得文件,特别适合于有效处理小文件,这里我们简称为weed,weed的主节点不管理文件元数据而是仅管理文件卷,这 ...