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();
}
}