11.框架MyBatis-Plus
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
一、基本概念
MyBatis-Plus简称 MP是一个 MyBatis 的增强工具在 MyBatis 的基础上只做增强不做改变为简化开发、提高效率而生。
导入依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.5.2</version>
</dependency>
二、配置
MP配置需要覆盖MyBatis配置具体配置查看使用配置 | MyBatis-Plus
@Bean//MP配置
public SqlSessionFactory mybatisSqlSessionFactory(DataSource dataSource) throws Exception {
MybatisSqlSessionFactoryBean factory=new MybatisSqlSessionFactoryBean();
factory.setConfiguration(new MybatisConfiguration());
factory.setGlobalConfig(new GlobalConfig());
factory.setDataSource(dataSource);
return factory.getObject();
}
三、CRUD接口
通用 CRUD 封装 BaseMapper 接口为 MP 启动时自动解析实体表关系映射转换为 MyBatis 内部对象注入容器。
@Mapper
public interface BookMapper extends BaseMapper<Book> {}
通用 Service CRUD 封装 IService 接口进一步封装 CRUD 采用 get 查询单行、list 查询集合、page 分页、remove 删除、save 添加、update 更新前缀命名方式区分 Mapper 层避免混淆。
public interface BookService extends IService<Book> {}
@Service
public class BookServiceImp extends ServiceImpl<BookMapper,Book> implements BookService {}
实体类只需继承 Model 类即可进行强大的 CRUD 操作需要项目中已注入对应实体的BaseMapper。
@Component
public class Book extends Model<Book> {}
四、注解
@TableName实体类标注标识实体类对应的表。
@TableId属性标注标识主键属性。
@TableField属性标注标识字段属性。
@TableLogic属性标注标识逻辑删除属性。
其他注解查看注解 | MyBatis-Plus
五、条件构造器
AbstractWrapperQueryWrapper(LambdaQueryWrapper) 和UpdateWrapper (LambdaUpdateWrapper) 的父类用于生成 sql 的 where 条件, entity 属性也用于生成 sql 的 where 条件。
QueryWrapper继承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件
及 LambdaQueryWrapper, 可以通过 new QueryWrapper().lambda() 方法获取。
UpdateWrapper承自 AbstractWrapper ,自身的内部属性 entity 也用于生成 where 条件
及 LambdaUpdateWrapper, 可以通过 new UpdateWrapper().lambda() 方法获取。
具体构造方法查看条件构造器 | MyBatis-Plus
六、插件
MybatisPlusInterceptor该插件是核心插件,目前代理了 Executor#query、Executor#update 和 StatementHandler#prepare 方法。
目前已有的功能:
- 自动分页: PaginationInnerInterceptor
- 多租户: TenantLineInnerInterceptor
- 动态表名: DynamicTableNameInnerInterceptor
- 乐观锁: OptimisticLockerInnerInterceptor
- sql 性能规范: IllegalSQLInnerInterceptor
- 防止全表更新与删除: BlockAttackInnerInterceptor
@Bean//插件
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor interceptor=new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
具体插件使用查看插件主体 | MyBatis-Plus