zoukankan      html  css  js  c++  java
  • 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);
            
            ...
        }
    复制代码

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

  • 相关阅读:
    python学习笔记(2)
    数据分析工具pandas
    python学习笔记(1)
    python学习笔记(3)
    python学习笔记(2):科学计算及数据可视化入门
    python学习笔记(1):python基础
    js setTimeout 和 setInterval 区别
    C#根据URL生成签名
    jquery.validate.js客户端验证
    redis学习(一)
  • 原文地址:https://www.cnblogs.com/telwanggs/p/7111606.html
Copyright © 2011-2022 走看看