QueryBuilder是什么?
1. 为什么要使用QueryBuilder?
针对实体的查询,你的查询条件可能多种多样,这时候你可以利用QueryBuilder来指定查询条件。它会根据你指定的查询条件去创建sql语句。
2. 如何使用QueryBuilder?
通过实体的 dao类来获得。
List joes = dao.queryBuilder()
.where(Properties.FirstName.eq("Joe")).orderAsc(Properties.LastName).list();
切入分析
一个使用例子:
List<Point> listPointAll = GreenC.getPointDao().queryBuilder().
where(PointDao.Properties.Pk_TagId.eq(mTag.getId()),
PointDao.Properties.GroupSnCode.eq(groupSnCode)).
orderAsc(PointDao.Properties.SnCode).list();
- 创建 QueryBuilder:
GreenC.getPointDao().queryBuilder()
通过dao类来创建qb
- 指定where条件:
where(PointDao.Properties.Pk_TagId.eq(mTag.getId()),PointDao.Properties.GroupSnCode.eq(groupSnCode)).
将where条件加入到
whereCollector
-
指定排序的属性:
将排序的条件加入到orderBuilder
-
构建sql语句:
由以上几个流程可知,你提供几个条件,最终QueryBuilder进行build,提供sql语句,然后交给Query来执行。所以我们要好好考虑build了。
核心 build:
- createSelectBuilder():
private StringBuilder createSelectBuilder() {
// 1. 创建 sql 语句
String select = SqlUtils.createSqlSelect(dao.getTablename(), tablePrefix, dao.getAllColumns(), distinct);
StringBuilder builder = new StringBuilder(select);
// 2. 添加 join 和 where
appendJoinsAndWheres(builder, tablePrefix);
// 3. 添加 order by
if (orderBuilder != null && orderBuilder.length() > 0) {
builder.append(" ORDER BY ").append(orderBuilder);
}
return builder;
}
// 1. 创建sql语句
SqlUtils是个工具类,提供便捷的方法去创建sql语句!
详情,请看:SqlUtils
// 2. 添加join和where语句
-
checkAddLimit()
-
checkAddOffset()
结束~
sql语句,数值,limit与offset的位置都有了,把他们交给Query,让query来解决数据的加载问题!