这里只写一些我认为注意的地方,有时间好复习,详细的在资源里都有有springboot版本,与spring版本就是配置不一样。
一、使用的配置信息及非条件构造器常用方法
1.配置文件
注意:
(1)、驱动类driver-class-name
spring boot 2.0(内置jdbc5驱动),驱动类使用:
driver-class-name: com.mysql.jdbc.Driver
spring boot 2.1及以上(内置jdbc8驱动),驱动类使用:
driver-class-name: com.mysql.cj.jdbc.Driver
否则运行测试用例的时候会有 WARN 信息
(2)、连接地址url
MySQL5.7版本的url:
jdbc:mysql://localhost:3306/mybatis_plus?characterEncoding=utf-8&useSSL=false
MySQL8.0版本的url:
jdbc:mysql://localhost:3306/mybatis_plus?
serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false
否则运行测试用例报告如下错误:
java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or
represents more
2.配置启动类
3.mapper要extend BaseMapper<>
4.无Wrapper参数常用方法
5.创建Service接口和实现类
二、常用注解
1.@TableId
问题:
经过以上的测试,MyBatis-Plus在实现CRUD时,会默认将id作为主键列,并在插入数据时,默认
基于雪花算法的策略生成id ,若实体类和表中表示主键的不是id,而是其他字段,例如uid,MyBatis-Plus会自动识别uid为主键列吗?我们实体类中的属性id改为uid,将表中的字段id也改为uid,测试添加功能程序抛出异常,Field 'uid' doesn't have a default value,说明MyBatis-Plus没有将uid作为主键赋值。
解决:在实体类表中的字段加上@TableId注解。
@TeableId的Value属性:
若实体类中主键对应的属性为id,而表中表示主键的字段为uid,此时若只在属性id上添加注解
@TableId,则抛出异常Unknown column 'id' in 'field list',即MyBatis-Plus仍然会将id作为表的
主键操作,而表中表示主键的是字段uid
此时需要通过@TableId注解的value属性,指定表中的主键字段,@TableId("uid")或
@TableId(value="uid")
值
|
描述
|
IdType.ASSIGN_ID(默
认)
|
基于雪花算法的策略生成数据id,与数据库id是否设置自增无关
|
IdType.AUTO
|
使用数据库的自增策略,注意,该类型请确保数据库设置了id自增, 否则无效
|
配置全局主键策略:
2.@TableField
问题:如果实体类中的属性名和字段名不一致的情况,会出现什么问题呢?
如果是驼峰mybatisplus会自动匹配如果不是就要加入@TableField注解
解决:
3.@TableLogic
说明:用于逻辑删除
逻辑删除:假删除,将对应数据中代表是否被删除字段的状态修改为“被删除状态”,之后在数据库
中仍旧能看到此条数据记录
(1)在数据库加入is_delete字段(int类型 长度11 默认0,0表示未删除,1表示已删除)
(2)在实体类字段中加入@TableLogic注解
三、条件构造器和常用接口
1、wapper介绍如图
编辑
Wrapper : 条件构造抽象类,最顶端父类
AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
QueryWrapper : 查询条件封装
UpdateWrapper : Update 条件封装
AbstractLambdaWrapper : 使用Lambda 语法
LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper : Lambda 更新封装Wrapper
2.QueryWrapper常用方法
常用:like,between,or,and,isNotNull,isNull,order,gt(大于),lt小于可以看我博客有详细介绍。
QuerWrapper常用条件参数https://blog.csdn.net/weixin_47343544/article/details/119796505?spm=1001.2014.3001.5502方法使用形式:(注:第一个参数是数据库中的字段名)
3.UpdateWrapper
区别:UpdateWrapper与QueryWrapper区别主要在于使用update方法。updatewrapper有专属的set方法,不用创建实体 对象。
UpdateWrapper:
QueryWrapper:
4.Condition
如果你想在使用QueryWrapper调用方法传入的字段的参数进行验证的话,不用if else可以使用Condition参数,选择方法带condition参数的方法。
例如:
5.LambdaQueryWrapper
说明:LambdaQueryWrapper与QueryWrapper的区别主要在于,将数据库表中的字段变成了在实体类中调用方法如:将“user_name” 变为 User::getUserName
例:
四、插件
1.使用分页插件,配置
2.常用分页方法
3.实现乐观锁
(1.)实现流程
(2)在数据库表中添加version(int类型)字段。在实体类中添加version属性,添加@Version注解。
(3)添加乐观锁插件配置
在配置类中添加乐观锁拦截器
(4)进行测试,在p2修改失败后,在进行一次查询版本号,在重新插入。
4.通用枚举
(1)在数据库表中加入sex字段(int类型),创建枚举实体类
(2)进行配置
五、代码生成器
1.引入依赖
2.输入代码
结束语:
裸体一旦成为艺术,便是最圣洁的。道德一旦沦为虚伪,便是最下流的。勇敢去做你认为正确的事,不要被世俗的流言蜚语所困扰。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
评论(0)