mybatis-plus springboot,springboot+mybatis plus

  mybatis-plus springboot,springboot+mybatis plus

  

目录

跳靴整合Myabtis-Plus1、依赖导入2、数据库插入3、跳靴各个层次的操作3.1、实体类3.2、配置的插入与更新3.2.2,乐观锁配置3.3、映射器层3.4、服务层4、控制层测试4.1、查询所有4.2、根据编号修改信息

 

  

SpringBoot整合Myabtis-Plus

在与官网配置一致的情况下依旧无法生效,如下整合mybatis-plus

 

  

1、依赖导入

!-我的batis plus-dependency groupIdcom.baomidou/groupId artifactId我的batis-plus-boot-starter/artifactId版本3.4.3.4/version/dependency其余的跳羚与关系型数据库相关的依赖就无需展示

 

  配置文件配置

  我的batis-plus :全球配置:d b-配置: #逻辑删除,删除标志逻辑删除值: 1 #逻辑删除,未删除标志逻辑不删除值: 0类型别名包: com。方。波乔配置: # mybatis-plus日志log-impl : org。阿帕奇。伊巴提斯。伐木。stdout。标准输出实现

  

2、数据库插入

数据库以此为例

 

  如果存在sys_user,则删除表;创建表RBAC加。sys _ user(id INT AUTO _ INCREMENT NOT NULL注释主键ID ,name VARCHAR(50)不为空注释名称,密码VARCHAR(500)不为空注释密码,电子邮件VARCHAR(200)不为空注释邮箱,state INT不为空默认为0注释状态,0为正常,1为异常,create_time日期时间不为空注释创建时间更新时间日期时间注释修改时间,已删除INT默认值为0注释假删除版本(同Internationalorganizations)国际组织默认数字一(one)注释乐观锁,主键(id))ENGINE=INNODB AUTO _ INCREMENT=1 DEFAULT CHARSET=utf8mb 4 COMMENT= user表;插入到` rbac_plus`.`sys_user` (`name `,` password `,` email `,` create_time `)值(一号, 123 , 123@qq.com ,当前日期),(二号, 234 , 234.qq.com ,当前日期),(三号, 345 , 345.qq.com ,当前日期),(四号, 456 , 456.qq.com ,当前日期),(五号, 567 , 567.qq.com ,当前日期),(六号、‘678’、‘678.qq.com’,当前日期);

  

3、SpringBoot各个层次的操作

 

  

3.1、实体类

/* * * * @作者FPH * @自2022.04.27 03点46分*/@Data@TableName(sys_user )公共类系统用户实现serializable { @ table id(type=id type .自动)私有整数id;私有字符串钠

 

  me; private String password; private String email; private Integer state; @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.UPDATE) private Date updateTime; @TableLogic private Integer deleted; @Version private Integer version;@TableName指定表名

  @TableId指定表的主键,并且定义这是一个自增的主键

  @TableField表示填充此属性,

  @TableLogic表示假删除

  @Version表示乐观锁

  以上配置均将在configuration层中实现

  

 

  

3.2、configuration

 

  

3.2.1、TableField的insert与update

insert表示插入这一数据时,自动将当前时间填充至此属性

 

  update表示修改此数据时,自动将当前时间填充

  这里官网有告诉我们如何配置:

  

package com.fang.configuration;import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;import org.apache.ibatis.reflection.MetaObject;import org.springframework.stereotype.Component;import java.time.LocalDateTime;/** * @author FPH * @since 2022年4月27日04:17:56 */@Componentpublic class MyMetaObjectHandler implements MetaObjectHandler { @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("createTime",new Date(),metaObject); } @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("updateTime",new Date(),metaObject); }}

 

  

3.2.2、乐观锁配置

官网也有指出如何配置

 

  

package com.fang.configuration;import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;/** * @author FPH * @since 2022.04.27 03点59分 */@Configurationpublic class MybatisPlus { /** * 乐观锁 */ @Bean public MybatisPlusInterceptor mybatisPlusInterceptor() { MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return interceptor; }}

 

  

3.3、mapper层

package com.fang.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.fang.pojo.SysUser;import org.springframework.stereotype.Repository;import java.util.List;/** * @author FPH * @since 2022年4月27日04:04:16 */@Repositorypublic interface SysUserMapper extends BaseMapper<SysUser> {}

 

  

3.4、service层

package com.fang.service;import com.baomidou.mybatisplus.extension.service.IService;import com.fang.pojo.SysUser;import java.util.List;/** * @author FPH * @since 2022年4月27日04:06:07 */public interface SysUserService extends IService<SysUser> {}

实现类:

 

  

package com.fang.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import com.fang.mapper.SysUserMapper;import com.fang.pojo.SysUser;import com.fang.service.SysUserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;/** * @author FPH * @since 2022年4月27日04:07:58 */@Service("SysUserService")public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> implements SysUserService { @Autowired private SysUserMapper sysUserMapper;}

 

  

4、控制层测试

 

  

4.1、查询所有

package com.fang.controller;import com.fang.pojo.SysUser;import com.fang.service.SysUserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PutMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.List;/** * @author FPH * @since 2022年4月27日04:09:41 */@RestController@RequestMapping("/sysUser")public class SysUserController { @Autowired private SysUserService sysUserService; @GetMapping("/baseSelAll") public List<SysUser> BaseSelectAll(){ return sysUserService.list(); }}

ApiPost测试,能够成功获取全部的集合

 

  这里可以发现service层无需写这种简单地查询语句,即可实现基本的sql功能

  

 

  

4.2、根据id修改信息

这里能发现有时候乐观锁不能生效,例如以下例子:

 

  

package com.fang.controller;import com.fang.pojo.SysUser;import com.fang.service.SysUserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PutMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.util.List;/** * @author FPH * @since 2022年4月27日04:09:41 */@RestController@RequestMapping("/sysUser")public class SysUserController { @Autowired private SysUserService sysUserService; @PutMapping("updateById") public String updateById(SysUser sysUser){ return sysUserService.updateById(sysUser)+""; }}

apiPost这样测试:

 

  

 

  修改成功,但是去查看日志,发现并没有生效

  

 

  乐观锁并没有自增

  解决方案如下:

  新增一个version

  

 

  此时日志显示这样的信息:

  

 

  数据库中成功自增

  

 

  如果此时再修改,但version依旧是传1过去,则修改不成功

  得出结论:version与当前数据库不一致则修改失败

  所以我们需要在每次修改时,传入一个version,通过id查询当前version的值,在通过set传入实体类中一起发送到mybatisPlus自带的修改方法中,则能实现乐观锁

  到此这篇关于关于SpringBoot整合MyBatis-Plus乐观锁不生效的问题解决方案的文章就介绍到这了,更多相关SpringBoot整合MyBatis-Plus乐观锁内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: