一.mybatis的插件机制
1.介绍
2.配置步骤
2.1.首先写一个拦截器的类
-
import org.
apache.
ibatis.
executor.
Executor;
-
import org.
apache.
ibatis.
mapping.
MappedStatement;
-
import org.
apache.
ibatis.
plugin.*;
-
-
import java.
util.
Properties;
-
-
@Intercepts({
-
@Signature(
-
type =
Executor.
class,
//表示拦截执行器的方法
-
method =
"update",
//表示拦截执行器中的update方法
-
args = {
MappedStatement.
class,
Object.
class}
-
)
-
})
-
public
class
MyIntercepter
implements
Interceptor {
-
@Override
-
public
Object
intercept(
Invocation invocation) throws
Throwable {
-
//拦截方法,具体业务逻辑编写的位置
-
return invocation.
proceed();
-
}
-
-
@Override
-
public
Object
plugin(
Object target) {
-
//创建target对象的代理对象,目的是将当前的拦截器加入到该对象中,这个方法会被执行4次:因为有4中拦截的情况
-
return
Plugin.
wrap(target,
this);
-
}
-
-
@Override
-
public
void
setProperties(
Properties properties) {
-
//属性设置
-
}
-
}
2.2.在配置类中注入拦截器
-
@Configuration
-
@MapperScan(
"com.cd.mp.mapper")
-
public
class
MybatisPlusConfig {
-
-
@Bean
//设置分页插件
-
public
PaginationInterceptor
paginationInterceptor(
){
-
return
new
PaginationInterceptor();
-
}
-
-
@Bean
-
public
MyIntercepter
myIntercepter(
){
-
return
new
MyIntercepter();
-
}
-
}
二.执行分析插件
三.性能分析插件
四.乐观锁插件
2.插件配置
3.实体类中配置
4.数据库表也要version字段
5.测试
插件会自动给version加一
总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号机制和CAS算法实现。
缺点:
五.mybatis-plus的自动填充功能
1.首先在实体类中用@TableField注解file来设置什么时候自动填充
2.继承MetaObject
六.Mybatis-Plus的逻辑删除
1.数据库中的表需要一个对应的deleted字段
2.实体类
3.springBoot的配置文件
7.通用枚举
1.首先表要有对应的字段
后端接收前端传来的String类型参数需要用枚举来接收的话,就需要定义一个自定义转换器
-
import com.
dingli.
framework.
eunm.
MarryEumn;
-
import org.
springframework.
context.
annotation.
Configuration;
-
import org.
springframework.
core.
convert.
converter.
Converter;
-
import org.
springframework.
format.
FormatterRegistry;
-
import org.
springframework.
web.
servlet.
config.
annotation.
WebMvcConfigurer;
-
-
@Configuration
-
public
class
WebConfig
implements
WebMvcConfigurer {
-
-
@Override
-
public
void
addFormatters(
FormatterRegistry registry) {
-
registry.
addConverter(
new
Converter<
String,
MarryEumn>() {
-
@Override
-
public
MarryEumn
convert(
String s) {
-
MarryEumn marryEumn =
null;
-
if (s.
equals(
"未婚")){
-
marryEumn =
MarryEumn.
NOMARRY;
-
}
-
if (s.
equals(
"订婚")){
-
marryEumn =
MarryEumn.
RESERVEMARRY;
-
}
-
if (s.
equals(
"已婚")){
-
marryEumn =
MarryEumn.
MARRY;
-
}
-
if (s.
equals(
"离婚")){
-
marryEumn =
MarryEumn.
DIVORCE;
-
}
-
return marryEumn;
-
}
-
});
-
}
-
}
2.定义枚举:继承IEnum接口
@EnumValue:指定数据库中存的值
@JsonValue:指定返回给前端的值
-
import com.baomidou.mybatisplus.
annotation.EnumValue;
-
import com.baomidou.mybatisplus.core.enums.IEnum;
-
import com.fasterxml.jackson.
annotation.JsonValue;
-
-
public
enum MarryEumn implements IEnum<Integer> {
-
-
NOMARRY(
0,
"未婚"),
-
RESERVEMARRY(
1,
"订婚"),
-
MARRY(
2,
"已婚"),
-
DIVORCE(
3,
"离婚");
-
-
@EnumValue
-
private int value;
-
@JsonValue
-
private String desc;
-
-
MarryEumn(int value, String desc) {
-
this.value = value;
-
this.desc = desc;
-
}
-
-
@Override
-
public Integer getValue() {
-
return
this.value;
-
}
-
-
@Override
-
public String toString() {
-
return
this.desc;
-
}
-
-
}
3.springboot中配置
default-enum-type-handler:这个也很重要,这里不配的话,如果是自己写xml文件,在sql中也会写
#{marriage,typeHandler=org.apache.ibatis.type.EnumTypeHandler}
-
mybatis-plus:
-
global-
config:
-
db-
config:
-
id-
type: auto
-
configuration:
-
log-impl: org.apache.ibatis.logging.
stdout.StdOutImpl
-
default-enum-
type-handler: org.apache.ibatis.
type.EnumOrdinalTypeHandler
-
type-enums-
package: com.dingli.framework.eunm
-
mapper-locations: classpath*:mappers/*Mapper.xml
4.修改实体
8.MP的代码生成器
9.MybatisX快速开发插件
转载:https://blog.csdn.net/weixin_54401017/article/details/125800206
查看评论