概述
MybatisPlus使用总结
MybatisPlus 能够大大简化我们对于单表操作的效率
基础环境搭建
首先是MybatisPlus 的Maven 环境引入
当然,要想项目能够正常运行 还需要引入SpringBoot的相关依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
</exclusion>
</exclusions>
<version>3.4.2</version>
</dependency>
项目的 yml配置文件如下
spring:
mvc:
favicon:
enabled: false
servlet:
load-on-startup: 1
log-resolved-exception: true
throw-exception-if-no-handler-found: true
date-format: yyyy-MM-dd HH:mm:ss
jackson:
date-format: yyyy-MM-dd HH:mm:ss #定制jackson的Date格式化
# 配置数据源
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/mybatisplustest?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&useSSL=false
username: root
password: root
swagger2:
base-package: com.fy.Employee
verison: 1.0.0
title: 测试接口
#程序启动和运行时需要的配置参数,其中的参数由业务定义,或者功能组件定义,例如数据源配置。业务相关的配置都应该放在该配置文件中
mybatis-plus:
global-config:
db-config:
logic-delete-field: flag # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: mapper/*.xml #该处表示对应的Mapper会在 Resources文件的Mapper文件中
建立表和实体类
依赖引用完成后,需要建立对应的实体类和相应的数据库表
实体类如下
@TableName("user") //该注解表示此实体类 与数据库中的 user表相互映射
@Data
public class User implements Serializable {
/**
* userid
*/
@ApiModelProperty(name = "userid", notes = "")
@TableId
private String userId;
/**
* 用户名称
*/
@ApiModelProperty(name = "用户名称", notes = "")
private String name;
/**
* 用户年龄
*/
@ApiModelProperty(name = "用户年龄", notes = "")
private Integer age;
/**
* 邮箱
*/
@ApiModelProperty(name = "邮箱", notes = "")
private String email;
/**
* 逻辑删除
* */
@ApiModelProperty(name = "逻辑删除",notes = "")
@TableLogic
@TableField(fill= FieldFill.INSERT)
private Integer deleted ;
/**
* 创建人
*/
@ApiModelProperty(name = "创建人", notes = "")
@TableField(fill=FieldFill.INSERT)
private String createdBy;
/**
* 创建时间
*/
@ApiModelProperty(name = "创建时间", notes = "")
@TableField(fill=FieldFill.INSERT)
private String createdTime;
/**
* 更新人
*/
@ApiModelProperty(name = "更新人", notes = "")
@TableField(fill=FieldFill.INSERT_UPDATE)
private String updatedBy;
/**
* 更新时间
*/
@ApiModelProperty(name = "更新时间", notes = "")
@TableField(fill=FieldFill.INSERT_UPDATE)
private String updatedTime;
}
数据库脚本如下
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`USER_ID` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT 'userid',
`NAME` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名称',
`AGE` int(11) NULL DEFAULT NULL COMMENT '用户年龄',
`EMAIL` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '邮箱',
`DELETED` int(11) NULL DEFAULT NULL COMMENT '逻辑删除',
`CREATED_BY` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建人',
`CREATED_TIME` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '创建时间',
`UPDATED_BY` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新人',
`UPDATED_TIME` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '更新时间',
PRIMARY KEY (`USER_ID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
创建Mapper
这里是 Mybatisplus 的通用写法,我们将自己的 Mapper 继承自 MybatisPlus提供的 BaseMapper 并且将我们自己的实体类对象传入对应的泛型当中。
继承完成后,就可以使用 MybatisPlus中封装的方法
@Mapper
public interface UserMapper extends BaseMapper<User> {
}
以下将是对基本操作的一些操作案例
@RunWith(SpringRunner.class)
@SpringBootTest(classes = MainApplication.class)
public class TestProject {
@Autowired
UserMapper userMapper;
/**
* 添加功能
*/
@Test
public void addOneUser(){
User user=new User();
user.setAge(10);
user.setEmail("132@qq.com");
user.setName("小猪");
userMapper.insert(user);
}
/**
* 更新
*/
@Test
public void UpdateTest(){
String id="1605757257864192001";
User user = userMapper.selectById(id);
user.setName("小牛");
userMapper.updateById(user);
}
@Test
public void SelectAll(){
userMapper.selectList(null);
}
/**
* 根据 ID删除
*/
@Test
public void deleteById(){
String id="1605757257864192001";
userMapper.deleteById(id);
}
}
下面我总结几点MybatisPlus 几点在项目当中较实用的地方
公共字段的自动填充
项目中难免会遇到 create_time 、create_id、 update_time 、update_id这种的公共属性,如果都是用 Setter方法去设置属性的话会显得我们的代码非常的冗长
首先,需要构建一个config配置
/**
* 自动填充功能
* 其核心是给实体类的属性赋值
* 如下图定义了5个常量,这些都是每个实体类所具有的属性
* 我们的自动填充的功能就是给实体类的属性赋值、
* 然后插入或者是更新数据库中表的内容
*/
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
/*
* 增加新的内容时 ,需要填充deleted属性为0
* 新增时 需要填充 四个属性
* 更新时 需要填充 两个属性
* */
private static final String CREATE_BY_FIELD_NAME = "createdBy";
private static final String CREATE_TIME_FIELD_NAME = "createdTime";
private static final String UPDATE_BY_FIELD_NAME = "updatedBy";
private static final String UPDATE_TIME_FIELD_NAME = "updatedTime";
private static final String DELETED_FIELD_NAME = "deleted";
// 模拟生成两个用户id
private static final String USER_1="xiaoming";
private static final String USER_2="xiaohong";
/* (non Javadoc)
* @Title: insertFill
* @Description: {简单描述}
* @param arg0
* @see com.baomidou.mybatisplus.core.handlers.MetaObjectHandler#insertFill(org.apache.ibatis.reflection.MetaObject)
*/
@Override
public void insertFill(MetaObject metaObject) {
// this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
log.info("start 自动填充");
//1、自动设置创建人信息
this.strictInsertFill(metaObject,CREATE_BY_FIELD_NAME,String.class,USER_1);
//2、自动设置创建时间
this.strictInsertFill( metaObject,CREATE_TIME_FIELD_NAME, String.class,DateUtil.now());
//3、自动设置更新人信息,当外部接口调用时,用户可能为空
this.strictInsertFill(metaObject,UPDATE_BY_FIELD_NAME,String.class,USER_1);
//4、自动设置更新时间
this.strictInsertFill( metaObject,UPDATE_TIME_FIELD_NAME, String.class,DateUtil.now());
//5.设置逻辑删除的值为0
this.strictInsertFill(metaObject,DELETED_FIELD_NAME,Integer.class,0);
}
@Override
public void updateFill(MetaObject metaObject) {
//1、自动设置更新人信息,当外部接口调用时,用户可能为空
this.setFieldValByName(UPDATE_BY_FIELD_NAME,USER_2,metaObject);
//2、自动设置更新时间
this.setFieldValByName(UPDATE_TIME_FIELD_NAME, DateUtil.now(), metaObject);
}
}
配置类添加完毕后需要在实体类的对应属性中添加相应的注解
最后就可以试试构造数据,你会发现就算不填写这些属性,他们依然会被赋上预期的值
实体类与数据库字段匹配问题
在实际开发过程中,我们可能遇到自身实体类和数据库中字段不能完全对应的问题。如果不处理该问题,则会报错。
Error querying database. Cause:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column in ‘field list’!
解决方案,在属性上加入 @tableField(exist = false)这样就能避免问题的属性
最后
以上就是积极方盒为你收集整理的MybatisPlus使用总结 (SpringBoot项目)MybatisPlus使用总结的全部内容,希望文章能够帮你解决MybatisPlus使用总结 (SpringBoot项目)MybatisPlus使用总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复