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. Python2048小游戏demo

    # -*- coding:UTF-8 -*- #! /usr/bin/python3 import random v = [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, ...

  2. Spring配置JDBCTemplate

    案例:单测查询全部学生 项目结构: 1.导入部署jar包:spring-jdbc <!--spring-jdbc--> <dependency> <groupId> ...

  3. bzoj1531: [POI2005]Bank notes(多重背包)

    1531: [POI2005]Bank notes Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 521  Solved: 285[Submit][Sta ...

  4. PAT Basic 1005

    1005 继续(3n+1)猜想 (25 分) 卡拉兹(Callatz)猜想已经在1001中给出了描述.在这个题目里,情况稍微有些复杂. 当我们验证卡拉兹猜想的时候,为了避免重复计算,可以记录下递推过程 ...

  5. CSS之优先级

    css的优先级 所谓CSS优先级,即是指CSS样式在浏览器中被解析的先后顺序. 样式表中的特殊性描述了不同规则的相对权重,它的基本规则是: 1 内联样式表的权值最高               sty ...

  6. 【贪心】[hdu1052]Tian Ji -- The Horse Racing(田忌赛马)[c++]

    Tian Ji -- The Horse Racing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java ...

  7. PHP07

    PHP07 1.cookie 2.使用php操作cookie 设置响应头(header)中的Set-Cookie可以下发小票 检查-network-响应头处可查看所设置cookie 检查-applic ...

  8. poj3320 Jessica's Reading Problem(尺取思路+STL)

    https://vjudge.net/problem/POJ-3320 尺取法,要想好组织方式. 又被卡了cin.. #include<iostream> #include<cstd ...

  9. Mac本地环境配置以及安装织梦CMS,增加新的坑解决办法

    Mac上其实已经自带了Apache和PHP,只是默认关闭的.开启一下就行了. Apache配置 apache已经自带了,只需在“终端”输入命令开启下就行了. ​​​开启apache服务 sudo ap ...

  10. Spring Data JPA使用getOne方法报错:Method threw 'org.hibernate.LazyInitializationException' exception. Cannot evaluate

    getOne是懒加载,需要增加这个配置: spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true,但这种方式不太友好,建议不要使用 ...