目录

Mybatis-Plus学习

1.快速入门

1.1 引入Mybatis-Plus依赖

1.2 继承Mybatis-plus的BaseMapper接口

1.3 测试新增功能

2.常用注解

3.常见配置

4.条件构造器

5.IService接口基本用法

6.开发基础业务接口

6.1 新增用户接口

6.2 根据id删除

6.3 根据id查询

6.4 批量查询

7.开发复杂业务接口


Mybatis-Plus学习

1.快速入门

1.1 引入Mybatis-Plus依赖

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

1.2 继承Mybatis-plus的BaseMapper接口

自定义的Mapper要继承Mybatis-plus的BaseMapper接口,泛型中填写实体类

  
  public interface UserMapper extends BaseMapper<User> {
      
  }

1.3 测试新增功能

  
      @Test
      void testInsert() {
          User user = new User();
          user.setId(5L);
          user.setUsername("Lucy");
          user.setPassword("123");
          user.setPhone("18688990011");
          user.setBalance(200);
          user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");
          user.setCreateTime(LocalDateTime.now());
          user.setUpdateTime(LocalDateTime.now());
          userMapper.insert(user);
      }

新增结果:

2.常用注解

@TableName指定表名

@TableId:指定数据库中表的逐渐

@TableField: 指定表中普通字段与数据库中字段的对应关系

以User类举例:

  @Data
  @TableName("user")
  public class User {
      
      // 标记id为主键,类型为自增长
      @TableId(value = "id", type = IdType.AUTO)
      private Long id;
  ​
      @TableField("username")
      private String username;
  ​
      @TableField("create_time")
      private LocalDateTime createTime;
      
      // 标记该字段在数据库对应表中不存在
      @TableField(exist = false)
      private String address;
  }

3.常见配置

扫描包配置:

  
  mybatis-plus:
    type-aliases-package: com.test.mp.domain.po

mapper文件扫描配置:

  
  mybatis-plus:
    mapper-locations: classpath*:mapper/**/*.xml

id配置:

  
  mybatis-plus:
    global-config:
      db-config:
        id-type: auto

4.条件构造器

查询测试:

  
      // 查询名字中带o的,存款大于1000的人的id,username,info,balance字段
      @Test
      void testWrapper(){
          // 构建查询条件
          QueryWrapper<User> wrapper = new QueryWrapper<>();
          wrapper.select("id","username","info","balance");
          wrapper.like("username","o");
          wrapper.ge("balance",1000);
          List<User> list = userMapper.selectList(wrapper);
          System.out.println(list);
      }

更新测试:

  
      // 更新用户名为jack的余额为2000
      @Test
      void testWrapper(){
          User user = new User();
          user.setBalance(2000);
          QueryWrapper<User> wrapper = new QueryWrapper<>();
          wrapper.eq("username","jack");
          userMapper.update(user,wrapper);
      }

更新测试2:

  
      // 更新id为1,2,4的用户的余额,扣除200
      @Test
      void testWrapper(){
          List<Long> ids = new ArrayList<>(Arrays.asList(1L, 2L, 3L));
          UpdateWrapper<User> wrapper = new UpdateWrapper<>();
          wrapper.setSql("balance = balance - 200").in("id",ids);
          userMapper.update(null,wrapper);
      }

LambdaWrapper:

  
      @Test
      void testLambdaWrapper(){
          LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
          wrapper.select(User::getId,User::getUsername,User::getInfo);
          wrapper.like(User::getUsername,"o");
          wrapper.ge(User::getBalance,1000);
          List<User> list = userMapper.selectList(wrapper);
          System.out.println(list);
      }

5.IService接口基本用法

自定义Service接口需要继承Mybatis-plus的IService接口

同时实现类要去继承Mybatis-Plus的实现类

自定义的接口:

  
  public interface IUserService extends IService<User> {
    
  }

接口的实现类:

  
  @Service
  public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
    
  }

测试:

  
      @Autowired
      private IUserService userService;
  ​
      @Test
      void testService(){
          // 新增:
          User user = new User();
          user.setUsername("llldasdasdsad");
          user.setPassword("123");
          user.setPhone("18688990011");
          user.setBalance(200);
          user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");
          user.setCreateTime(LocalDateTime.now());
          user.setUpdateTime(LocalDateTime.now());
          userService.save(user);
      }

查询:

  
      @Test
      void testService(){
          User byId = userService.getById(2);
          System.out.println(byId);
      }

6.开发基础业务接口

6.1 新增用户接口

post请求,路径为/users

  
  @RestController
  @RequestMapping("/users")
  public class UserController {
      
      @Autowired
      private IUserService userService;
      
      // 新增接口
      @PostMapping
      public void addUser(@RequestBody User user){
          userService.save(user);
      }
  }

6.2 根据id删除

  
      @DeleteMapping("{id}")
      public void deleteUserById(@PathVariable("id") Long id){
          userService.removeById(id);
      }

6.3 根据id查询

  
      @GetMapping("{id}")
      public User GetUserById(@PathVariable("id") Long id){
          User byId = userService.getById(id);
          return byId;
      }

6.4 批量查询

  
      @GetMapping
      public List<User> GetUserByIds(@RequestParam("ids") List<Long> ids){
          List<User> list = userService.listByIds(ids);
          return list;
      }

7.开发复杂业务接口

根据用户指定id扣除金额

Controller中:

  
      @PutMapping
      public void subAmount(@PathVariable("id") Long id,@PathVariable("money") int money){
          userService.deductBalance(id,money);
      }

业务接口中:

  
  public interface IUserService extends IService<User> {
      void deductBalance(Long id, int money);
  }

实现类中:

  
      @Override
      public void deductBalance(Long id, int money) {
          // 查询用户 , 直接调service自己的方法
          User user = getById(id);
          if(user == null || user.getStatus() == 2){
              return ;
          }
          // 校验状态
          if(user.getBalance() < money){
              return ;
          }
          // 扣减余额
          baseMapper.deductBalance(id,money);
      }

UserMapper中:

  
      @Update("update user set balance = balance - #{money} where id = #{id}")
      void deductBalance(@Param("id") Long id, @Param("money") int money);

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