在疯狂学习的路上,今天来学习Mybatis-plus。
Mybatis-plus国产的开源框架,基于Mybatis,核心功能就是简化Mybatis的开发,提高开发效率。
- pom.xml中引入mybatis-plus的依赖
<!-- 引入mybatis-plus -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
- application.yml配置文件中配置连接数据库、打印SQL语句等。然后在启动类需要添加@MapperScan(“mapper所在的包”),否则无法加载 Mppaer bean。
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/userdb?useUnicode=true&characterEncoding=utf8
username: root
password: 123456
server:
port: 8080
#打印SQL语句
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
- 操作数据库只需要在Mapper接口中继承BaseMapper即可,User为要操作的实体
4. 常用注解
@TableName(value = “t_user”),在实体类上添加这个注解,表示与数据库表对应的名字
@TableId(value = “id”,type = IdType.NONE),指定实体属性的对应数据库表的主键,type表示主键的生成方式,其中
值 | 描述 |
---|---|
AUTO | 数据库自增 |
NONE | Mybatis-plus 给你设置主键,雪花算法实现(默认的方式) |
INPUT | 需要开发者手动赋值 |
ASSIGN_ID | Mybatis-plus 分配 ID,类型可以为Long、Integer、String, |
ASSIGN_UUID | 分配 UUID,类型为Strinig |
@TableField 映射非主键字段,value 映射字段名
exist 表示是否为数据库字段 false,如果实体类中的成员变量在数据库中没有对应的字段,则可以使用exist,VO、DTO
select 表示是否查询该字段
@TableField(select = false) 为不查询此属性
@TableField(fill = FieldFill.INSERT) fill 表示是否自动填充,将对象存进数据库的时候,由
MyBatis Plus 自动给某些字段赋值,create_time、update_time
fill属性需要创建自动填充处理器
package com.hierway.user.handel;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* @Program user
* @Description 处理插入更新时间Handle
* @PackageName com.hierway.user.handel
* @Author LiuJunbao
* @Date 2021-04-0917:27
*/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
// createTime、updateTime为需要自动创建的属性名称
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}