区别点
mybatis-plus
service层也不需要写代码,已经帮助你继承了IService,ServiceImpl
都不需要自己手动写Service层的代码
也可以通过baseMapper调用相关语句,来实现对数据库的具体操作,见mybatis-plus具体操作
编写代码
1、实体
- @TableId主键策略
- @TableFieldt添加注解,自动填充/更新
- @TableLogic逻辑删除
- @Version版本号
@Data
public class User {
//设置主键策略
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
private String email;
//自动填充
@TableField(fill = FieldFill.INSERT)
private Date createTime;
//自动更新
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
//版本号
@Version
@TableField(fill = FieldFill.INSERT)
private Integer version;
//逻辑删除
@TableLogic
@TableField(fill = FieldFill.INSERT)
private Integer deleted;
}
2.Mapper
@Repository
public interface UserMapper extends BaseMapper<User> {
}
3.自动填充
实现元对象处理器接口
注意:不要忘记添加 @Component 注解
实现MetaObjectHandler 接口
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(MyMetaObjectHandler.class);
@Override
public void insertFill(MetaObject metaObject) {
LOGGER.info("start insert fill ....");
this.setFieldValByName("createTime", new Date(), metaObject);
this.setFieldValByName("updateTime", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
LOGGER.info("start update fill ....");
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}
4.乐观锁
(1)数据库中添加version字段
(2)实体类添加version字段
@Version
@TableField(fill = FieldFill.INSERT)
private Integer version;
(3)元对象处理器接口添加version的insert默认值
元对象处理器接口添加deleted的insert默认值
@Override
public void insertFill(MetaObject metaObject) {
......
this.setFieldValByName("version", 1, metaObject);
this.setFieldValByName("deleted", 0, metaObject);
}
5. MybatisPlusConfig 中注册 Bean
创建配置类
需要
@Configuration
@MapperScan(“com.shennan.mybatis_plus.mapper”)注解
包括mybatis-plus各种插件
需要
@Bean
- 乐观锁插件
- 分页插件
- 逻辑删除
- SQL 执行性能分析插件
@EnableTransactionManagement
@Configuration
@MapperScan("com.shennan.mybatis_plus.mapper")
public class MybatisPlusConfig {
/**
* 乐观锁插件
*/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
}