Skip to content

mybatis-plus使用

一、相关依赖

下面给出的是 MyBatis-Plus 的基础依赖。如果项目还使用了分页、乐观锁或代码生成器,再按需补充对应模块即可。

 <!--springboot mybatis依赖包-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>

二、配置文件

下面是一个常见的基础配置示例,包含数据源、日志输出、逻辑删除和别名包配置。

# druid加密公钥
public-key: MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALriNprOqAz3tAC+TjhGdWN9xq0P1Fui1AVPoUedqKilr5c1EiRe516C7ngRPAAFlKqngBBOFjhEozvDf9bAHwECAwEAAQ==
spring:
  datasource:
   driver-class-name: com.mysql.cj.jdbc.Driver
   url: jdbc:mysql://127.0.0.1:3306/permission?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=GMT%2B8
   username: root
   password: root

# 如果是 mybatis-plus,配置如下
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
  global-config:
    db-config:
      id-type: auto
      #      field-strategy: not_empty
      table-underline: true
      logic-delete-value: 1 # 逻辑已删除值(默认为 1)
      logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
  mapper-locations: classpath:mapper/**/*.xml
  #在mapper.xml中可以使用别名而不使用类的全路径名,建议xml里还是配置具体路径
  type-aliases-package: com.lcy.study.mybatis.entity

三、配置类

注意 @MapperScan 的扫描路径需要和项目实际包结构保持一致。 另外,不同版本的 MyBatis-Plus 在插件配置方式上也存在差异,3.4 之后统一通过 MybatisPlusInterceptor 管理插件。


/**
 * @Description mybatis-plus配置
 * @Author lcy
 * @Date 2019/10/24 19:12
 */
@Configuration
@MapperScan(basePackages = {"com.lcy.**.mapper","com.lcy.**.**.mapper"})
public class MybatisPlusConfiguration {

    ///**
    // * 3.4此方式弃用分页插件
    // */
    //@Bean
    //public PaginationInterceptor paginationInterceptor(){
    //    return new PaginationInterceptor();
    //}

    ///**
    // * 乐观锁插件--3.3使用
    // */
    //@Bean
    //public OptimisticLockerInterceptor optimisticLockerInterceptor(){
    //    return new OptimisticLockerInterceptor();
    //}

    /**
     * 3.4 以后通过统一拦截器注册插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        //乐观锁
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        //分页插件
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return mybatisPlusInterceptor;
    }

四、实体类

实体类通常配合 @TableId@TableField、逻辑删除字段以及通用父类一起使用,下面是一个基础示例。

/**
 * @Description 角色表
 * @Author lcy
 * @Date 2021-04-23
 */
@ApiModel(value = "角色表")
@Data
@EqualsAndHashCode(callSuper = false)
@Builder(toBuilder = true)
@Accessors(chain = true)
public class BaseRole extends Model<BaseRole> {

    private static final long serialVersionUID = 1L;

    @ApiModelProperty(value = "id")
    @TableId(value = "ROLE_ID", type = IdType.ASSIGN_ID)
    private Long roleId;

    @ApiModelProperty(value = "角色编码")
    @TableField("ROLE_CODE")
    private String roleCode;

    @ApiModelProperty(value = "角色名称")
    @TableField("ROLE_NAME")
    private String roleName;

    @ApiModelProperty(value = "角色类型")
    @TableField("ROLE_TYPE")
    private String roleType;

    @ApiModelProperty(value = "说明")
    @TableField("DESCRIPTION")
    private String description;

    @ApiModelProperty(value = "是否禁用")
    @TableField("DISABLE")
    private String disable;

    @ApiModelProperty(value = "创建人")
    @TableField("CREATE_USER")
    private String createUser;

    @ApiModelProperty(value = "创建时间")
    @TableField("CREATE_TIME")
    private LocalDateTime createTime;

    @ApiModelProperty(value = "最后修改人")
    @TableField("LAST_UPDATE_USER")
    private String lastUpdateUser;

    @ApiModelProperty(value = "最后修改时间")
    @TableField("LAST_UPDATE_TIME")
    private LocalDateTime lastUpdateTime;

    @Override
    protected Serializable pkVal(){
        return this.roleId;
    }
}

五、mapper

Mapper 层一般直接继承 BaseMapper<T>,即可获得常见的单表 CRUD 能力。

/**
 * @Description 角色表 Mapper接口
 * @Author lcy
 * @Date 2021-04-23
 */
public interface BaseRoleMapper extends BaseMapper<BaseRole> {

}

六、service

Service 接口通常继承 IService<T>,用于复用 MyBatis-Plus 提供的通用服务能力。

/**
 * @Description $!{table.comment} 服务类接口
 * @Author lcy
 * @Date 2021-04-23
 */
public interface BaseRoleService extends IService<BaseRole> {

}

七、serviceImpl

/**
 * @Description 角色表服务类实现
 * @Author lcy
 * @Date 2021-04-23
 */
@Service
@AllArgsConstructor
@Slf4j
public class BaseRoleServiceImpl extends ServiceImpl<BaseRoleMapper,BaseRole> implements BaseRoleService {

}

八、controller


/**
 * @Description 角色表Controller
 * @Author lcy
 * @Date 2021-04-23
 */
@RestController
@RequestMapping("/baseRole")
@Api(tags = {"角色表服务入口"})
@AllArgsConstructor
@Slf4j
public class BaseRoleController {

    private final BaseRoleService baseRoleService;

    /**
     * 新增
     *
     * @param baseRole 添加信息
     * @return Result
     * @Author lcy
     * @date 2021-04-23
     **/
    @PostMapping("/add.do")
    @ApiOperation(value = "新增")
    public Result<Object> save(BaseRole baseRole){
        baseRoleService.save(baseRole);
        return ResultUtil.success();
    }

    /**
     * 修改
     *
     * @param baseRole 修改信息
     * @return Result
     * @Author lcy
     * @date 2021-04-23
     **/
    @PostMapping("/update.do")
    @ApiOperation(value = "修改")
    public Result<Object> update(BaseRole baseRole){
        baseRoleService.updateById(baseRole);
        return ResultUtil.success();
    }
}