虽然提供了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); ...
}

然后,就可以开始继续写代码了。

nutz 自定义sql的使用的更多相关文章

  1. phpcmsv9自定义sql语句查询模型实现

    在phpcmsv9中,自定义sql语句查询可不太好实现,传入sql语句查询很容易被内部转入生成一系列莫名其妙的sql语句,比如最佳前缀等等,直接造成sql语句查询错误,在此也提供两种解决办法,1修改底 ...

  2. thinkjs中自定义sql语句

    一直以为在使用thinkjs时,只能是它自带的sql语句查询,当遇到类似于这样的sql语句时,却不知道这该怎样来写程序,殊不知原来thinkjs可以执行自定义sql语句 SELECT * from a ...

  3. 11月16日《奥威Power-BI基于SQL的存储过程及自定义SQL脚本制作报表》腾讯课堂开课啦

           上周的课程<奥威Power-BI vs微软Power BI>带同学们全面认识了两个Power-BI的使用情况,同学们已经迫不及待想知道这周的学习内容了吧!这周的课程关键词—— ...

  4. django不定义model,直接执行自定义SQL

    如果不想定义model,直接执行自定义SQL,可如下操作: 1. 通过 connections获取db连接,如果是多个数据库,connections['dbName'] 来选择 2. 获取游标 cur ...

  5. Python Django 之 直接执行自定义SQL语句(二)

    转载自:https://my.oschina.net/liuyuantao/blog/712189 一般来说,最好用 Django 自带的模型来实现这些操作.这里仅仅只是为了学习使用原始 SQL 而做 ...

  6. Python Django 之 直接执行自定义SQL语句(一)

    一.执行自定义SQL方法 1.Executing custom SQL directly      直接执行自定义SQL,这种方式可以完全避免数据模型,而是直接执行原始的SQL语句. 2.Manage ...

  7. 【JEECG技术文档】数据权限自定义SQL表达式用法说明

    功能介绍   数据规则通过配置自定义sql来实现数据权限的控制,自定义SQL支持表达式取值 其中自定义sql 条件中字段的名称和数据库表的字段名保持一致. 角色授权 用户角色授权,权限测试不要用adm ...

  8. SpringBoot Mybatis 执行自定义SQL

    1.XML中执行自定义SQL. https://blog.csdn.net/u012427355/article/details/80654806 2.注解执行自定义SQL @Select(" ...

  9. spring-jpa通过自定义sql执行修改碰到的问题

    在编写自定义SQL的时候需要注意 @Query 注解只能用来查询,想要进行添加.修改和删除操作需要配合 @Modifying 注解一同使用 @Modifying @Query("update ...

随机推荐

  1. Node.js+Protractor+vscode搭建测试环境(1)

    1.protractor简介 官网地址:http://www.protractortest.org/ Protractor是一个end-to-end的测试框架,从网络上得到的答案是Protractor ...

  2. Request中通过文件流获取文件

    第一次写博客,希望能帮到以后接触到这里的同学,废话不多说,面对疾风吧. /** * 获取文件相信信息 * @param request HttpServletRequest实例 * @param im ...

  3. Mysql学习总结(38)——21条MySql性能优化经验

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情. 当我们去设计数据库表结构,对操作数 ...

  4. 如何让 Windows 上的命令行工具更好用

    侯爵老师视频详解:如何让 Windows 上的命令行工具更好用 很多 Windows 用户在打开这个小黑窗时,都会情不自禁的感慨,「实在是太丑了--」 实际上如果你用的是 Windows 8 或 Wi ...

  5. Mongodb--切片

    1.在3台服务器上分别运行 2717 , 27018,27109,互为副本集,形成3套replSet 2.在3台服务器上各配置config.server,运行在27020端口上,和配置mongod的命 ...

  6. asp.net-EF-表间关系

    博客推荐 http://www.cnblogs.com/Gyoung/archive/2013/01/17/2864150.html 先学习下这几个方法 Has方法: HasOptional:前者包含 ...

  7. [Angular] Angular CDK Intro

    1. Installl latest @angular/cli: sudo npm i -g @angular/cli@next The version I used is:6.0.0-rc.10 2 ...

  8. hdu5389 Zero Escape DP+滚动数组 多校联合第八场

    Zero Escape Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) To ...

  9. Running the app on your device

    So far, you've run the app on the Simulator. That's nice and all but probably notwhy you're learning ...

  10. bzoj5194: [Usaco2018 Feb]Snow Boots

    还真是.. 就是 一个被不点名批评的垃圾骗分暴力选手被普及难度的省选信心(??)模拟赛艹爆的题解 的t3嘛... #include<cstdio> #include<iostream ...