用 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