ToB企服应用市场:ToB评测及商务社交产业平台

标题: MyBatisPlus学习笔记 [打印本页]

作者: 用户国营    时间: 11 小时前
标题: MyBatisPlus学习笔记
To be continue…

  
先容

MyBatisPlus只做增强不做改变,引入它不会对现有工程产生影响。只需简单设置,即可快速举行单表CRUD操作,从而节省大量时间。
官方文档:MyBatisPlus
快速入门

入门案例

  1. <dependency>
  2.     <groupId>com.baomidou</groupId>
  3.     <artifactId>mybatis-plus-boot-starter</artifactId>
  4.     <version>3.5.3.1</version>
  5. </dependency>
复制代码
  1. public interface UserMapper extends BaseMapper<User> {
  2. }
复制代码
BaseMapper接口中定义了根本的单表增删改查方法
常用注解

MyBatisPlus通过扫描实体类,并基于反射获取实体类信息作为数据库表信息。
实体类与数据库表的映射约定为:

若实体类不符合约定的命名,需要利用注解举行设置,常用的注解有:

@TableId主键范例 idType枚举范例:

利用@TableField的常见场景:

常用设置

在application.yaml中根据需要添加设置:
  1. mybatis-plus:
  2.   type-aliases-package: com.itheima.mp.domain.po
  3.   global-config:
  4.     db-config:
  5.       id-type: auto
复制代码
焦点功能

条件构造器

QueryWrapper和LambdaQueryWrapper通常用于构建select、delete、update的where条件部分
UpdateWrapper和LambdaUpdateWrapper通常只有在set语句比力特殊才利用
尽量利用LambdaQueryWrapper和LambdaUpdateWrapper,避免硬编码
基于QueryWrapper的查询
  1. @Test
  2. // 查询出名字带o的,存款大于1000元的人的id, username, info, balance
  3. void testQueryWrapper() {
  4.     // 构建查询条件
  5.     QueryWrapper<User> wrapper = new QueryWrapper<User>()
  6.             .select("id", "username", "info", "balance")
  7.             .like("username", "o")
  8.             .ge("balance", 1000);
  9.     // 查询
  10.     List<User> users = userMapper.selectList(wrapper);
  11.     users.forEach(System.out::println);
  12. }
复制代码
  1. @Test
  2. // 更新用户名为jack的用户的余额为2000
  3. void testUpdateByQueryWrapper() {
  4.     // 要更新的数据
  5.     User user = new User();
  6.     user.setBalance(2000);
  7.     // 更新的条件
  8.     QueryWrapper<User> wrapper = new QueryWrapper<User>()
  9.             .eq("username", "Jack");
  10.     // 执行更新
  11.     userMapper.update(user, wrapper);
  12. }
复制代码
基于UpdateWrapper的更新
  1. @Test
  2. // 更新id为1, 2, 4的用户的余额扣200
  3. void testUpdateWrapper() {
  4.      List<Long> ids = List.of(1L, 2L, 4L);
  5.      UpdateWrapper<User> wrapper = new UpdateWrapper<User>()
  6.              .setSql("balance = balance - 200")
  7.              .in("id", ids);
  8.      userMapper.update(null, wrapper);
  9. }
复制代码
基于LambdaQueryWrapper的查询
  1. @Test
  2. void testLambdaQueryWrapper() {
  3.     LambdaQueryWrapper<User> wrapper = new QueryWrapper<User>()
  4.             .lambda()
  5.             .select(User::getId, User::getUsername, User::getInfo, User::getBalance)
  6.             .like(User::getUsername, "o")
  7.             .ge(User::getBalance, 1000);
  8.     List<User> users = userMapper.selectList(wrapper);
  9.     users.forEach(System.out::println);
  10. }
复制代码
自定义SQL

利用MyBatisPlus的Wrapper来构建复杂的where条件,然后自己定义SQL语句中剩余的部分
  1. @Test
  2. // 将id在指定范围的用户(例如1、2、4)的余额扣减指定值
  3. void testCustomSqlUpdate() {
  4.     List<Long> ids = List.of(1L, 2L, 4L);
  5.     int amount = 200;
  6.     QueryWrapper<User> wrapper = new QueryWrapper<User>()
  7.             .in("id", ids);
  8.     userMapper.updateBalanceByIds(wrapper, amount);
  9. }
复制代码
  1. void updateBalanceByIds(@Param(Constants.WRAPPER) QueryWrapper<User> wrapper, @Param("amount") int amount);
复制代码
  1.   <update id="updateBalanceByIds">
  2.       update tb_user
  3.       set balance = balance - #{amount} ${ew.customSqlSegment}
  4.   </update>
复制代码
Service接口

  1. @Service
  2. public interface IUserService extends IService<User> {
  3. }
复制代码
  1. @Service
  2. public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
  3. }
复制代码
  1. @Api(tags = "用户管理接口")
  2. @RequestMapping("/users")
  3. @RestController
  4. @RequiredArgsConstructor
  5. public class UserController {
  6.     @Qualifier("IUserService")
  7.     private final IUserService userService;
  8.     @ApiOperation("新增用户接口")
  9.     @PostMapping
  10.     public void saveUser(@RequestBody UserFormDTO userDTO) {
  11.         // 把DTO拷贝到PO
  12.         User user = BeanUtil.copyProperties(userDTO, User.class);
  13.         // 新增
  14.         userService.save(user);
  15.     }
  16.     @ApiOperation("删除用户接口")
  17.     @DeleteMapping("{id}")
  18.     public void deleteUserById(@ApiParam("用户id") @PathVariable("id") Long id) {
  19.         userService.removeById(id);
  20.     }
  21.     @ApiOperation("根据id查询用户接口")
  22.     @GetMapping("{id}")
  23.     public UserVO queryUserById(@ApiParam("用户id") @PathVariable("id") Long id) {
  24.         User user = userService.getById(id);
  25.         return BeanUtil.copyProperties(user, UserVO.class);
  26.     }
  27.     @ApiOperation("根据id批量查询用户接口")
  28.     @GetMapping
  29.     public List<UserVO> queryUserById(@ApiParam("用户id集合") @RequestParam("id")List<Long> ids) {
  30.         List<User> users = userService.listByIds(ids);
  31.         return BeanUtil.copyToList(users, UserVO.class);
  32.     }
  33. }
复制代码
  1.     @ApiOperation("扣减用户余额接口")
  2.     @PutMapping("/{id}/deduction/{money}")
  3.     public void deductMoneyById(@ApiParam("用户id") @PathVariable("id") Long id,
  4.                                 @ApiParam("扣减的金额") @PathVariable("money") Integer money) {
  5.         userService.deductMoneyById(id, money);
  6.     }
复制代码
service层
  1. @Service
  2. public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
  3.     @Override
  4.     public void deductMoneyById(Long id, Integer money) {
  5.         User user = getById(id);
  6.         if (user == null || user.getStatus() == 2) {
  7.             throw new RuntimeException("用户状态异常!");
  8.         }
  9.         if (user.getBalance() < money) {
  10.             throw new RuntimeException("用户余额不足!");
  11.         }
  12.         baseMapper.deductMoneyById(id, money);
  13.     }
  14. }
复制代码
mapper层
  1. @Update("update tb_user set balance = balance - #{money} where id = #{id}")
  2. void deductMoneyById(@Param("id") Long id, @Param("money") Integer money);
复制代码
启动项目,打开swagger页面调试接口
http://localhost:8080/doc.html


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4