前言
在【MyBatis使用和不足思考】这一篇文章中,
指出了MyBatis
使用的不足。其中一点就是每个实体都需要写增删改查SQL,感觉重复劳动。
如若对MyBatis
的使用还不是很熟悉的,可以先查看上面的文章。
本文将会通过使用MyBatis-Plus
解决这个问题,MyBatis-Plus
是MyBatis
的增强工具,
在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还是需要自己实现,但是这已经极大的节省了工作量。
以上,感谢阅读,如果感觉有帮助的话,不妨随手点个赞!