nutz自定义sql的使用

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

nutz⾃定义sql的使⽤
虽然提供了Cnd,但是⽤起来是觉得有点不⽅便,然后就直接编写Sql语句。

nutz提供了⼀些⽅法。

Nutz.Dao 的⾃定义 SQL 部分的解决⽅案是:
// 不推荐使⽤
⽤户可以硬编码 SQL 语句,⽐如:
Sql sql = Sqls.create("DELETE FROM t_abc WHERE name='Peter'");
// 可以。

防注⼊。

不过太多字符串了,要拼接。

⽀持占位符的书写⽅式,⽐如:
Sql sql = Sqls.create("DELETE FROM $table WHERE name=@name");
sql.vars().set("table","t_abc");
sql.params().set("name","Peter");
$table 将会被替换成 t_abc
@name 将会被替换成 ?,⽤来创建 PreparedStatement
// 这种⽅法不错,代码显得好看点,⽽且,⽅便CV操作
⽤户可以将所有的 SQL 语句存放在⼀个或者多个⽂件中,语句的间隔可以通过注释,⽐如:
/* delete.data */
DELETE FROM $table WHERE name LIKE @name
/* update.data */
UPDATE FROM $table SET name=@name WHERE id=@id
在你的 Java 代码中:
Sql sql = dao.sqls().create("delete.data");
你可以为你的 SQL 任意定制回调,后⾯会有详细讲解
根据nutz的⽂档,最终主要采⽤将sql语句放置在多个⽂件中来管理的⽅法⽐较容易管理代码。

使⽤⽅法如下,初始化时,让dao载⼊.sqls⽂件。

有两种⽅法。

第⼀种,构造时加载。

路径你也可以⽤⽂件夹,这样会加载⽂件夹下所有.sqls⽂件
Dao dao = new NutDao(datasource,new FileSqlManager("demo/sqls/all.sqls"));
System.out.println(dao.sqls().count());
 或者在dao.js写好,⽤ioc加载
var ioc = {
conf : {
...
},
dataSource : {
...
},
sqlSource:{
type:"org.nutz.dao.impl.FileSqlManager",
args:["sql"]
},
dao : {
type : "org.nutz.dao.impl.NutDao",
args : [{refer:"dataSource"},{refer:"sqlSource"}]
}
};
第⼆种,在构造后加载
Dao dao = new NutDao(datasource);
((NutDao)dao).setSqlManager(new FileSqlManager("demo/sqls/all.sqls"));
System.out.println(dao.sqls().count());
PS:.sqls ⽂件必须是 UTF-8编码
------------------------------------------------------------------------------------------------------------------------------------------------------------------------好了,前期⼯作完成。

该弄弄怎么使⽤了。

⾸先,写好你⾃⼰的.sqls⽂件。

1.通过 dao.sqls().create(""); 加载对应的sql语句。

2.替换相应的占位符。

3.设置回调函数,回调函数中,通过 invoke 函数你进⾏后续操作。

4.执⾏dao.execute(sql)。

这⾥是同步,会等待结束,直⾄失败,或者回调函数执⾏完毕才会继续执⾏。

@At
@Ok("jsp:jsp.test.getMenuDi")
public void getMenuByIoc(HttpSession session)
{
Sql sql = dao.sqls().create("getMenu.data");
sql.params().set("id", 1);
sql.setCallback(new SqlCallback() {
public Object invoke(Connection conn, ResultSet rs, Sql sql) throws SQLException { .....
while (rs.next()){
....
m.setName(rs.getString("menu_name"));
....
}
System.out.println("callback end");
return myMenu;
}
});
dao.execute(sql);
System.out.println("execute end");
MyMenu myMenu = sql.getObject(MyMenu.class);
...
}
然后,就可以开始继续写代码了。

相关文档
最新文档