SpringBoot集成MybatisPlus
1.导入依赖(版本自行选择)
<!-- mybatis plus 集成 springboot-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<!-- mybatis增强器 依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-extension</artifactId>
</dependency>
<!-- mybatis-plus 代码生成器依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
</dependency>
2.mybatis plus配置文件
mybatis-plus:
configuration:
## 自动驼峰命名规则映射
map-underscore-to-camel-case: true
auto-mapping-behavior: full
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath*:pers/darcy/flower/base/service/*.xml
#实体类扫描
type-aliases-package: pers.darcy.flower.base.service.*.domain
global-config:
sql-injector:
com:
baomidou:
mybatisplus:
mapper:
LogicSqlInjector:
# 逻辑删除配置
db-config:
## 逻辑删除字段
logic-delete-field: deleted
## 配置逻辑删除字段为1是删除
logic-not-delete-value: 0
## 逻辑删除未删除值
logic-delete-value: 1
配置文件中主要配置以下几个方面内容:
2.1 逻辑删除配置
2.2 自动驼峰命名规则映射
2.3 控制台日志输出配置(这里没配)
需要注意的是:
当mapper接口和mapper接口对应的配置文件在命名上相同 、所在的路径相同,则mapper-locations可以不用配置,配置也不会生效
如果mapper接口和mapper接口对应的配置文件在命名上不同或所在的路径不同,需要配置mapper-locations才能实现接口的绑定
3.mybatis plus常用注解
@TableField
当数据库的字段名与实体类的属性名不一致时使用,作用是让数据库的字段名和实体类的字段名能够对应的上,如
@TableField(value = "name")
private String name;
@TableField
@TableField(fill = FieldFill.INSERT)
实体类中有如下属性,通过上面的自动填充属性(fill),我们可以实现在对数据库进行插入操作时,对添加了注解@TableField(fill = FieldFill.INSERT) 在对数据库进行插入时自动填充实体类字段。
@TableField(fill = FieldFill.INSERT_UPDATE) 在对数据库进行插入和更新时对实体类字段进行自动填充我们事先定义好的值。
如:
/**
* 创建时间
*/
@TableField(value = "create_time", fill = FieldFill.INSERT)
private LocalDateTime createTime;
/**
* 创建人
*/
@TableField(value = "create_by", fill = FieldFill.INSERT)
private String createBy;
/**
* 更新时间
*/
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
/**
* 更新人
*/
@TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
private String updateBy;
另外需配置
package pers.darcy.flower.mybatisplus.config;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.util.Date;
/**
* 类说明: createTime,updateTime字段配置默认填充数据
*
* @author wqf
* @date 2022/2/21 11:25
*/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
//使用mp实现添加操作,这个方法会执行,metaObject元数据(表中的名字,表中的字段)
@Override
public void insertFill(MetaObject metaObject) {
//根据名称设置属性值
this.setFieldValByName("createTime", LocalDateTime.now(), metaObject);
this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
}
//使用mp实现修改操作,这个方法会执行
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
}
}
@tableName 表示实体类对应的表名,如:
@TableName(value = "b_dict_type")
public class DictType extends LogicDomain {
/**
* 字典名称
*/
@NotBlank(message = "字典名称不能为空")
@ApiModelProperty(value = "字典名称")
@TableField(value = "name")
private String name;
}
@TableId:表主键标识,如:
/**
* 设置主键的生成策略 设置为主键自增策略
*/
@TableId(type = IdType.AUTO)
private Long id;
@TableLogic:表字段逻辑处理注解(逻辑删除)如:
/**
* 删除标识:0-未删除,1-已删除
*/
@TableLogic
@TableField(value = "deleted")
private Integer deleted = 0;
@TableField(exist = false):表示该属性不为数据库表字段,但又是必须使用的。
@TableField(exist = false)
private Integer read;
@TableField(condition = SqlCondition.LIKE):表示该属性可以模糊搜索。
mybatis-plus 接口扫描
方式一:在接口上添加注解 @Mapper
方式二:在启动类上添加以下注解
@MapperScan("pers.darcy.flower.base.service.*.mapper")
@SpringBootApplication
public class BaseServiceApplication {
public static void main(String[] args) {
SpringApplication.run(BaseServiceApplication.class);
}
}
两种方式任选一种即可
题外话
如果xml sql文件在Java目录下,需要添加以下配置,否则不会被打包到target中
<build>
<resources>
<!-- 配置在src/main/java目录下也能到扫描到xml包 -->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>${maven-compiler-version}</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
</plugins>
</build>
网友评论