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 [email protected]");
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 [email protected] WHERE [email protected]
在你的 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);

        ...
    }

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

时间: 2025-01-11 02:59:30

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

SQLHelper——一个自定义SQL帮助器

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Configuration; 6 using System.Data.SqlClient; 7 using System.Data; 8 9 /// <summary> 10 /// 名称: 11 /// 自定义SQL帮助器 12 /// 摘要: 13 /// 提供简化sql操作

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

如果不想定义model,直接执行自定义SQL,可如下操作: 1. 通过 connections获取db连接,如果是多个数据库,connections['dbName'] 来选择 2. 获取游标 cursor 3. 执行sql: cursor.execute(sql) 4.获取返回结果:fetchone,fetchall (fetchall返回的是元祖,非字典) from django.db import connections cursor = connections['test_db'].cu

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

一.执行自定义SQL方法 1.Executing custom SQL directly 直接执行自定义SQL,这种方式可以完全避免数据模型,而是直接执行原始的SQL语句. 2.Manager.raw() 执行原始查询并返回模型实例 二.Executing custom SQL directly Manager.raw() 远远不够,可直接执行自定义SQL,directly execute UPDATE , INSERT , or DELETE queries.django.db.connect

mybatisplus 自定义sql 使用条件构造器

Mybatisplus 自定义sql 使用条件构造器 两种方式 注解方式 动态查找: @Select("select ${ew.SqlSelect} from ${tableName} ${ew.customSqlSegment}") List<File> listFileByCondition(@Param("tableName") String tableName, @Param("ew") Wrapper wrapper); e

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

在编写自定义SQL的时候需要注意 @Query 注解只能用来查询,想要进行添加.修改和删除操作需要配合 @Modifying 注解一同使用 @Modifying @Query("update AdminUser set username=:#{#adminUser.username},password=:#{#adminUser.password} where id=:#{#adminUser.id}") int updateInfoById(@Param("adminUse

wuzhicms 自定义SQL 标签

{wz:sql sql="select * from wz_guestbook"} {loop $rs $r} {$r[title]} {/loop} {/wz} 自定义统计条数:{wzsql('guestbook')} {php $rs = wzsql('guestbook',2)} {$rs['title']}

Spark操作dataFrame进行写入mysql,自定义sql的方式

业务场景: 现在项目中需要通过对spark对原始数据进行计算,然后将计算结果写入到mysql中,但是在写入的时候有个限制: 1.mysql中的目标表事先已经存在,并且当中存在主键,自增长的键id 2.在进行将dataFrame写入表的时候,id字段不允许手动写入,因为其实自增长的 要求: 1.写入数据库的时候,需要指定字段写入,也就是说,只指定部分字段写入 2.在写入数据库的时候,对于操作主键相同的记录要实现更新操作,非插入操作 分析: spark本身提供了对dataframe的写入数据库的操作

JPA扩展(自定义sql)

pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4

MYSQL可调用执行自定义SQL的代码

DELIMITER $$ USE `mysql_wispeed01`$$ DROP PROCEDURE IF EXISTS `sp_execSQL`$$ CREATE DEFINER=`sa`@`%` PROCEDURE `sp_execSQL`(inSql VARCHAR(4000)) BEGIN DECLARE l_sql VARCHAR(4000); SET l_sql=CONCAT_WS(' ',inSql); SET @sql=l_sql; PREPARE s1 FROM @sql;