app开发者平台在数字化时代的重要性与发展趋势解析
748
2022-10-09
SpringBoot整合MyBatis
目录SpringBoot整合Myabtis-Plus1、依赖导入2、数据库插入3、SpringBoot各个层次的操作3.1、实体类3.2、configuration3.2.1、TableField的insert与update3.2.2、乐观锁配置3.3、mapper层3.4、service层4、控制层测试4.1、查询所有4.2、根据id修改信息
SpringBoot整合Myabtis-Plus
在与官网配置一致的情况下依旧无法生效,如下整合mybatis-plus
1、依赖导入
其余的springboot与mysql相关的依赖就无需展示
配置文件配置
mybatis-plus:
global-config:
db-config:
# 逻辑删除,删除标志
logic-delete-value: 1
# 逻辑删除,未删除标志
logic-not-delete-value: 0
type-aliases-package: com.fang.pojo
configuration:
# mybatis-plus日志
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
2、数据库插入
数据库以此为例
DROP TABLE IF EXISTS sys_user;
CREATE TABLE rbac_plus.sys_user
(
id INT AUTO_INCREMENT NOT NULL COMMENT '主键ID',
name VARCHAR(50) NOT NULL COMMENT '名称',
password VARCHAR(500) NOT NULL COMMENT '密码',
email VARCHAR(200) NOT NULL COMMENT '邮箱',
state INT NOT NULL DEFAULT 0 COMMENT '状态,0为正常,1为异常',
create_time DATETIME NOT NULL COMMENT '创建时间',
update_time DATETIME COMMENT '修改时间',
deleted INT DEFAULT 0 COMMENT '假删除',
version INT DEFAULT 1 COMMENT '乐观锁',
PRIMARY KEY (id)
)ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='user表';
INSERT INTO `rbac_plus`.`sys_user` (`name`, `password`, `email`, `create_time`) VALUES ('一号', '123', '123@qq.com', CURRENT_DATE),
('二号','234','234.qq.com',CURRENT_DATE),
('三号','345','345.qq.com',CURRENT_DATE),
('四号','456','456.qq.com',CURRENT_DATE),
('五号','567','567.qq.com',CURRENT_DATE),
('六号','678','678.qq.com',CURRENT_DATE);
3、SpringBoot各个层次的操作
3.1、实体类
/**
* @author FPH
* @since 2022.04.27 03点46分
*/
@Data
@TableName("sys_user")
public class SysUser implements Serializable {
@TableId(type = IdType.AUTO)
private Integer id;
private String name;
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
*/
@Component
public 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分
*/
@Configuration
public 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
*/
@Repository
public interface SysUserMapper extends BaseMapper
}
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
}
实现类:
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
@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
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.sprihttp://ngframework.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自带的修改方法中,则能实现乐观锁
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~