SQL动态模糊搜索

用concat连接通配符解决:MySQL报错解决--Parameter index out of range (1 > number of parameters, which is 0)

JAVA

Kv conds = new Kv();
if(StrKit.notBlank(para)) {
    conds.set(Json.getJson().parse(para, HashMap.class));
}
SqlPara sqlPara = Db.getSqlPara("paginateUser", Kv.by("conds", conds));
Page<Record> userPage =  Db.paginate(pageNum, colNum, sqlPara);

出错SQL

### 用户动态分页查询
#sql("paginateUser")
select * from user where 1=1
	#for(x:conds)
		#if(x.value)
			and #(x.key) like '%#para(x.value)%'
		#end
	#end
 order by id desc
#end

修改后SQL

### 用户动态分页查询
#sql("paginateUser")
select * from user where 1=1
	#for(x:conds)
		#if(x.value)
			and #(x.key) like concat('%',#para(x.value),'%')
		#end
	#end
 order by id desc
#end



评论区

JFinal

2020-09-26 15:36

代码应该是对的,这个贴子是不是一篇分享? 因为是对的

JFinal

2020-09-26 15:38

jfinal 后续版本的 Model、Db 已经支持了 template 方法,可以完全不必使用 SqlPara 了,具体到你的代码,使用方法如下:
Page userPage = Db.template("paginateUser", Kv.by("conds", conds)).paginate(pageNum, colNum);

一行代码搞定,省去 getSqlPara 这些麻烦事

JFinal

2020-10-12 18:25

1:如果用了 sql 模板功能中的 #para:
select * from article where title like concat('%', #para(title), '%')

2:如果是纯 sql:
select * from article where title like concat('%', ?, '%')

这里有过介绍:
https://jfinal.com/doc/5-13

感谢支持 App & Coffee