Skip to content

5、复杂查询(面向对象方式)

Bee edited this page Jun 30, 2020 · 1 revision

用 Bee+SpringBoot+Spring Cloud开发微服务,开发效率更高!

Bee简单易用:单表操作、多表关联操作,可以不用写sql,极少语句就可以完成SQL操作;10分钟即可学会使用。 Bee功能强大:复杂查询也支持向对象方式,分页查询性能更高,一级缓存即可支持个性化优化。高级需求,还可以方便自定义SQL语句。

1. 为什么需要复杂查询

Suid接口的Select,Update,Insert,Delete方法,默认情况只能处理字段为 = 或 is null 的情况。那模糊查询、范围查询等复杂的场景呢?

Bee支持范围查询;支持同时使用between范围查询、not between、like 模糊查询、in、>、>=、<、<=、分组、having过滤、排序、分页等复杂查询。常用的SQL操作符定义在枚举类Op(OperationType)中。

这些方法封装在Condition接口里。利用这个接口可以写些复杂的查询,满足特殊的要求。

对于更新的情况,Condition接口还提供了setAdd,setMultiply方法,满足这种变更字段值的要求,如某种商品的价格比原来价格提高2元,某种商品提价5%。

setAdd("price","2.0")--> price=price+2.0

setMultiply("price","1.05")--> price=price*1.05

V1.6 SuidRich增加面向对象方式复杂查询支持. SuidRich接口增加方法:

public <T> List<T> select(T entity,IncludeType includeType,Condition condition);
public <T> String selectJson(T entity,IncludeType includeType,Condition condition)

V1.7.2增加:

public <T> int updateBy(T entity,String whereFields,Condition condition);
public <T> int update(T entity,String updateFields,Condition condition);

Suid接口增加方法:

public <T> List<T> select(T entity,Condition condition);
public <T> int delete(T entity,Condition condition);

另外多表查询也支持利用Condition构造复杂的查询条件。这个会在以后的文章里讲解。

2.复杂查询具体使用例子

Suid suid = BeeFactory.getHoneyFactory().getSuid();
    Orders orders = new Orders();

    orders.setName("Bee(ORM Framework)"); //等于的条件,会默认转换
    orders.setTotal(new BigDecimal("100"));  //不会再处理.因为between已有用

     Condition condition=new ConditionImpl();
     condition
     .op("userid", Op.like, "bee%") //模糊查询
     .between("total", 90, 100)     //total字段的范围查询
     .between("createtime","2020-03-01","2020-03-03")
     .orderBy("userid",OrderType.ASC) //排序
     .start(0).size(10)              //分页
     ;
     
    List<Orders> list2 = suid.select(orders, condition);
    for (int i = 0; i < list2.size(); i++) {
      Logger.info(list2.get(i).toString());
    }
[Bee] select SQL:

selectid,userid,name,total,createtime,remark,sequence,abc,updatetime from orderswhere name=? and userid like ? and total between ? and ? and createtime between? and ? order by userid asc limit 0,10   [values]: Bee(ORMFramework),bee%,90,100,2020-03-01,2020-03-03

Orders[id=100001,userid=bee,name=Bee(ORMFramework),total=95.01,createtime=2020-03-0211:29:28.0,remark=test,sequence=12345601,abc=test1,updatetime=2020-03-0216:34:19.0]
Orders[id=100002,userid=bee,name=Bee(ORMFramework),total=96.01,createtime=2020-03-0211:29:28.0,remark=test,sequence=12345602,abc=test2,updatetime=2020-03-0216:34:19.0]
Orders[id=100003,userid=bee,name=Bee(ORMFramework),total=97.01,createtime=2020-03-0