NutzCN Logo
问答 关于自定义sql,求大大优化建议
发布于 2076天前 作者 qq_b354c25d 1648 次浏览 复制 上一个帖子 下一个帖子
标签:

请问有什么优化的建议么

@Override
    public List<VideoDataList> getVideoList(Integer checkStatus, Date beginDate, Date endDate, String name, PageInfo pageInfo,
                                            long userId) {
        String sqlStr = "SELECT sdkorder.conf, sdkorder.createTime, idFront.name, other.name, sdkorder.customerOrderId," +
                "sdkorder.orderId,  sdkorder.checkStatus, sdkorder.checkPerson, sdkorder.id FROM $orderTable sdkorder LEFT JOIN " +
                "$otherCardTable other ON sdkorder.stOrderId = other.stOrderId left join $frontTable idFront ON sdkorder.stOrderId = " +
                "idFront.stOrderId $condition ORDER BY sdkorder.createTime DESC";
        Sql sql = Sqls.create(sqlStr);
        sql.vars().set("orderTable", dao.getEntity(VideoSdkOrder.class).getTableName());
        sql.vars().set("otherCardTable", dao.getEntity(Video2OtherCardRecord.class).getTableName());
        sql.vars().set("frontTable", dao.getEntity(Video2IdCardFrontRecord.class).getTableName());

        Cnd cnd = Cnd.where("sdkorder.orderStatus", "=", true);
        cnd.and(Cnd.exps(Cnd.exps("other.valid", "is", null)
                .or("other.valid", "=", true)).and(Cnd.exps("idFront.valid", "is", null)
                .or("idFront.valid", "=", true)).and("sdkorder.companyId", "=", userId));
        queryParams(checkStatus, beginDate, endDate, name, cnd);
        sql.setCondition(cnd);
        sql.setPager(dao.createPager(pageInfo.getPage(), pageInfo.getMaxNumPerPage()));
        sql.setCallback(CallbackConstants.VIDEO_SDK_WEB_LIST);
        dao.execute(sql);
        return sql.getObject(List.class);
    }
9 回复

优化的方向是?

是不是应该把这个自定义的sql 存在一个文件中?
然后从文件中读取
可是应该存在什么样的文件中呢
不是XML吧

sqls文件,文档有

用户可以将所有的 SQL 语句存放在一个或者多个文件中,语句的间隔可以通过注释,比如:
/* delete.data /
DELETE FROM $table WHERE name LIKE @name
/
update.data */
UPDATE $table SET name=@name WHERE id=@id
在你的 Java 代码中:

Sql sql = dao.sqls().create("delete.data");

就是这种怎么实现呢

在构造时加载(示意代码,新建NutDao属于重量级操作,应使用单例或Ioc模式)
Dao dao = new NutDao(datasource,new FileSqlManager("demo/sqls/all.sqls"));
System.out.println(dao.sqls().count());

请问这个,要在什么时候进行加载呢,是不是就是这个sqls文件

@wendal 大大,请问建立的是.sqls 还是.sql文件呢?

都行,都认

建议用这个哦,https://www.oschina.net/news/105635/nutz-sqltpl-1-3-4-release-released

添加回复
请先登陆
回到顶部