DQL编程控制

条件查询方式

  • MyBatisPlus将书写复杂的SQL查询条件进行封装,使用编程的形式完成查询条件组合

条件查询,设置条件

@Test
    void testGetAll() {
        //方法一:按条件查询
//        QueryWrapper qw = new QueryWrapper();
//        qw.lt("age", 18); //查询条件位 age小于18的
//        System.out.println(userDao.selectList(qw));
​
//        //方法二:lambda格式按条件查询
//        QueryWrapper<User> qw = new QueryWrapper<User>();
//        qw.lambda().lt(User::getAge, 18); //查询条件位 age小于18的
//        System.out.println(userDao.selectList(qw));
​
        //方法三:lambda格式按条件查询
//        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
//        lqw.lt(User::getAge, 10);
//        System.out.println(userDao.selectList(lqw));
​
        //多条件查询
        LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
        //10岁到30岁
//        lqw.lt(User::getAge, 30).gt(User::getAge, 10);
        //10岁以下,30岁以上
        lqw.lt(User::getAge, 10).or().gt(User::getAge, 30);
​
        System.out.println(userDao.selectList(lqw));
    }

条件查询-null值处理

  • if语句控制条件追加

  • 条件参数控制

LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
​
        lqw.lt(null != uq.getAge2(), User::getAge, uq.getAge2());
        lqw.gt(null != uq.getAge(), User::getAge, uq.getAge());
​
        List<User> userList = userDao.selectList(lqw);
        System.out.println(userList);

查询投影

  • 查询结果包含模型类中部分属性

LambdaQueryWrapper<User> lqw = new LambdaQueryWrapper<User>();
lqw.select(User::getId, User::getName, User::getAge);
System.out.println(userDao.selectList(lqw));
  • 查询结果包含模型类中未定义的属性

QueryWrapper<User> qw = new QueryWrapper<User>();
qm.select("count(*) as count, age");
qm.groupBy("gender");
List<Map<String, Object>> maps = userDao.selectMaps(qm);
System.out.println(maps);

查询条件设定

查询条件

  • 范围匹配(> 、=、between)

  • 模糊匹配(like)

  • 空判定(null)

  • 包含性匹配(in)

  • 分组(group)

  • 排序(order)

  • ……

字段映射与表名映射

问题一:数据库字段名和编码中属性名称不一样

  • 名称:@TableField

  • 类型:属性注解

  • 位置:模型类属性定义上方

  • 作用:设置当前属性对应的数据库表中的字段关系

  • 范例

public class User {
    @TableField(value = "pwd")
    private String password;
}
  • 相关属性

    • value(默认)设置数据库表字段名称

问题二:编码中添加了数据库中未定义的属性

  • 名称:@TableField

  • 类型:属性注解

  • 位置:模型类属性定义上方

  • 作用:设置当前属性对应的数据库表中的字段关系

  • 范例

public class User {
    @TableField(exist = "false")
    private Integer online;
}
  • 相关属性

    • value(默认):设置数据库表字段名称

    • exist:设置属性再数据库表中是否存在,默认为true。此属性无法与value合并使用

问题三:采用默认查询开放了更多字段查看权限

  • 名称:@TableField

  • 类型:属性注解

  • 位置:模型类属性定义上方

  • 作用:设置当前属性对应的数据库表中的字段关系

  • 范例

public class User {
    @TableField(value = "pwd", select = false)
    private String password;
}
  • 相关属性

    • value(默认)设置数据库表字段名称

    • exist:设置属性再数据库表中是否存在,默认为true。此属性无法与value合并使用

    • select:设置属性是否参与查询,此属性与select()映射配置不冲突

问题四:表明与类名开发设计不同步

  • 名称:@TableName

  • 类型:属性注解

  • 位置:模型类属性定义上方

  • 作用:设置当前属性对应的数据库表中的字段关系

  • 范例

@TableName("tbl_user")
public class User {
    private String password;
}
  • 相关属性

    • value(默认)设置数据库表名称

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

igxia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值