对于后端开发来说,最常见的无疑是对数据的增删改查,然后针对具体业务进行对应的功能开发。
而MyBatis-Plus是一个MyBatis的增强工具,可以极大地简化开发,提升Java开发的工作效率。
为此,本文结合实例演示基于MybatisPlus实现基本增删改查。
现有一张角色表role,如下所示:
id | role_name | create_time | update_time | is_deleted |
---|---|---|---|---|
1 | 系统管理员 | 2021-05-31 18:09:18 | 2021-05-31 18:09:18 | 0 |
2 | 平台管理员 | 2021-06-01 08:38:40 | 2021-06-18 17:13:17 | 0 |
3 | 区域仓库管理员 | 2021-06-18 17:12:21 | 2021-06-18 17:12:21 | 0 |
4 | 产品管理员 | 2021-09-27 09:37:13 | 2022-01-18 14:57:30 | 0 |
5 | 区域运营 | 2022-01-18 14:57:40 | 2022-01-18 14:57:40 | 0 |
6 | 产品录入人员 | 2022-01-18 14:58:02 | 2022-01-18 14:58:02 | 0 |
7 | 产品审核人员 | 2022-01-18 14:58:12 | 2022-01-18 14:58:12 | 0 |
8 | 团长管理员 | 2022-01-18 14:58:30 | 2022-01-18 14:58:30 | 0 |
在Java开发中,对于一张表,通常会有create_time,update_time,is_deleted这三个字段。
建表语句为:
CREATE TABLE `role` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT '角色id',
`role_name` varchar(20) NOT NULL DEFAULT '' COMMENT '角色名称',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`is_deleted` tinyint NOT NULL DEFAULT '0' COMMENT '删除标记(0:不可用 1:可用)',
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
对于主键类型,一般采用bigint,其存储占用8个字节,因此在Java实体类中主键的类型一般为Long。
项目创建、依赖引入、数据库配置为最基本的内容,本文不做赘述。
@Data
@TableName("role")
public class Role extends BaseEntity {
private static final long serialVersionUID = 1L;
@TableField("role_name")
private String roleName;
}
对于实体类,可让其继承一个BaseEntity类,其中定义了实体类的一些公共字段。
@Data
public class BaseEntity implements Serializable {
@TableId(type = IdType.AUTO)
private Long id;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField("create_time")
private Date createTime;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField("update_time")
private Date updateTime;
@TableLogic
@TableField("is_deleted")
private Integer isDeleted;
}
对于逻辑删除字段,需要加上@TableLogic注解。
@Api(tags = "角色相关接口")
@RestController
@RequestMapping("/admin/acl/role")
public class RoleController {
@Autowired
private RoleService roleService;
@ApiOperation("条件分页查询角色列表")
@GetMapping("{page}/{limit}")
public Result pageList(@PathVariable Long page,
@PathVariable Long limit,
RoleQueryVo roleQueryVo){
Page<Role> pageParam = new Page<>(page, limit);
IPage<Role> pageModel = roleService.selectPage(pageParam, roleQueryVo);
return Result.ok(pageModel);
}
@ApiOperation("根据id查询角色")
@GetMapping("get/{id}")
public Result selectRoleById(@PathVariable Long id){
Role role = roleService.getById(id);
return Result.ok(role);
}
@ApiOperation("添加角色")
@PostMapping("save")
public Result addRole(@RequestBody Role role){
roleService.save(role);
return Result.ok();
}
@ApiOperation("修改角色")
@PutMapping("update")
public Result updateRole(@RequestBody Role role){
roleService.updateById(role);
return Result.ok();
}
@ApiOperation("根据id删除角色")
@DeleteMapping("remove/{id}")
public Result deleteRole(@PathVariable Long id){
roleService.removeById(id);
return Result.ok();
}
@ApiOperation("批量删除角色")
@DeleteMapping("batchRemove")
public Result deleteRoleBatch(@RequestBody List<Long> idList){
roleService.removeByIds(idList);
return Result.ok();
}
}
Service接口
public interface RoleService extends IService<Role> {
/**
* 角色列表(条件分页查询)
* @param pageParam
* @param roleQueryVo
* @return
*/
IPage<Role> selectPage(Page<Role> pageParam, RoleQueryVo roleQueryVo);
}
Service实现类
@Service
public class RoleServiceImpl extends ServiceImpl<RoleMapper, Role> implements RoleService {
/**
* 角色列表(条件分页查询)
* @param pageParam
* @param roleQueryVo
* @return
*/
@Override
public IPage<Role> selectPage(Page<Role> pageParam, RoleQueryVo roleQueryVo) {
// 获取查询条件
String name = roleQueryVo.getRoleName();
LambdaQueryWrapper<Role> wrapper = new LambdaQueryWrapper<>();
// 判断查询条件是否为空
if (!StringUtils.isEmpty(name)){
wrapper.like(Role::getRoleName, name);
}
IPage<Role> rolePage = baseMapper.selectPage(pageParam, wrapper);
return rolePage;
}
}
注意,在使用MybatisPlus进行分页查询时,需要使用到分页插件,配置如下:
@Configuration
@MapperScan("scan.your.mapper.package")
public class MybatisPlusConfig {
/**
* 添加分页插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}
@Mapper
public interface RoleMapper extends BaseMapper<Role> {
}