01-MyBatisPlus

发布于:2025-08-11 ⋅ 阅读:(19) ⋅ 点赞:(0)

简介

在这里插入图片描述

快速入门

案例

在这里插入图片描述

一、原工程启动

1.创建microService空工程147
在这里插入图片描述
2.new module from existing
在这里插入图片描述
3.创建mp库表
在这里插入图片描述

二、升级MabtisPlus

在这里插入图片描述
在这里插入图片描述

常见注解

在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

常见配置

在这里插入图片描述
在这里插入图片描述

核心功能

条件构造器

在这里插入图片描述
在这里插入图片描述

案例QueryWrapper

在这里插入图片描述

@SpringBootTest
public class WrapperTest {

    @Autowired
    private UserMapper userMapper;

    /**
     * 查询名字带o的,存款大于1000的
     */
    @Test
    public void testqueryWrapper() {
        // 查询
        QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();

        // 查询列
        userQueryWrapper.select("id", "username",  "info", "balance" );

        // 查询条件
        // 名字带 o
        userQueryWrapper.like("username", "o");
        // 存款大于1000
        userQueryWrapper.ge("balance", 1000);

        List<User> users = userMapper.selectList(userQueryWrapper);
        users.forEach(System.out::println);

    }

    /**
     * 更新名字为“jack"的余额为2000
     */
    @Test
    public void testUpdateWrapper() {
        User user = new User();
        user.setBalance(2000);

        QueryWrapper<User> userQueryWrapper = new QueryWrapper<>();
        useQueryeWrapper.eq("username", "Jack");
        userMapper.update(user, userQueryWrapper);
    }
}

案例UpdateWrapper

在这里插入图片描述

/**
 * id为 1,2,4的用户余额,扣200
 */
@Test
public void testUpdateWrapper() {

    UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();

    // 自定义更新语句
    updateWrapper.setSql("balance = balance-200");
    updateWrapper.in("id", 1,2,4);
    userMapper.update(null, updateWrapper);
}

案例LambdaQueryWrapper

/**
 * 查询名字带o的,存款大于1000的
 */
@Test
public void testLambdaWrapper() {
    // 查询
    LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();

    // 查询列
    lambdaQueryWrapper.select(User::getId, User::getUsername,  User::getInfo, User::getBalance);

    // 查询条件
    // 名字带 o
    lambdaQueryWrapper.like(User::getUsername, "o");
    // 存款大于1000
    lambdaQueryWrapper.ge(User::getBalance, 1000);

    List<User> users = userMapper.selectList(lambdaQueryWrapper);
    users.forEach(System.out::println);

}

自定义SQL

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

IService接口

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

案例:基于Restful实现下面接口

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

验证Knife4j配置

在这里插入图片描述

<!-- 引入 knife4j 文档-->
<dependency>
    <groupId>com.github.xiaoymin</groupId>
    <artifactId>knife4j-openapi2-spring-boot-starter</artifactId>
   <version>4.3.0</version>
</dependency>


Knife4j:
  enable: true # 开启
  openapi:
    title: 用户接口管理
    description: 用户接口管理文档
    version: 1.0.0
    contact: djzhou
    group:
      default:
        group-name: default
        api-rule: package
        api-rule-resources:
          - com.itheima.mp.controller

IService的Lambda应用

IService的LambdaQuery

在这里插入图片描述
方式一

    @ApiOperation("根据条件查询用户列表")
    @PostMapping("/list")
    public List<UserVO> queryList(@RequestBody UserQuery query){
        String userName = query.getName();
        Integer status = query.getStatus();
        Integer minBalance = query.getMinBalance();
        Integer maxBalance = query.getMaxBalance();

        QueryWrapper<User> wrapper = new QueryWrapper<User>();
//        if(StringUtils.isNotBlank(userName)) {
//            wrapper.lambda().like(User::getUsername, userName);
//        }
        // 条件成立,才会设置当前条件到where中
        wrapper.lambda().like(StringUtils.isNotBlank(userName), User::getUsername, userName)
                .eq(User::getStatus, status)
                .ge(ObjectUtils.isNotEmpty(minBalance), User::getBalance, minBalance)
                .le(ObjectUtils.isNotEmpty(maxBalance), User::getBalance, maxBalance);

        List<User> list = userService.list(wrapper);
        
        return BeanUtil.copyToList(list, UserVO.class);
    }

方式二

