Mybatis-plus

使用复杂条件查询需要使用条件构造器

@Autowired
private UserMapper userMapper;

@Test
//查询年龄大于20小于30并且姓名包含a的用户
public void selectList(){
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.like("name","a").between("age",20,30);
    userMapper.selectList(queryWrapper);
}

使用条件构造器使用删除功能

@Test
public void test03(){
    //删除邮箱地址为null的用户信息
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.isNull("email");
    int delete = userMapper.delete(queryWrapper);
    System.out.println(delete);
}

条件查询链式编程条件之间默认是用and连接或者用or()连接

使用条件查询进行删除操作

@Test
    public void test04(){
        //将年龄大于而是并且用户名中包含a或者邮箱为null的用户信息修改

        //1使用条件构造器查询出来要修改的结果
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.gt("age","20")
                .like("name","a")
                .or()
                .isNull("email");
        //将名字设为小明,邮箱设为1326580556@qq.com
        User user = new User();
        user.setName("小明");
        user.setEmail("1326580556@qq.com");
        int result = userMapper.update(user,queryWrapper);
        System.out.println("result"+result);
    }
}

设置条件执行的优先性

用and(lamada表达式)表示条件的优先执行

@Test
UPDATE user SET name=?, email=? WHERE (name LIKE ? AND (age > ? OR email IS NULL))
//条件的优先性
public void test05(){
    //将用户名中包含a并且(年龄大于20或者邮箱为null)的用户信息修改
    //lamada表达式中的条件优先执行
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.like("name","a").and(i->i.gt("age",20).or().isNull("email"));
    User user = new User();
    user.setName("小明");
    user.setEmail("1326580556@qq.com");
     int result = userMapper.update(user,queryWrapper); System.out.println("result"+result);

}

查询用户的部分信息

@Test
public void test06(){
    //查询部分条件
    //SELECT name,age,email FROM user
    //查询用户的用户名年龄和邮箱信息
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.select("name","age","email");
    List<Map<String,Object>> maps = userMapper.selectMaps(queryWrapper);
    maps.forEach(System.out::println);
}

子查询

用inSql("id","select uid from user where uid<=100");

@Test
public void test07(){
    //select * from user where id in(select id from user where id <=100)
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    queryWrapper.inSql("id","select uid from user where uid<=100");
    List<User> list = userMapper.selectList(queryWrapper);
    list.forEach(System.out::println);
}

通过updateWapper来设置条件

@Test
//通过updateWrapper来写条件构造
public void test08(){
    //==>  Preparing: UPDATE user SET name=?,email=? WHERE (name LIKE ? AND (age > ? AND email IS NULL))
    UpdateWrapper<User> updateWrapper = new UpdateWrapper<>();
    updateWrapper.like("name","a").and(i -> i.gt("age",20).isNull("email"));
    updateWrapper.set("name","小黑").set("email","1326580556@qq.com");
    int result = userMapper.update(null, updateWrapper);
    System.out.println("result"+result);
}

条件判断查询

@Test
public void test09(){
    String username = "";
    Integer ageBegin = 20;
    Integer ageEnd = 30;
    QueryWrapper<User> queryWrapper = new QueryWrapper<>();
    if(StringUtils.isNotBlank(username)){
        //isNotBlank表示某个字符串不为空,不为null,不为空白字符串
        queryWrapper.like("name",username);
    }
    if(ageBegin != null){
        queryWrapper.ge("age",ageBegin);
    }
    if(ageEnd != null){
        queryWrapper.le("age",ageEnd);
    }
    List<User> list = userMapper.selectList(queryWrapper);
    list.forEach(System.out::println);
}

条件查询简化版

@Test
public void test10(){
     String username = "a";
     Integer ageBegin = null;
     Integer ageEnd = 30;
     QueryWrapper<User> queryWrapper = new QueryWrapper<>();
     queryWrapper.like(StringUtils.isNotBlank(username),"name",username)
             .ge(ageBegin != null,"age",ageBegin)
             .le(ageEnd!=null,"age",ageEnd);
     List<User> list = userMapper.selectList(queryWrapper);
     list.forEach(System.out::println);
}

