(四): ORM Bee分页、查询部分字段原来如此简单

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

1. 分页原来如此简单

1.1 单表查询的分页

SuidRich接口提供方法:

public List select(T entity,intstart,intsize);

最终语句会转化为原生的分页语句,执行效率更高。

具体实例(DB以mysql数据库为例).

  public static void main(String[] args) {
    SuidRich suidRich=BeeFactory.getHoneyFactory().getSuidRich();
    
    Orders orders1 = new Orders();
    List<Orders> list1 = suidRich.select(orders1,0,2); //分页,查询前两条记录
//    List<Orders> list1 = suidRich.select(orders1,"id,userid,name",0,2); //分页,查询前两条记录且只查询部分字段
    for (int i = 0; i < list1.size(); i++) {
      Logger.info(list1.get(i).toString());
    }
  }
2020-05-04 11:35:06 INFO [Bee]select(entity,start,size) SQL:

selectid,userid,name,total,createtime,remark,sequence,abc,updatetime from orders limit 0,2

2020-05-04 11:35:06 INFOOrders[id=100001,userid=bee,name=Bee(ORM Framework),total=100.00,createtime=null,remark=new2,sequence=,abc=null,updatetime=2020-05-0408:50:46.0]
2020-05-04 11:35:06 INFOOrders[id=100002,userid=bee,name=null,total=100.00,createtime=null,remark=new2,sequence=,abc=null,updatetime=2020-04-2222:00:12.0]

1.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-0211:29:28.0,remark=test,sequence=12345603,abc=test3,updatetime=2020-03-02 16:34:19.0]

1.3 自定义语句的分页

在PreparedSql接口中,提供的以下方法,都有分页功能,最终都是转化为原生的SQL分页语句。Bee的分页功能,使用简单,分页查询性能更高。

   public<T> List<T> select(String sql,T returnType,ObjectpreValues[],intstart,intsize);
   public <T> List<T> select(String sqlStr,T entity,Map<String,Object> parameterMap,intstart,intsize);
   public List<String[]>select(String sql,ObjectpreValues[],intstart,intsize);
   public List<String[]>select(String sqlStr,Map<String,Object>map,intstart,intsize);
   public <T> List<T>selectSomeField(String sql,T returnType,Object preValues[],intstart,intsize);
   public <T> List<T>selectSomeField(String sqlStr,T entity,Map<String,Object>parameterMap,intstart,intsize);
   public StringselectJson(String sql,ObjectpreValues[],intstart,intsize);
   public StringselectJson(String sqlStr,Map<String,Object>map,intstart,intsize);

2. 只查询需要的字段,不查多余字段

只查询需要的字段,不查多余字段,Bee提供了简单易用的API。

2.1 利用SuidRich接口查询部分字段

SuidRich接口中,提供了以下三个方法,可以通过参数selectFields指定需要查询的字段(多个用逗号隔开)。

public <T>List<T> select(T entity,String selectFields);
public <T> List<T>select(T entity,String selectFields,intstart,intsize);
public <T>List<String[]> selectString(T entity,String selectFields);

使用实例:

//    List<Orders> list1 = suidRich.select(orders1,0,2); //分页,查询前两条记录
    
    //分页,查询前两条记录且只查询部分字段
    List<Orders> list1 = suidRich.select(orders1,"id,userid,name",0,2); 

得到的sql语句:

select id, userid, name from orders limit 0,2

可以看出,只返回了我们需要的字段。需要注意的是,用一个Javabean模型接收数据时,没返回的数据是null的。用List<String[]> selectString(T entity,String selectFields)则不会有这种情况,它只会将返回的字段转成字符串。

2.2 利用PreparedSql接口查询部分字段

在PreparedSql接口中,提供的以下方法,都有分页功能,且可以只查询部分字段。

public <T>List<T> selectSomeField(String sql,T returnType,Object preValues[],intstart,int size);
public <T> List<T> selectSomeField(String sqlStr,Tentity,Map<String,Object> paramete

版权声明:本文为abckingaa原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。