当前位置:   article > 正文

【SpringBoot实战】基于MybatisPlus实现基本增删改查_springboot增删改查 公共

springboot增删改查 公共

【SpringBoot实战】基于MybatisPlus实现基本增删改查

对于后端开发来说,最常见的无疑是对数据的增删改查,然后针对具体业务进行对应的功能开发。
MyBatis-Plus是一个MyBatis的增强工具,可以极大地简化开发,提升Java开发的工作效率。
为此,本文结合实例演示基于MybatisPlus实现基本增删改查。

1.准备工作

现有一张角色表role,如下所示:

idrole_namecreate_timeupdate_timeis_deleted
1系统管理员2021-05-31 18:09:182021-05-31 18:09:180
2平台管理员2021-06-01 08:38:402021-06-18 17:13:170
3区域仓库管理员2021-06-18 17:12:212021-06-18 17:12:210
4产品管理员2021-09-27 09:37:132022-01-18 14:57:300
5区域运营2022-01-18 14:57:402022-01-18 14:57:400
6产品录入人员2022-01-18 14:58:022022-01-18 14:58:020
7产品审核人员2022-01-18 14:58:122022-01-18 14:58:120
8团长管理员2022-01-18 14:58:302022-01-18 14:58:300

在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;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

对于主键类型,一般采用bigint,其存储占用8个字节,因此在Java实体类中主键的类型一般为Long

项目创建、依赖引入、数据库配置为最基本的内容,本文不做赘述。

2.增删改查

实体类
@Data
@TableName("role")
public class Role extends BaseEntity {
	
	private static final long serialVersionUID = 1L;
	
	@TableField("role_name")
	private String roleName;

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

对于实体类,可让其继承一个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;

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

对于逻辑删除字段,需要加上@TableLogic注解。

Controller层
@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();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
Service层

Service接口

public interface RoleService extends IService<Role> {

    /**
     * 角色列表(条件分页查询)
     * @param pageParam
     * @param roleQueryVo
     * @return
     */
    IPage<Role> selectPage(Page<Role> pageParam, RoleQueryVo roleQueryVo);

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

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;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

注意,在使用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;
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
Mapper层
@Mapper
public interface RoleMapper extends BaseMapper<Role> {
}
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/598321
推荐阅读
相关标签
  

闽ICP备14008679号