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>