Mybatis-Plus简介
在使用mybatis的过程中,我们会发现需要自己写很多的mapper和mapper.xml配置文件,很多时候会写到相当多的重复代码,特别是普通的增删改查,这样不仅会影响我们的开发效率,也会使得代码变的冗余且可读性较差。虽然前面使用了mybatis的自动生成插件generator,但是generator对基类继承显得不太友好。而mybatis-plus对此会有非常友好的支持,使用也很方便简单
简单的说,Mybatis-Plu(简称MP)是一个 Mybatis 的增强工具,在 Mybatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
用法
首先引入jar包,这里注意:Mybatis及Mybatis-Spring依赖请勿加入项目配置,以免引起版本冲突!Mybatis-Plus会自动帮你维护!
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatisplus-spring-boot-starter</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.1.9</version>
</dependency>
配置
application.yml配置
mybatis-plus:
# 如果是放在src/main/java目录下 classpath:/com/yourpackage/*/mapper/*Mapper.xml
# 如果是放在resource目录 classpath:/mapper/*Mapper.xml
mapper-locations: classpath:/com/qd/mybatis-plus-demo/*Mapper.xml
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage: com.qd.mybatis-plus-demo.*.domain
global-config:
#主键类型 0:"数据库ID自增", 1:"用户输入ID",2:"全局唯一ID (数字类型唯一ID)", 3:"全局唯一ID UUID";
id-type: 3
#字段策略 0:"忽略判断",1:"非 NULL 判断"),2:"非空判断"
field-strategy: 2
#驼峰下划线转换
db-column-underline: true
#刷新mapper 调试神器
#refresh-mapper: true
#数据库大写下划线转换
#capital-mode: true
# Sequence序列接口实现类配置
#key-generator: com.baomidou.mybatisplus.incrementer.OracleKeyGenerator
#逻辑删除配置(下面3个配置)
#logic-delete-value: 1
#logic-not-delete-value: 0
#sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
#自定义填充策略接口实现
meta-object-handler: com.baomidou.springboot.MyMetaObjectHandler
configuration:
#配置返回数据库(column下划线命名&&返回java实体是驼峰命名),自动匹配无需as(没开启这个,SQL需要写as: select user_id as userId)
map-underscore-to-camel-case: true
cache-enabled: false
#配置JdbcTypeForNull, oracle数据库必须配置
jdbc-type-for-null: 'null'
java configration配置
@Configuration
@MapperScan("com.qd.mybatis-plus-demo.*.mapper*")
public class MybatisPlusConfig {
/**
* mybatis-plus SQL执行效率插件【生产环境可以关闭】
*/
@Bean
public PerformanceInterceptor performanceInterceptor(){
return new PerformanceInterceptor();
}
/*
* 分页插件,自动识别数据库类型
* 多租户,请参考官网【插件扩展】
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
这里使用BaseEntity基类继承Model,实体类继承BaseEntity
public class BaseEntity<T extends Model> extends Model<T> {
/**
* 主键ID
*/
@TableId
private Long id;
private Long tenantId;
public Long getId() {
return this.id;
}
public void setId(Long id) {
this.id = id;
}
public Long getTenantId() {
return tenantId;
}
public void setTenantId(Long tenantId) {
this.tenantId = tenantId;
}
@Override
protected Serializable pkVal() {
return this.id;
}
}
SuperMapper继承BaseMapper,BaseMapper中实现17种基本的CRUD
public interface SuperMapper<T> extends BaseMapper<T> {
// 这里可以放一些公共的方法
}
Mapper继承SuperMapper
public interface UserMapper extends SuperMapper<User> {
/**
* 自定义方法
*/
int deleteAll();
@Select("select test_id as id, name, age, test_type from user")
List<User> selectListBySQL();
}
IUserService继承IService
public interface IUserService extends IService<User> {
boolean deleteAll();
public List<User> selectListBySQL();
}
UserService实现类继承ServiceImpl并实现IUserService接口
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
@Override
public boolean deleteAll() {
return retBool(baseMapper.deleteAll());
}
@Override
public List<User> selectListBySQL() {
return baseMapper.selectListBySQL();
}
}
UserMapper.xml配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.baomidou.springboot.mapper.UserMapper">
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
test_id AS testId, name, age, test_type AS testType, role, phone
</sql>
<delete id="deleteAll">
DELETE FROM USER
</delete>
</mapper>