bboss持久层分页接口比较有特色,提供了三种Style的分页接口:
第一种Style 根据sql语句直接分页,这种风格是bboss 3.6.0及之前版本一直沿用的接口
第二种Style 根据sql语句和外部传入的总记录数进行分页,这是bboss 3.6.1及之后版本提供的接口
第三种Style 根据sql语句和外部传入的总记录数sql语句进行分页,这是bboss 3.6.1及之后版本提供的接口
我们根据查询参数的传入方式,分别下面举例介绍三种Style。
1.准备工作-编写一个sql语句配置文件,用来演示三种Style
queryMaterialList为分页sql
queryCountMaterialList为查总记录数sql
<?xml version="1.0" encoding="UTF-8"?>
<properties>
<property name="queryMaterialList">
<![CDATA[
select * from td_app_bom where id=#[id]
]]>
</property>
<property name="queryCountMaterialList">
<![CDATA[
select count(1) from td_app_bom where id=#[id]
]]>
</property>
<property name="queryMaterialListbindParam">
<![CDATA[
select * from td_app_bom where id=?
]]>
</property>
<property name="queryCountMaterialListbindParam">
<![CDATA[
select count(1) from td_app_bom where id=?
]]>
</property>
</properties>
2.分页查询方法示例代码
public class ApplyService {
private com.frameworkset.common.poolman.ConfigSQLExecutor executor = new ConfigSQLExecutor("com/frameworkset/sqlexecutor/purchaseApply.xml");
/*******************************以bean方式传递查询条件开始*******************************/
public ListInfo queryMaterailListInfoFirstStyleBean(int offset, int pagesize ,PurchaseApplyCondition condition) throws Exception {
//执行分页查询,queryMaterialList对应分页查询语句,
//根据sql语句在分页方法内部执行总记录数查询操作,这种风格使用简单,效率相对较低
//condition参数保存了查询条件
return executor.queryListInfoBean(HashMap.class, "queryMaterialList", offset, pagesize,condition);
}
public ListInfo queryMaterailListInfoSecondStyleBean(int offset, int pagesize ,PurchaseApplyCondition condition) throws Exception {
//执行总记录查询并存入totalSize变量中,queryCountMaterialList对应一个优化后的总记录查询语句
//condition参数保存了查询条件
long totalSize = executor.queryObjectBean(long.class, "queryCountMaterialList", condition);
//执行总记分页查询,queryMaterialList对应分页查询语句,通过totalsize参数从外部传入总记录数,
//这样在分页方法内部无需执行总记录数查询操作,以便提升系统性能,这种风格使用简单,效率相对第一种风格较高,但是要额外配置总记录数查询sql
//condition参数保存了查询条件
return executor.queryListInfoBean(HashMap.class, "queryMaterialList", offset, pagesize,totalSize ,condition);
}
public ListInfo queryMaterailListInfoThirdStyleBean(int offset, int pagesize ,PurchaseApplyCondition condition) throws Exception {
//根据sql语句和外部传入的总记录数sql语句进行分页,这种风格使用简单,效率最高,但是要额外配置总记录数查询sql
ListInfo list = executor.queryListInfoBeanWithDBName(HashMap.class, "bspf","queryMaterialList", 0, 10,"queryCountMaterialList" ,condition);
return list;
}
/*******************************以bean方式传递查询条件结束*******************************/
/*******************************以传统绑定变量方式传递查询条件开始*******************************/
public ListInfo queryMaterailListInfoFirstStyle(int offset, int pagesize ,String id) throws Exception {
//执行分页查询,queryMaterialList对应分页查询语句,
//根据sql语句在分页方法内部执行总记录数查询操作,这种风格使用简单,效率相对较低
//id参数保存了查询条件
return executor.queryListInfo(HashMap.class, "queryMaterialListbindParam", offset, pagesize,id);
}
public ListInfo queryMaterailListInfoSecondStyle(int offset, int pagesize ,String id) throws Exception {
//执行总记录查询并存入totalSize变量中,queryCountMaterialList对应一个优化后的总记录查询语句
//id参数保存了查询条件
long totalSize = executor.queryObject(long.class, "queryCountMaterialListbindParam",id);
//执行总记分页查询,queryMaterialList对应分页查询语句,通过totalsize参数从外部传入总记录数,
//这样在分页方法内部无需执行总记录数查询操作,以便提升系统性能,这种风格使用简单,效率相对第一种风格较高,但是要额外配置总记录数查询sql
//id参数保存了查询条件
return executor.queryListInfoWithTotalsize(HashMap.class, "queryMaterialListbindParam", offset, pagesize,totalSize,id );
}
public ListInfo queryMaterailListInfoThirdStyle(int offset, int pagesize ,String id) throws Exception {
//根据sql语句和外部传入的总记录数sql语句进行分页,这种风格使用简单,效率最高,但是要额外配置总记录数查询sql,id参数保存了查询条件
ListInfo list = executor.queryListInfoWithDBName2ndTotalsizesql(HashMap.class, "bspf","queryMaterialListbindParam", 0, 10,"queryCountMaterialListbindParam",id );
return list;
}
/*******************************以传统绑定变量方式传递查询条件结束*******************************/
}
举例完毕,如有疑问,请留言进一步探讨。
补充说明一下:ListInfo对象包含当页记录集和总记录数