(十一)从零搭建后端框架——如此简洁的数据库操作

1,600 阅读2分钟

前言

【MyBatis使用和不足思考】这一篇文章中, 指出了MyBatis使用的不足。其中一点就是每个实体都需要写增删改查SQL,感觉重复劳动。

如若对MyBatis的使用还不是很熟悉的,可以先查看上面的文章。

本文将会通过使用MyBatis-Plus解决这个问题,MyBatis-PlusMyBatis的增强工具, 在MyBatis的基础上只做增强不做改变,简化开发、提高效率。

具体实现

Maven依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.3.2</version>
</dependency>

持久层

@Mapper
public interface UserDao extends BaseMapper<User> {
}

没错,你没看错,不需要定义任何接口方法,不需要写任何SQL语句。

继承接口BaseMapper即可,泛型是实体类。

服务层

public interface UserService extends IService<User> {
}
@Service
@Transactional
public class UserServiceImpl extends ServiceImpl<UserDao, User> implements UserService {
}

同样,服务层接口继承IService,泛型是实体类。服务层实现类继承ServiceImpl,泛型是Dao接口和实体类。

实体类

@TableName("sys_user")
@Getter
@Setter
public class User extends Common {

    @TableId(type = IdType.AUTO)
    private Long id;

    private String account;

    private String password;

    private String nickname;

    private String email;

    private String phone;
}
  • @TableName 指定对应的数据库表名
  • @TableId(type = IdType.AUTO) 指定唯一ID,并指定是自增类型

至此,准备工作都做完了,可以在控制层中调用接口。

控制层

@RestController
@RequestMapping("/user")
public class UserController extends BaseController {

    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public ApiResult getUser(@PathVariable("id") Long id) {
        return ApiResult.success(userService.getById(id));
    }

    @PostMapping
    public ApiResult addUser(@RequestBody @Valid User user) {
        setCreateInfo(user);
        return ApiResult.success(userService.save(user));
    }

    @DeleteMapping("/{id}")
    public ApiResult deleteUser(@PathVariable("id") Long id) {
        return ApiResult.success(userService.removeById(id));
    }

    @PutMapping
    public ApiResult updateUser(@RequestBody @Valid User user) {
        setModifyInfo(user);
        return ApiResult.success(userService.updateById(user));
    }
}

单元测试

MockMvc单元测试这一篇文章中,通过MockMvc模拟接口进行测试。

这里可以直接使用之前的测试用例,执行结果:

单元测试

总结

通过使用MyBatis-Plus极大的简化了开发,简直是懒人福音!

虽然默认实现只支持简单的CURD,复杂的SQL还是需要自己实现,但是这已经极大的节省了工作量。

以上,感谢阅读,如果感觉有帮助的话,不妨随手点个赞!

源码

github.com/zhuqianchan…

往期回顾