4
回答
请教关于SQL多个同样的参数与SQL拼接的问题
极速云服务器,低至1.04元/天>>>   

@JFinal 你好,想跟你请教个问题:

1、像如下SQL,:code与:type为两个参数,请问在Jfinal中我需要如何传入参数

from Org c 
where substring(c.treeCode, 1, len(:code)) = {:code} and len(c.treeCode) > len({:code}) 
and (:type is null or c.type = :type)

2、能否支持像Ibatis那样的动态拼接SQL,如:

<select id="selectAllProducts" parameterClass="Product" resultMap="ProductResult">
select id,note from Product
<dynamic prepend="WHERE">
<isNotNull property="id">
<isGreaterThan prepend=" and " property="id" compareValue="0">
id = #id#
</isGreaterThan>
</isNotNull>
<isNotEmpty prepend=" and " property="note">
note like '%$note$%'
</isNotEmpty>
</dynamic>
</select>

举报
Jone2011
发帖于5年前 4回/1K+阅
共有4个答案 最后回答: 5年前

    参考一下 com.jfinal.plugin.activerecord.dialect.MysqlDialect中的sql拼装代码。基本上就是使用StringBuilder拼装带有问号"?"的sql,然后参数可以通过prepared statement来传递。

    JFinal ActiveRecord是对JDBC的极简封装,理论上JDBC能实现的功能都能实现

--- 共有 2 条评论 ---
JFinal回复 @kernelj : JDBC也没有实现这个feature,JFinal作为JDBC极薄封装,暂时也不打算实现 :) 5年前 回复
kernelj建议实现下通过 Name 来填充 PreparedStatement 的,这样同一个变量无需多次传入 5年前 回复

引用来自“Jone2011”的答案

这样做是非常悲催的事,用StringBuilder拼装非常的不灵活,代码散落到处都是。

建议参考一下 com.jfinal.plugin.activerecord.dialect.MysqlDialect中的sql拼装代码,并不是让你拼装 sql,是告知使用问号"?" 来实现多个参数传递的方法,而 sql 不用拼装,仅仅是个String常量,例如:

String sql = "select * from user where email=? and pass=?";
以上代码完全没有拼装的意思,你提到的多个参数如果相同的情况,JFinal的确未支持,因为JFinal希望保持足够简单,尽量只是JDBC的极薄封装 :)

引用来自“JFinal”的答案

引用来自“Jone2011”的答案

这样做是非常悲催的事,用StringBuilder拼装非常的不灵活,代码散落到处都是。

建议参考一下 com.jfinal.plugin.activerecord.dialect.MysqlDialect中的sql拼装代码,并不是让你拼装 sql,是告知使用问号"?" 来实现多个参数传递的方法,而 sql 不用拼装,仅仅是个String常量,例如:

String sql = "select * from user where email=? and pass=?";
以上代码完全没有拼装的意思,你提到的多个参数如果相同的情况,JFinal的确未支持,因为JFinal希望保持足够简单,尽量只是JDBC的极薄封装 :)
是可以使用问号,假如我现在需要两个完全一样的参数,需要使用两次,难道是两个问号,传入两个一样的参数??
--- 共有 1 条评论 ---
JFinal目前来说是这样的,与JDBC行为一样 5年前 回复
顶部