【MyBatis-Plus】学习笔记

核心功能

约定大于配置

image-20230802133912287

  • 类名驼峰转下划线作为表名
  • 名为id的字段作为主键
  • 变量名驼峰转下划线作为表的字段名
  • 根据变量类型推断数据库字段类型

常用注解

image-20230802134625842

常见配置

https://baomidou.com/pages/56bac0/#%E5%9F%BA%E6%9C%AC%E9%85%8D%E7%BD%AE

image-20230802135624325

条件构造器

image-20230802140154382

自定义SQL

image-20230802141059680

案例1

image-20230802141219312

@Test
void testCustomSql() {
   
    List<Long> ids = List.of(1L, 2L, 3L);
    int amount = 200;
    // 1.定义条件
    QueryWrapper<User> wrapper = new QueryWrapper<User>()
        .in("id", ids);
    // 2.执行更新
    userMapper.updateBalanceByWrapper(amount,wrapper);
}

UserMapper.java

@Update("update t_user set balance = balance - #{amount} ${ew.customSqlSegment}")
void updateBalanceByWrapper(@Param("amount") int amount, @Param("ew") QueryWrapper<User> wrapper);

案例2

image-20230802142644377

@Test
void testMultiTableQuery() {
   
    List<Long> ids = List.of(1L, 2L, 3L);
    String city = "北京";

    QueryWrapper<User> wrapper = new QueryWrapper<User>()
        .in("u.id", ids)
        .eq("a.city", city);

    List<User> userList =  userMapper.queryUsersByWrapper();
    userList.forEach(System.out::println);
}

UserMapper.java

List<User> queryUsersByWrapper(@Param("ew") QueryWrapper<User> wrapper);

UserMapper.xml

<select id="queryUsersByWrapper" resultType="user">
    select u.*
    from user u
    inner join address a on u.id = a.user_id
    ${ew.customSqlSegment}
</select>

Service接口

image-20230802143720440

image-20230802144213867

批量新增

image-20230802145722107
public User builderUser(int i) {
   
    return User.builder().name("" + i).build();
}

@Test
void testSaveBatch() {
   
    List<User> list = new ArrayList<>(1000);
    long b = System.currentTimeMillis();
    for (int i = 0; i < 100000; i++) {
   
        list.add(builderUser(i));
        if (i % 1000 == 0) {
   
            userService.saveBatch(list);
            list.clear();
        }
    }
}

LambdaQuery

image-20230802150346476

@Test
void testLambdaQuery() {
   
    User user = userService.lambdaQuery()
        .eq(User::getName, "Rose")
        .one();

    List<User> userList = userService.lambdaQuery()
        .like(User::getName, "o")
        .list();

    Long count = userService.lambdaQuery()
        .like(User::getName, "o")
        .count(); 
}

public List<User> queryUsers(String username,Integer status,Long min, Long max) {
   
    return userService.lambdaQuery()
        .like(username != null,User::getName,username)
        .eq(status != null,User::getStatus,status)
        .gt(min != null,User::getBalance,min)
        .lt(max != null,User::getBalance,max)
        .list();
}

LambdaUpdate

image-20230802151643898
public void updateBalance(Long balance, Long id, String username) {
   
    if (id == null && username == null) {
   
        // 不符合条件,至少有一个更新条件
        throw new RuntimeException("更新条件不能为空");
    }
    // update user set balance = ? , status = 2 where id = ? and username = ?
    userService.lambdaUpdate()
        .set(User::getBalace, balance)
        .set(balance == 0, User::getStatus, 2)
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值