lamadaQuerryMapper

对象的使用的是函数式接口

@Test
public void test11(){
    String username = "a";
    Integer ageBegin = null;
    Integer ageEnd = 30;
    LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>();
    queryWrapper.like(StringUtils.isNotBlank(username),User::getName,username)
            .ge(ageBegin !=null,User::getAge,ageBegin)
            .le(ageEnd!=null,User::getAge,ageEnd);
    List<User> list = userMapper.selectList(queryWrapper);
    list.forEach(System.out::println);
}

LambdaUpdateWarpper

@Test

public void test12(){
    //==>  Preparing: UPDATE user SET name=?,email=? WHERE (name LIKE ? AND (age > ? AND email IS NULL))
    LambdaUpdateWrapper<User> updateWrapper = new LambdaUpdateWrapper<>();
    updateWrapper.like(User::getName,"a").and(i -> i.gt(User::getAge,20).isNull(User::getEmail));
    updateWrapper.set(User::getName,"小黑").set(User::getEmail,"1326580556@qq.com");
    int result = userMapper.update(null, updateWrapper);
    System.out.println("result"+result);
}

分页设置

要先配置一个config配置类

@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //添加分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        //添加乐观锁插件
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}

然后在通过page对象传参

@SpringBootTest
public class MybatisPlusPluginTest {
    @Autowired
    private UserMapper userMapper;

    @Test
    //SELECT id,name,age,email FROM user LIMIT ?,?
    public void testPage(){
        Page<User> page = new Page<>(2,3);
        userMapper.selectPage(page,null);
        System.out.println(page);
    }
}

自定义分页语句

现在usermapper接口里设置返回类型为page,并且第一个参数为page

//通过年龄来查询分页信息并分页
Page<User> selectPageVo(@Param("page") Page<User> page,@Param("age")Integer age);

然后在配置usermapepr.xml文件

<select id="selectPageVo" resultType="com.xv.mybatisplus.pojo.User">
     select  id,name,age,email from user where age > #{age}
</select>

在配置文件配置别名就可以在xml文件返回值类型返回值写类名不区分大小写(User)

type-aliases-package: com.xv.mybatisplus.pojo
@Test
public void testPageVo(){
    Page<User> page = new Page<>(1, 3);
    userMapper.selectPageVo(page, 20);
    System.out.println(page.getRecords());
    System.out.println(page.getPages());
    System.out.println(page.getTotal());
    System.out.println(page.hasNext());
    System.out.println(page.hasPrevious());
}

乐观锁

现在实体类添加version字段加上对应的version注解

@Data
public class Product {
    private Long id;
    private String name;
    private Integer price;
    @Version
    private Integer version;
}

然后在配置类配置乐观锁插件

@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //添加分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        //添加乐观锁插件
        interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return interceptor;
    }
}

+

@Test
public void testProduct01(){
    //小李查询商品价格
    Product productLi = productMapper.selectById(1);
    System.out.println(" 小李查询的商品价格是:"+productLi.getPrice());

    //小王才查询的商品价格
    Product productWang = productMapper.selectById(1);

    //小李将商品价格+50
    productLi.setPrice(productLi.getPrice()+50);
    productMapper.updateById(productLi);
    //小王将价格-30
    productWang.setPrice(productWang.getPrice()-30);
    int result = productMapper.updateById(productWang);
    if (result == 0){
        //操作失败,重试
        Product productNew = productMapper.selectById(1);
        productNew.setPrice(productNew.getPrice()-30);
        productMapper.updateById(productNew);

    }

    //老板查询商品价格
    Product productBoss = productMapper.selectById(1);
    System.out.println(" 老版查询的商品价格是:"+productBoss.getPrice());

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值