MybatisPlus入门
算了,简单的记录下使用步骤吧。
1.pom.xml添加依赖
1 | <!--MyBatis Plus--> |
2.配置application.yml
因为我要去掉自动映射,所以就添加了mybatis-plus配置,默认的话会出现字段名使用下划线线映射的问题。还有就是配置数据库,根据pom.xml中添加的数据库依赖,添加相关的数据库配置。
1 | spring: |
3.编写实体类
1 |
|
4.编写mapper
1 | public interface WxUserMapper extends BaseMapper<WxUser> { |
5.添加扫描
在启动类上添加@MapperScan,后面的内容一定要填,并且要定位到你mapper所在的文件夹
1 |
|
接下来就可以直接使用@Autowired注入WxUserMapper了,并调用其中的一些方法。但是还可以进一步的实现IService接口,充分利用MybatisPlus提供的更加丰富的查询方法。
6.定义Service接口
1 | public interface WxUserService extends IService<WxUser> { |
7.实现Service接口
1 |
|
8.使用Service接口
1 |
|
这样就算大功告成了。
1.Spring Boot (八): Mybatis 增强工具 MyBatis-Plus (我看重这篇文章,主要是因为这篇文章有相关的IService接口的实现例子)
9.使用mapper.xml接口
10.判断两个字段是否相等
需求:判断数据库字短里面的两个列是否相同。
【1】.使用Mybatis-plus如何对数据库表的内部字段进行比较 首先创造一个查询条件构造器LambdaQueryWrapper
【2】.apply 拼接SQL
【3】.mybatis-plus判断表的两个字段相等?
【4】.mybatis plus两字段相减>0 queryWrapper.gt(Entity::getFiled1,Entity::getFiled2) 这个不太对,因为我尝试没有这钟写法
问题
(1) 数据查询不到
我先用save插入了一条记录,然后执行立刻执行查询命令,这个时候查询不到最新的记录。
我尝试了在类上,在方法上进行 @Transactional(isolation = Isolation.READ_UNCOMMITTED) 注解,打开事务,结果不生效。
1.mybatis新插入数据查询不到问题
2.事物注解方式: @Transactional
3.Spring 事务中无法查到新增的数据原因_lnkToKing的博客-程序员宝宝
4.MyBatis的flushCache和useCache的使用注意
(2) can not find lambda cache for this property [updateTimestamp] of entity [com.dji.sample.manage.model.entity.DeviceHmsEntity]
我在 entity 里面设置了一个属性,想要在 lambada 查询的时候用上,结果总是报这个错误, 主要就是这个 getUpdateTimestamp 方法。
1 | LambdaQueryWrapper<DeviceHmsEntity> queryWrapper = new LambdaQueryWrapper<DeviceHmsEntity>(); |
【尝试方案】
(1)TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), “”), DeviceHmsEntity.class),没有用
(2)增加 lambdaQueryWrapper.setEntityClass(getCaseEntityClass()),结果没有用
【解决方案】
其实最后我也没有解决这个问题,就是换了一种查询方法,就是查询两个列是否相同的方法。
【1】.MybatisPlusException: can not find lambda cache for this entity[]异常 ReflectionKit.getSuperClassGenericType
【2】.mybatis报错:can not find lambda cache for this property 因为MP3.2+之后不会缓存实体类的父类字段信息,所以在使用泛型的Lambda表达式时会报错.TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), “”), FlowDone.class) ;
【3】.简化业务代码开发:看Lambda表达式如何将代码封装为数据
【4】.解决使用LambdaQueryWrapper 报错MybatisPlusException: can not find lambda cache的问题 1.清理缓存;2.使用不同的LambdaQueryWrapper实例;3.检查Lambda表达式;4.升级Mybatis Plus版本;5.检查数据库连接;6.查看日志;7.自定义缓存策略。
【5】.MybatisPlusExcepection: can not find lambda cache for this property [XX] for entity [xxx] 实体类缓存也就没有了,所以我重写了:com.baomidou.mybatisplus.extension.service.impl.ServiceImpl#currentModelClass
【6】.MybatisPlusException: can not find lambda cache for this entity[]异常解决
【7】.解决使用LambdaQueryWrapper时出现MybatisPlusException: can not find lambda cache for this property的错误
【8】.Mybatis Plus报错: can not find lambda cache TableInfoHelper.initTableInfo(new MapperBuilderAssistant(new MybatisConfiguration(), “”), 条件类名.class)
(3) SpringBoot中@RequestBody不能和Multipart同时传递
【解决方案】
主要解决方案,就是不用 @RequestBody,直接用 实体接受参数
【1】.解决SpringBoot中@RequestBody不能和Multipart同时传递的问题 去掉 @RequestBody 注解就可以
【2】.@RequestBody和 MultipartFile 可以同时使用吗? 1.通过一个对象来接收文件上传和其他参数;2.,你可以使用 @RequestParam 来获取表单字段和 MultipartFile 来获取文件;3.如果你想同时接收 JSON 数据和上传文件,你可以使用 @RequestPart 注解
【3】.解决SpringBoot中@RequestBody不能和Multipart同时传递的问题 使用Map来接收参数