在 【MyBatis使用和不足思考】 这一篇文章中, 指出了 MyBatis
使用的不足。其中一点就是每个实体都需要写增删改查SQL,感觉重复劳动。
如若对 MyBatis
的使用还不是很熟悉的,可以先查看上面的文章。
本文将会通过使用 MyBatis-Plus
解决这个问题, MyBatis-Plus
是 MyBatis
的增强工具, 在MyBatis的基础上只做增强不做改变,简化开发、提高效率。
<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; } 复制代码
至此,准备工作都做完了,可以在控制层中调用接口。
@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还是需要自己实现,但是这已经极大的节省了工作量。
以上,感谢阅读,如果感觉有帮助的话,不妨随手点个赞!