List<User> list = userService.lambdaQuery()
        .like(StringUtils.isNotBlank(userName), User::getUsername, userName)
        .eq(User::getStatus, status)
        .ge(ObjectUtils.isNotEmpty(minBalance), User::getBalance, minBalance)
        .le(ObjectUtils.isNotEmpty(maxBalance), User::getBalance, maxBalance)
        .list();

IService的LambdaUpdate

在这里插入图片描述

    public void deductBalanceById(Long id, Integer amount) {
        User user = this.getById(id);
        if(user == null || user.getStatus() == UserStatusEnum.FREEZE) {
            throw new RuntimeException("用户不存在或者用户已冻结");
        }

        if (user.getBalance() < amount) {
            throw new RuntimeException("用户余额不足");
        }

        // 扣减
        // 获取扣减后的余额
        int remainBalance = user.getBalance() - amount;

        // update user set balance = ? where id = ?
        // update user set balance = ?, status = ? where id = ?
        this.lambdaUpdate()
                .set(User::getBalance, remainBalance)
                // 余额为0时候,状态改为2
                .set(remainBalance == 0, User::getStatus, UserStatusEnum.FREEZE)
                .eq(User::getId, id)
                .update();

//        xml 方式
//        userMapper.deductBalanceById(amount, id);
    }

批量插入数据的优化

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

拓展功能

代码生成

在这里插入图片描述

IDEA插件

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

代码方式

在这里插入图片描述
在这里插入图片描述

小结

在这里插入图片描述

静态工具类Db

在这里插入图片描述

Dbtest

@SpringBootTest
public class DbTest {
    // 1.根据id查询用户
    @Test
    public void testGetById() {
        User user = Db.getById(5L, User.class);
        System.out.println(user);
    }

    // 2.查询名字包含o的用户,余额大于等于1000用户
    @Test
    public void testGetByMap() {
        // 创建条件
        LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.like(User::getUsername, "o")
            .ge(User::getBalance, 1000);

        // 查询
        List<User> result =  Db.list(lambdaQueryWrapper);
        System.out.println(result);
    }

    // 3.更新用户Rose余额为@SpringBootTest
public class DbTest {
    // 1.根据id查询用户
    @Test
    public void testGetById() {
        User user = Db.getById(5L, User.class);
        System.out.println(user);
    }

    // 2.查询名字包含o的用户,余额大于等于1000用户
    @Test
    public void testGetByMap() {
        // 查询
        List<User> result =  Db.lambdaQuery(User.class)
                .like(User::getUsername, "o")
                .ge(User::getBalance, 1000)
                .list();
        System.out.println(result);
    }

    // 3.更新用户Rose余额为800
    @Test
    public void testUpdate() {
        Db.lambdaUpdate(User.class)
                .eq(User::getUsername, "Rose")
                .set(User::getBalance, 800)
                .update();
    }

}

静态工具查询

在这里插入图片描述
在这里插入图片描述
单个id查询
在这里插入图片描述
批量查询
在这里插入图片描述

枚举处理器

案例

在这里插入图片描述

步骤

在这里插入图片描述

小结

在这里插入图片描述

JSON处理器

案例

在这里插入图片描述

步骤

在这里插入图片描述

分页插件

插件功能

在这里插入图片描述

分页插件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

// 测试分页查询
@Test
public void testPageQuery() {
    // 1. 创建分页对象
    Page<User> page = new Page<>(1, 5);
    // 2. 执行分页查询
    Page<User> userPage = userService.page(page);
    // 3. 获取分页结果
    List<User> records = userPage.getRecords();
    records.forEach(System.out::println);
    System.out.println(userPage.getCurrent());
    System.out.println(userPage.getPages());
    System.out.println(userPage.getTotal());
}

逻辑删除

在这里插入图片描述

@TableLogic注解:

在这里插入图片描述

插入一条数据

@Test public void testInsert() {
 User user = new User(); user.setName("字母哥");
 user.setAge(18); 
 int row = userMapper.insert(user);
 }

插入数据的时候,不需要为deleted字段赋值

删除一条记录:

userMapper.deleteById(1286797255805796354L);

查看数据库可以发现这条数据仍然存在,只不过逻辑删除字段值被设置为1:

查询记录

userMapper.selectList(null);

会自动添加过滤条件WHERE deleted=0

全局配置参数

#逻辑已删除值(默认为 1) #逻辑未删除值(默认为 0)
mybatis-plus: 
	global-config: 
			db-config: 
				logic-delete-value: 1 
				logic-not-delete-value: 0

网站公告

今日签到

点亮在社区的每一天
去签到