QBC查询

概念

QBC即Quary By Criteria,Criteria是Criterion的复数,译为规则,准则,在sql语句中相当于查询条件。QBC查询是将查询条件通过Java对象进行模块化封装。

演示

用一个小例子来演示一下,这个例子是查询所有age为18的user,下面是日志打印出来的sql和例子演示:

SELECT id,user_id,user_name,age FROM sys_user WHERE ( age = ? ) 
    public void testQBC(){
    	//先创建一个Example,实例化的参数为想查询的那个实体类,这个地方也就确定了是从哪张表查询
        Example example = new Example(User.class);
        //创建criteria,用criteria来构建查询条件
        Example.Criteria criteria = example.createCriteria();
        //调用andEqualTo方法,前一个参数表示字段名,后一个参数表示条件值
        criteria.andEqualTo("age",18);
        //调用selectByExample方法,即自动调用了criteria
        List<User> users = userMapper.selectByExample(example);
        for (User user : users) {
            System.out.println(user);
        }
    }

其他需要讲明的地方

  1. 实体类:
@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "sys_user")
public class User {

    @KeySql(genId = GenerateUUID.class)
    private String id;

    @Id
    private Integer userId;

    @Column("sys_user_name")
    private String userName;

    private Integer age;
}

在这里面,@Table注解的值就是数据库中的表,@Colum注解把数据库表中的字段名和实体类的成员属性绑定,@Id在用到primaryKey的时候产生作用。

  1. Example的其他属性:
    作用见注释
    @Test
    public void testQbcOthers(){

        Example example = new Example(User.class);

        Example.Criteria criteria = example.createCriteria();
        criteria.andLessThanOrEqualTo("age",18);
		//使用orderBy asc desc
        example.orderBy("userId").asc().orderBy("age").desc();
		//去重
        example.setDistinct(true);
		//设置查询的字段 
        example.selectProperties("userId","userName","age");

        List<User> users = userMapper.selectByExample(example);
        for (User user : users) {
            System.out.println(user);
        }
    }

日志sql:

SELECT distinct user_id , user_name , age FROM sys_user WHERE ( age <= ? ) order by user_id ASC,age DESC 

补充:

  1. Mybatis 使用 ResultMapWithBLOBs 来接收有长字段的查询结果,所以如果数据库有长字段,要用 selectByExampleWithBLOBs 方法查询,没有长字段时,使用 selectByExample 方法即可。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值