Mybatis-Plus
我们之前学过了Mybatis框架,但是实际开发中,以及在网上去学一些项目的时候,经常会使用到mybatis-plus,所以这个还是在大学期间必须要学的一个知识点。我们会使用就可以,经常能用到。
入门
对mybatis做增强,简化开发。
1.创建数据库,创建数据库表,添加数据,用于Mybatis-Plus操作。
数据库表我们建完后,我们去添加表中的数据:
我们使用Idea创建项目:
我们先不用去加任何的依赖直接创建完就可以。
然后我们要在idea项目中引入mybatis-plus相关的依赖:
这部分我们去官网看教程,直接把教程中的复制粘贴下来就可以了。
我们使用了lombok别忘了安装插件:
然后我们去配置一些信息:
我们现在对于mybatis-plus我们的准备工作就结束了,接下来就是我们的具体代码部分的编写了:
首先建立实体类
然后编写接口:
我们使用mybatis-plus,我们就不需要去写之前学mybatis的时候需要去写的编写sql语句的xml文件了,只需要继承这个类就可以了。
但是我们之前写的接口都是有一个实现类的,但是我们使用mybatis-plus就没有实现类,那我们的启动类可能找不到它,我们需要自己去给启动类增加注释:
我们使用MapperScan去扫描包名。
然后我们现在去测试一下它能不能用:
我们想测试查询全部数据,但是我们引入接口就报红线了。但是这个红线我们不去处理,也可以正常运行,它说是找不到这个bean,所以我们在接口上加一个注释:
这部分可以使用repository注解解决红线问题。
运行:
我们就查询到数据了,我们使用mybatis-plus当处理简单的数据库功能时,我们可以减少大量的代码,直接调用继承了BaseMapper的接口的方法就可以了。
MybatisPlus添加操作
我们的效果已经出来了,现在我们去给上日志文件:
再重新运行一下,我们使用日志,就是打印更加详细的信息:
然后我们去做一下添加的操作:
我们这里的添加特点为:
不需要设置id值(主键), mp自动生成id值,id值为19位。
主键生成策略
我们之前是依靠mp自动给我们生成一个19位很长的主键id值,但是我们还有其他的方式生成主键,我们这里就来学习生成主键的策略。
我们这部分可以参照一个网上别人写的文章,讲的比较好:
分布式系统唯一ID生成方案汇总 - nick hao - 博客园
第一种常见的策略是使用自增:
第二种常见的方法是UUID:
第三种方式是使用redis实现
最后一种是咱们的mp自带的策略,它是一种雪花算法,可以上网查查了解一下,这里就不去过多学习这个算法了。
我们之前的代码,我们什么都没有去做,是自动使用的mp自带的策略,我们这里去改写,去在代码中使用自动自增的方式:
这里有很多方法,auto是自增 input自己设置Id值,none无任何策略 ASSIGN_UUID:uuid的方式,随机唯一值
MybatisPlus实现自动填充
我们前面使用过了查询所有和添加操作,我们现在要去学习一下修改操作:
我们去修改jack的年龄:
我们去运行一下看看:
这个修改是很好实现的。
接下来我们要学习一个比较难的问题了:就是自动填充。
我们先去添加两个字段:
create_time update_time:
我们既然添加了字段,也要对应的添加实体类的属性:
我们经常会使用这种命名形式。
我们去添加一个带日期的数据:
我们这种使用new Date的方式是可以的,但是当然mybatisplus也提供了自己的方式:
这就是我们要学的自动填充的方法:
我们以后要去添加属性值的时候,不需要set到对象里面值,使用mp形式实现数据添加
第一步:在实体类里面进行自动填充属性添加注解
第二步:创建类实现接口MetaObjectHandler 实现接口里面的方法
我们使用这个类之后,以后就不需要去再set方式添加值了。
这个使用与否全屏个人,如果觉得set方便,也可以不使用这个。
我们用这种方法去添加一个时间看看是否有效:
测试结果:
我们再去试试修改成功与否:
我们修改刚才的记录:
我们可以看到我们的创建时间没变,修改时间发生了变化。
mybatisplus实现乐观锁(1)
这个图就很容易理解丢失更新的概念了,本来lucy的工资应该是8000但是由于mary改动后成了200出现了问题。
多个人同时修改同一条记录,最后提交的把之前提交的数据覆盖。
我们解决这个问题一般有两种方式:
悲观锁 串行 它是指只要lucy完成全部任务,mary才可以开始执行它的操作 这明显是不太好的
乐观锁:
我们下次笔记就把乐观锁进行代码上的使用,下次笔记会把mybatisplus剩余的部分学完。