首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
求教,paginateByFullSql与动态sql,咋玩?
钮飞虎
2018-06-14 18:54
1、sql模板
2、业务层调用
3、报错了。。。。。
项目:
JFinal
2
1
评论区
钮飞虎
2018-06-14 18:57
由于涉及到order by,不能直接用Db.paginate(), 文档也看过了,实例中是拼接的静态sql,像我这种动态生成的带order by 的sql,怎么实现分页呢?
回复
JFinal
2018-06-14 19:03
使用 paginateByFullSql 的前提条件是,两条 sql 中使用的问号占位符的个数可以共享,相当于下面两个方法,不同的 sql 区享了同样的 paras:
String sqlAAA = "select * from tableAAA where aaa=? and bbb=?";
String sqlBBB = "select * from tableBBB" where ddd=? and eee=?";
Object paras = {123, 456};
Db.find(sqlAAA, paras);
Db.find(sqlBBB, paras);
观察上面两个 Db.find 所使用的参数,然后回到你的 paginateByFullSql 方法,里面有两条 sql:
String totalRowSql 以及 String findSql,然后你代码中调用了两次 getSqlPara 获取到了两个 SqlPara 对象,对比一下这两个 SqlPara.getPara() 出来的数据个数与数据值是不是完全一样的,如果是的话,则可以使用,否则就不能使用
回复
JFinal
2018-06-14 19:06
这里的关键点就在于 paginateByFullSql 方法中的 Object... paras 这个参数是被前面两条 sql 参数所共享的,确保可以共享就能正常工作
回复
JFinal
2018-06-14 19:08
设计这个 API 时,假定了用于分页的两条 sql , 只是 sql 部分的 select 部分有所不同,而参数部分是完全一样的
如果你的两条 sql 模板中的参数确实有所不同,有两个解决方向:
1:使用 #(...) 输出变量,这个输出不会生成问号占位符和 para,而 #para 指令会生成这两个东东
2:使用 select * ( 原 sql 在此) 加个嵌套来解决参数不同的问题
回复
JFinal
2018-06-14 19:10
你的 Db.paginateByFullSql(...) 为啥传入 Object... paras 参数呢,加个参数进去:
Db.paginateByFullSql(..., sqlPara.getPara())
回复
JFinal
2018-06-14 19:10
JFinal 06-14 19:10
你的 sql 模板中明明是有参数的,而你的 Db.paginateByFullSql(...) 为啥没有传入 Object... paras 参数呢,加个参数进去:
Db.paginateByFullSql(..., sqlPara.getPara())
回复
钮飞虎
2018-06-14 19:48
@JFinal
好的,我试试,主要是生成的动态sql由条件决定,条件不同,参数值及个数也不同,但是打印出来的sql都是用,所以不知道该怎么传参了。
回复
JFinal
2018-06-15 10:17
@钮飞虎
参数值及个数不同当然就不能用这个方法了,但是你可以通过一点改变让参数完全相同,例如用嵌套 sql , 以及针对某些不同参数使用 #(value) 来输出具体值,而不是 #para(...) 来生成问号占位
回复
王志豪
2018-12-21 11:47
@JFinal
SELECT
id,
mobile,
recommend_uid,
rewards_money,
create_time,
state,
user_id
FROM
t_money_in_detail
WHERE
recommend_uid = 1362
UNION ALL
SELECT
id,
mobile,
user_id,
cash_money,
completion_time,
'4',
NULL
FROM
t_cash
WHERE
user_id = 1362
ORDER BY
create_time DESC
LIMIT 0,
5
怎么用Jfinal写
回复
JFinal
2018-12-22 12:45
@王志豪
直接写就好:
String sql = Db.getSql(...);
Db.find(sql);
回复
发送
我要反馈
热门反馈
扫码入社