MybatisPlus

1.条件构造器

Wrapper

Screenshot 2025-10-03 194254-aXUS.png

构造QueryWrapper进行查询

@Test
void testQueryWrapper() {
    // 查询条件
    QueryWrapper<User> wrapper = new QueryWrapper<User>()
            .select("id", "username", "info", "balance")
            .like("username", "o")
            .ge("balance", 1000);
    // 查询
    List<User> users = userMapper.selectList(wrapper);
    users.forEach(System.out::println);
}

构造QueryWrapper进行更新

@Test
void testUpdateQueryWrapper(){
    // 更新数据
    User user = new User();
    user.setBalance(2000);
    // 查询条件
    QueryWrapper<User> wrapper = new QueryWrapper<User>().eq("username", "jack");
    // 更新
    userMapper.update(user,wrapper);
}

构造UpdateWrapper进行更新

@Test
void testUpdateWrapper(){
    List<Long> ids = List.of(1L, 2L,  4L);
    UpdateWrapper<User> wrapper = new UpdateWrapper<User>()
            .setSql("balance=balance-200")
            .in("id", ids);
    userMapper.update(null,wrapper);
}

LambdaWrapper防止硬编码

@Test
void testLambdaQueryWrapper() {
    // 查询条件
    LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>()
            .select(User::getId, User::getUsername, User::getInfo, User::getBalance)
            .like(User::getUsername, "o")
            .ge(User::getBalance, 1000);
    // 查询
    List<User> users = userMapper.selectList(wrapper);
    users.forEach(System.out::println);
}

2.自定义SQL

SQL语句where条件之外的东西,难实现时使用自定义sql

Screenshot 2025-10-10 121315.png

3.service接口(mpservice)

不使用mapper ,直接调用service的方法实现增删改查

* 继承 IService

Screenshot 2025-10-10 201236.png

接口需要继承 Iservice 实现类(impl)继承 serviceImpl

方法

增加

  • save
@Test
    void testSave(){
        User user = new User();
        //user.setId();
        user.setUsername("LiLei");
        user.setPassword("1231");
        user.setPhone("186889900112");
        user.setBalance(2001);
        user.setInfo("{\"age\": 24, \"intro\": \"英文老师\", \"gender\": \"female\"}");
        user.setCreateTime(LocalDateTime.now());
        user.setUpdateTime(LocalDateTime.now());
  
        userService.save(user);
    }

查询

  • list
// 根据id查多条数据
@Test
    void testQuery(){
        List<User> users = userService.listByIds(List.of(1L, 2L, 3L, 4L));
        users.forEach(System.out::println);
    }

简单增删改查,可以直接在controller中写

    private final IUserService userService;

    @ApiOperation("新增用户")
    @PostMapping
    public void saveUser(@RequestBody UserFormDTO userDTO){
        User user = BeanUtil.copyProperties(userDTO, User.class);
        userService.save(user);
    }
    @ApiOperation("删除用户")
    @DeleteMapping("/{id}")
    public void DeleteUserById(@ApiParam("用户id") @PathVariable("id") Long id){
        userService.removeById(id);
    }
    @ApiOperation("id查询用户")
    @GetMapping("/{id}")
    public UserVO findUserById(@ApiParam("用户id") @PathVariable("id") Long id){
        User user = userService.getById(id);
        return BeanUtil.copyProperties(user, UserVO.class);
    }
    @ApiOperation("id批量查询")
    @GetMapping
    public List<UserVO> findUsersByIds(@ApiParam("用户id列表") @RequestParam("ids") List<Long> ids){
        List<User> users = userService.listByIds(ids);

        return  BeanUtil.copyToList(users, UserVO.class);
    }

复杂的业务需要自定义service方法

Iservice 的 lambda

不需要写wrapper , 适合复杂条件查询

  • like为模糊查询
  • eq 判断
  • gt 大于
  • lt 小于
  • ge 大于等于
  • le 小于等于
  • ne 不等于
  • ····
、    // controller
    @ApiOperation("根据复杂条件查询用户")
    @PutMapping("/list")
    public List<UserVO> queryUsers(UserQuery query){
        List<User> users = userService.queryUsres(query.getName(), query.getStatus(), query.getMinBalance(), query.getMaxBalance());
        return BeanUtil.copyToList(users, UserVO.class);
    }   
    //service
    @Override
    public List<User> queryUsres(String name, Integer status, Integer minBalance, Integer maxBalance) {
        return lambdaQuery()
                .like(name != null, User::getUsername, name)
                .eq(status != null, User::getStatus, status)
                .gt(minBalance != null, User::getBalance, minBalance)
                .lt(maxBalance != null, User::getBalance, maxBalance)
                .list();
    }

Screenshot 2025-10-10 214305.png

Iservice批处理

MySQL的客户端连接参数中有这样的一个参数:rewriteBatchedStatements。顾名思义,就是重写批处理的 statement语句

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mp?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
    driver-class-name: com.mysql.cj.jdbc.Driver
    username: root
    password: MySQL123

主要功能更新完毕

下面还有扩展功能

  • 代码生成
  • DB静态工具
  • 逻辑删除
  • 枚举处理器
  • json处理器
  • 分页插件

可以自行去了解

迷茫java练习生