jfinal4.5 中使用sql模板报错

config插件配置:

ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0Plugin);
arp.addSqlTemplate("sysuser.sql");
arp.setShowSql(true);
_MappingKit.mapping(arp);
me.add(arp);
sysuser.sql文件内容
#namespace("user")
	#sql("login")
	  select * from sys_user where username = ? and passwd = ?
	#end
#end
controller测试调用
SysUser user = SysUser.dao.template("user.login", "admin", "123456").findFirst();
renderJson(user);
exceptin异常堆栈
Caused by: java.sql.SQLException: No value specified for parameter 1
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:1020)
	at com.mchange.v2.c3p0.impl.NewProxyPreparedStatement.executeQuery(NewProxyPreparedStatement.java:431)
	at com.jfinal.plugin.activerecord.Model.find(Model.java:678)
	at com.jfinal.plugin.activerecord.Model.find(Model.java:688)
	... 58 more


评论区

tangshu

2020-01-22 05:28

修改成select * from sys_user where username = #para(0) and passwd = #para(1) 是可以的。官方文档里,确实有写使用“?”也是可以的

JFinal

2020-01-30 11:02

template(...) 方法需要与 #para 指令配合使用,由于这个功能是后加的,所以文档中有一处错误,现已修正

如果不使用 #para 指令,使用 getSql 也是可以的,例如:
String sql = Db.getSql("user.login");
dao.findFirst(sql, "admin", "111111");

热门反馈

扫码入社