NutzCN Logo
问答 SQL中的<% } if (has("变量")) {%>;当变量位null 时无法判断,怎么办???
发布于 2359天前 作者 qq_4945a577 1775 次浏览 复制 上一个帖子 下一个帖子
标签:

使用的beetl引擎,当变量为null从前台传来后台依然认为有值,请问怎么在sql文件里加一个不为null的判断

WHERE 1=1
and con.isup = ?
ORDER BY days DESC LIMIT 0,10
44 回复
if ( has("xxx") && xxx != null)

if(!isEmpty("xxx")) 相当于 isNotBlank

上边的逻辑判断 “<% if (params.~size > 0) {%>” 还会通过,怎么办

09:12:47,341 org.nutz.dao.impl.sql.run.NutDaoExecutor.printSQL(NutDaoExecutor.java:388) DEBUG - select distinct con.item as x_, con.days as y_, con.isup as isup from fctas con
WHERE 1=1
2017-11-07 09:12:47,354 org.nu
select distinct con.item as x_, con.days as y_, con.isup as isup from fct as con
<% if (params.~size > 0) {%>
 WHERE 1=1

给出完整代码和SQL模板

select distinct con.item_ as x_, con.days as y_, con.isup as isup from fct as con
<% if (params.~size > 0) {%>
 WHERE 1=1
	<% if (has("_name")&& _name != null) {%> and con._name LIKE @_name
	<% } if (has("cat_"&& cat_ != null)) { %> and con.cat_ LIKE @cat_
	<% } if (has("commodity_"&& commodity_ != null)) {%> and con.commodity_ LIKE @commodity_
	<% } if (has("isup"&& "isup" != null)) {%> and con.isup = @isup <% }%>
	<%} %>
	ORDER BY days DESC LIMIT 0,10

还有个bug就是读不到 order by……这句

public NutMap queryData(NutMap[] param) {
        List<String> list = new ArrayList<>();
        NutMap re = new NutMap();
        SqlManager sqlManager = new FileSqlManager("sqls/");
        if (param == null) {
            return re.setv("ok", false).setv("msg", "传值为空,请检查页面传值");
        } else {
            Sqls.setSqlBorning(BeetlSqlTpl.class);
            for (NutMap map : param
                    ) {
                String chart = map.get("chart").toString();//获取标识
                Sql sql = sqlManager.create(chart);//通过数据模型生成sql对象
                NutMap map_param = map.getAs("param", NutMap.class);
                if (map_param != null) {
                    Set<String> set = map_param.keySet();
                    for (String param_name : set
                            ) {
                        sql.setParam(param_name, map_param.get(param_name));
                    }
                }
                sql.setCallback(Sqls.callback.maps());
                dao.execute(sql);
                list = sql.getList(String.class);
                NutMap nm = new NutMap();
                nm.put("chart", chart);
                nm.put("list", list);
                Object o= arrangeData(nm);
                re.setv(chart, o);
            }
            return re.setv("ok", true);
        }
    }

map_param的长度大于0,那params.~size>0是true, 没毛病

那要是null 的时候就会进去 然后sql就带着where 1=1了

那你调用sql.setParam的时候判断一下嘛

                    for (Entry<String, Object> en : map_param.entrySet() ) {
                        if (en.getValue() != null)
                            sql.setParam(en.getKey(), en.getValue());
                    }

另外: FileSqlManager没必要每次创建一次, Sqls.setSqlBorning也只需要调用一次.

至于order by出不来,是因为模板里面的语法错误

<% } if (has("cat_"&& cat_ != null)) { %> and con.cat_ LIKE @cat_
// 正确的写法,注意括号的位置
<% } if (has("cat_")&& cat_ != null) { %> and con.cat_ LIKE @cat_

我把代码整理在这里了,你可以把它当成个测试项目用吧

https://gitee.com/wendal/nutz_p1um21st7ijv8otl5nubf4cqjs

PS: 良好的缩进更容易发现问题

是这样吗?

  @Inject
    Dao dao;
    SqlManager sqlManager = new FileSqlManager("sqls/");
    Sql sql;

    public NutMap queryData(NutMap[] param) {
        Sqls.setSqlBorning(BeetlSqlTpl.class);
 List<String> list = new ArrayList<>();
        NutMap re = new NutMap();
        if (param == null) {
            return re.setv("ok", false).setv("msg", "传值为空,请检查页面传值");
        } else {

Sql对象不能重用的,不能声明为类实例变量.

FileSqlManager一般声明在dao.js里面的, 贴一下你的dao.js

var ioc = {
    conf : {
        type : "org.nutz.ioc.impl.PropertiesProxy",
        fields : {
            paths : ["custom/"]
        }
    },
    dataSource : {
        factory : "$conf#make",
        args : ["com.alibaba.druid.pool.DruidDataSource", "db."],
        type : "com.alibaba.druid.pool.DruidDataSource",
        events : {
            create : "init",
            depose : 'close'
        }
    },
    dao : {
        type : "org.nutz.dao.impl.NutDao",
        args : [{refer:"dataSource"}],
        fields : {
            interceptors : [{refer:"cacheExecutor"}, "log"]
        }
    },
    cacheExecutor : {
        type : "org.nutz.plugins.cache.dao.DaoCacheInterceptor",
        fields : {
            cacheProvider : {refer:"cacheProvider"},
            // 需要缓存的表名
            cachedTableNames : ["t_user_profile",
                //"t_user", "t_role", "t_permission", "t_role_permission"
            ]
        }
    },
    // 基于Ehcache的DaoCacheProvider
    cacheProvider : {
        type : "org.nutz.plugins.cache.dao.impl.provider.EhcacheDaoCacheProvider",
        fields : {
            cacheManager : {refer:"cacheManager"} // 引用ehcache.js中定义的CacheManager
        },
        events : {
            create : "init"
        }
    }
}
    dao : {
        type : "org.nutz.dao.impl.NutDao",
        args : [{refer:"dataSource"}],
        fields : {
            interceptors : [{refer:"cacheExecutor"}, "log"],
            sqlManager : {refer:"sqlManager"}
        }
    },
    sqlManager : {
        type : "org.nutz.dao.impl.FileSqlManager",
        fields : {
              paths : ["sqls/"]
        }
    }

然后就可以直接注入SqlManager了, 或者dao.sqls()也可以

@Inject Dao dao;
@Inject SqlManager sqlManager;
2017-11-07 12:26:02,786 org.nutz.mvc.impl.UrlMappingImpl.get(UrlMappingImpl.java:101) DEBUG - Found mapping for [GET] path=/test/date/echarts : DataModule.echarts(DataModule.java:129)
2017-11-07 12:26:02,786 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:157) DEBUG - Get 'dataModule'<class org.visual.tongyong.module.DataModule>
2017-11-07 12:26:02,787 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:183) DEBUG - 	 >> Load definition name=dataModule
2017-11-07 12:26:02,787 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(dataModule) in AnnotationIocLoader(packages=[org.visual.tongyong, org.mytest])
2017-11-07 12:26:02,787 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:215) DEBUG - 	 >> Make...'dataModule'<class org.visual.tongyong.module.DataModule>
2017-11-07 12:26:02,787 org.nutz.ioc.impl.ScopeContext.save(ScopeContext.java:64) DEBUG - Save object 'dataModule' to [app] 
2017-11-07 12:26:02,787 org.nutz.ioc.aop.impl.DefaultMirrorFactory.getMirror(DefaultMirrorFactory.java:70) DEBUG - Load class org.visual.tongyong.module.DataModule without AOP
2017-11-07 12:26:02,789 org.nutz.ioc.val.ReferTypeValue.get(ReferTypeValue.java:64) DEBUG - name=dataservice not found, search for type=org.visual.tongyong.service.DataService
2017-11-07 12:26:02,789 org.nutz.ioc.loader.map.MapLoader.load(MapLoader.java:67) DEBUG - Loading define for name=dao
2017-11-07 12:26:02,789 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(dao) in JsonLoader(paths=[ioc/])
2017-11-07 12:26:02,789 org.nutz.ioc.loader.map.MapLoader.load(MapLoader.java:67) DEBUG - Loading define for name=cacheProvider
2017-11-07 12:26:02,790 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(cacheProvider) in JsonLoader(paths=[ioc/])
2017-11-07 12:26:02,790 org.nutz.ioc.loader.map.MapLoader.load(MapLoader.java:67) DEBUG - Loading define for name=emailAuthenticator
2017-11-07 12:26:02,791 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(emailAuthenticator) in JsonLoader(paths=[ioc/])
2017-11-07 12:26:02,791 org.nutz.ioc.loader.map.MapLoader.load(MapLoader.java:67) DEBUG - Loading define for name=htmlEmail
2017-11-07 12:26:02,791 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(htmlEmail) in JsonLoader(paths=[ioc/])
2017-11-07 12:26:02,791 org.nutz.ioc.loader.map.MapLoader.load(MapLoader.java:67) DEBUG - Loading define for name=cacheExecutor
2017-11-07 12:26:02,792 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(cacheExecutor) in JsonLoader(paths=[ioc/])
2017-11-07 12:26:02,792 org.nutz.ioc.loader.map.MapLoader.load(MapLoader.java:67) DEBUG - Loading define for name=conf
2017-11-07 12:26:02,792 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(conf) in JsonLoader(paths=[ioc/])
2017-11-07 12:26:02,792 org.nutz.ioc.loader.map.MapLoader.load(MapLoader.java:67) DEBUG - Loading define for name=sqlManager
2017-11-07 12:26:02,793 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(sqlManager) in JsonLoader(paths=[ioc/])
2017-11-07 12:26:02,793 org.nutz.ioc.loader.map.MapLoader.load(MapLoader.java:67) DEBUG - Loading define for name=dataSource
2017-11-07 12:26:02,793 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(dataSource) in JsonLoader(paths=[ioc/])
2017-11-07 12:26:02,793 org.nutz.ioc.loader.map.MapLoader.load(MapLoader.java:67) DEBUG - Loading define for name=cacheManager
2017-11-07 12:26:02,794 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(cacheManager) in JsonLoader(paths=[ioc/])
2017-11-07 12:26:02,795 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(cleanNonActiveUserJob) in AnnotationIocLoader(packages=[org.visual.tongyong, org.mytest])
2017-11-07 12:26:02,795 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(authorityService) in AnnotationIocLoader(packages=[org.visual.tongyong, org.mytest])
2017-11-07 12:26:02,795 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(userProfileModule) in AnnotationIocLoader(packages=[org.visual.tongyong, org.mytest])
2017-11-07 12:26:02,795 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(dataModule) in AnnotationIocLoader(packages=[org.visual.tongyong, org.mytest])
2017-11-07 12:26:02,795 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(captchaModule) in AnnotationIocLoader(packages=[org.visual.tongyong, org.mytest])
2017-11-07 12:26:02,796 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(authorityModule) in AnnotationIocLoader(packages=[org.visual.tongyong, org.mytest])
2017-11-07 12:26:02,796 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(userModule) in AnnotationIocLoader(packages=[org.visual.tongyong, org.mytest])
2017-11-07 12:26:02,796 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(emailService) in AnnotationIocLoader(packages=[org.visual.tongyong, org.mytest])
2017-11-07 12:26:02,796 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(DataService) in AnnotationIocLoader(packages=[org.visual.tongyong, org.mytest])
2017-11-07 12:26:02,796 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:157) DEBUG - Get 'DataService'<interface org.visual.tongyong.service.DataService>
2017-11-07 12:26:02,797 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:183) DEBUG - 	 >> Load definition name=DataService
2017-11-07 12:26:02,797 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(DataService) in AnnotationIocLoader(packages=[org.visual.tongyong, org.mytest])
2017-11-07 12:26:02,797 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:215) DEBUG - 	 >> Make...'DataService'<interface org.visual.tongyong.service.DataService>
2017-11-07 12:26:02,797 org.nutz.ioc.impl.ScopeContext.save(ScopeContext.java:64) DEBUG - Save object 'DataService' to [app] 
2017-11-07 12:26:02,798 org.nutz.ioc.aop.impl.DefaultMirrorFactory.getMirror(DefaultMirrorFactory.java:70) DEBUG - Load class org.visual.tongyong.service.DataServiceImpl without AOP
2017-11-07 12:26:02,798 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:157) DEBUG - Get 'dao'<interface org.nutz.dao.Dao>
2017-11-07 12:26:02,799 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:157) DEBUG - Get 'sqlManager'<interface org.nutz.dao.SqlManager>
2017-11-07 12:26:02,799 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:183) DEBUG - 	 >> Load definition name=sqlManager
2017-11-07 12:26:02,799 org.nutz.ioc.loader.map.MapLoader.load(MapLoader.java:67) DEBUG - Loading define for name=sqlManager
2017-11-07 12:26:02,799 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(sqlManager) in JsonLoader(paths=[ioc/])
2017-11-07 12:26:02,799 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:215) DEBUG - 	 >> Make...'sqlManager'<interface org.nutz.dao.SqlManager>
2017-11-07 12:26:02,799 org.nutz.ioc.impl.ScopeContext.save(ScopeContext.java:64) DEBUG - Save object 'sqlManager' to [app] 
2017-11-07 12:26:02,800 org.nutz.ioc.aop.impl.DefaultMirrorFactory.getMirror(DefaultMirrorFactory.java:70) DEBUG - Load class org.nutz.dao.impl.FileSqlManager without AOP
2017-11-07 12:26:02,801 org.nutz.ioc.impl.ScopeContext.remove(ScopeContext.java:84) DEBUG - Remove object 'sqlManager' from [app] 
2017-11-07 12:26:02,801 org.nutz.ioc.impl.ScopeContext.remove(ScopeContext.java:84) DEBUG - Remove object 'DataService' from [app] 
2017-11-07 12:26:02,801 org.nutz.ioc.impl.ScopeContext.remove(ScopeContext.java:84) DEBUG - Remove object 'dataModule' from [app] 
2017-11-07 12:26:02,802 org.visual.tongyong.mvc.LogTimeProcessor.process(LogTimeProcessor.java:24) DEBUG - [ GET]URI=/visualdisplay/test/date/echarts 15ms
2017-11-07 12:26:02,802 org.nutz.mvc.impl.processor.FailProcessor.process(FailProcessor.java:28) WARN  - Error@/test/date/echarts :
org.nutz.ioc.IocException: IocBean[dataModule] throw Exception when creating
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:150)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:216)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:245)
	at org.nutz.mvc.impl.processor.ModuleProcessor.process(ModuleProcessor.java:116)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.EncodingProcessor.process(EncodingProcessor.java:27)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.nutz.mvc.impl.processor.UpdateRequestAttributesProcessor.process(UpdateRequestAttributesProcessor.java:15)
	at org.nutz.mvc.impl.processor.AbstractProcessor.doNext(AbstractProcessor.java:44)
	at org.visual.tongyong.mvc.LogTimeProcessor.process(LogTimeProcessor.java:19)
	at org.nutz.mvc.impl.NutActionChain.doChain(NutActionChain.java:44)
	at org.nutz.mvc.impl.ActionInvoker.invoke(ActionInvoker.java:67)
	at org.nutz.mvc.ActionHandler.handle(ActionHandler.java:31)
	at org.nutz.mvc.NutFilter.doFilter(NutFilter.java:202)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
	at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
	at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
	at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
	at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:80)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:624)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:799)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1455)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: IocBean[dataModule] fail at field=[dataservice]
	at org.nutz.ioc.weaver.FieldInjector.inject(FieldInjector.java:40)
	at org.nutz.ioc.weaver.DefaultWeaver.fill(DefaultWeaver.java:56)
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:136)
	... 44 more
Caused by: org.nutz.ioc.IocException: IocBean[DataService] throw Exception when creating
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:150)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:216)
	at org.nutz.ioc.impl.NutIoc.getByType(NutIoc.java:407)
	at org.nutz.ioc.val.ReferTypeValue.get(ReferTypeValue.java:66)
	at org.nutz.ioc.weaver.FieldInjector.inject(FieldInjector.java:32)
	... 46 more
Caused by: java.lang.RuntimeException: IocBean[DataService] fail at field=[sqlManager]
	at org.nutz.ioc.weaver.FieldInjector.inject(FieldInjector.java:40)
	at org.nutz.ioc.weaver.DefaultWeaver.fill(DefaultWeaver.java:56)
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:136)
	... 50 more
Caused by: org.nutz.ioc.IocException: IocBean[sqlManager] throw Exception when creating
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:150)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:216)
	at org.nutz.ioc.val.ReferTypeValue.get(ReferTypeValue.java:60)
	at org.nutz.ioc.weaver.FieldInjector.inject(FieldInjector.java:32)
	... 52 more
Caused by: org.nutz.lang.born.BorningException: Fail to born or cast to 'org.nutz.dao.impl.FileSqlManager'
 by args: []
 because:java.lang.ArrayIndexOutOfBoundsException: 0
	at org.nutz.lang.born.ConstructorBorning.born(ConstructorBorning.java:25)
	at org.nutz.ioc.weaver.DefaultWeaver.born(DefaultWeaver.java:67)
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:115)
	... 55 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
	at org.nutz.dao.impl.FileSqlManager$FC$d0275b2b871e237a38f11859247d1599.invoke(FileSqlManager.java)
	at org.nutz.lang.born.AbstractConstructorBorning.call(AbstractConstructorBorning.java:25)
	at org.nutz.lang.born.ConstructorBorning.born(ConstructorBorning.java:19)
	... 57 more

var ioc = {
    conf : {
        type : "org.nutz.ioc.impl.PropertiesProxy",
        fields : {
            paths : ["custom/"]
        }
    },
    sqlManager : {
        type : "org.nutz.dao.impl.FileSqlManager",
        fields : {
            paths : ["sqls/"]
        }
    },
    dataSource : {
        factory : "$conf#make",
        args : ["com.alibaba.druid.pool.DruidDataSource", "db."],
        type : "com.alibaba.druid.pool.DruidDataSource",
        events : {
            create : "init",
            depose : 'close'
        }
    },
    dao : {
        type : "org.nutz.dao.impl.NutDao",
        args : [{refer:"dataSource"}],
        fields : {
            interceptors : [{refer:"cacheExecutor"}, "log"]
        }
    },
    cacheExecutor : {
        type : "org.nutz.plugins.cache.dao.DaoCacheInterceptor",
        fields : {
            cacheProvider : {refer:"cacheProvider"},
            // 需要缓存的表名
            cachedTableNames : ["t_user_profile",
                //"t_user", "t_role", "t_permission", "t_role_permission"
            ]
        }
    },
    // 基于Ehcache的DaoCacheProvider
    cacheProvider : {
        type : "org.nutz.plugins.cache.dao.impl.provider.EhcacheDaoCacheProvider",
        fields : {
            cacheManager : {refer:"cacheManager"} // 引用ehcache.js中定义的CacheManager
        },
        events : {
            create : "init"
        }
    }
}
    dao : {
        type : "org.nutz.dao.impl.NutDao",
        args : [{refer:"dataSource"}],
        fields : {
            interceptors : [{refer:"cacheExecutor"}, "log"],
            sqlManager : {refer:"sqlManager"} // 注入到dao对象里面
        }
    },
    sqlManager : {
        type : "org.nutz.dao.impl.FileSqlManager",
        args: ["sqls/"] // 改成构造方法参数
        }
    }

@Inject
    SqlManager sqlManager;


    public NutMap queryData(NutMap[] param) {
        Sqls.setSqlBorning(BeetlSqlTpl.class);
        Sql sql;
        List<String> list = new ArrayList<>();
        NutMap re = new NutMap();
        if (param == null) {
            return re.setv("ok", false).setv("msg", "传值为空,请检查页面传值");
        } else {

            for (NutMap map : param
                    ) {
                String chart = map.get("chart").toString();//获取标识
                sql = sqlManager.create(chart);//通过数据模型生成sql对象
                NutMap map_param = map.getAs("param", NutMap.class);
                if (map_param != null) {
                    for (Map.Entry<String,Object> en : map_param.entrySet()
                            ) {
                        if(en.getValue()!=null){
                            sql.setParam(en.getKey(), map_param.get(en.getKey()));
                        }
                    }
                }
                sql.setCallback(Sqls.callback.maps());
                dao.execute(sql);
                list = sql.getList(String.class);
                NutMap nm = new NutMap();
                nm.put("chart", chart);
                nm.put("list", list);
                Object o= arrangeData(nm);
                re.setv(chart, o);
            }
            return re.setv("ok", true);
        }
    }
2017-11-07 12:32:22,178 com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:715) INFO  - {dataSource-1} inited
2017-11-07 12:32:22,193 org.nutz.ioc.aop.impl.DefaultMirrorFactory.getMirror(DefaultMirrorFactory.java:70) DEBUG - Load class org.nutz.dao.impl.NutDao without AOP
2017-11-07 12:32:22,194 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:157) DEBUG - Get 'dataSource'<>
2017-11-07 12:32:22,522 org.nutz.dao.jdbc.Jdbcs.<clinit>(Jdbcs.java:90) DEBUG - Jdbcs init complete
2017-11-07 12:32:22,523 org.nutz.dao.jdbc.Jdbcs.getExpert(Jdbcs.java:103) INFO  - Get Connection from DataSource for JdbcExpert, if you lock at here, check your database server and configure
Tue Nov 07 12:32:22 CST 2017 WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
2017-11-07 12:32:22,773 org.nutz.dao.impl.DaoSupport.setDataSource(DaoSupport.java:188) DEBUG - select expert : org.nutz.dao.impl.jdbc.mysql.MysqlJdbcExpert
2017-11-07 12:32:22,780 org.nutz.dao.impl.DaoSupport$1.invoke(DaoSupport.java:199) DEBUG - JDBC Driver --> mysql-connector-java-5.1.40 ( Revision: 402933ef52cad9aa82624e80acbea46e3a701ce6 )
2017-11-07 12:32:22,780 org.nutz.dao.impl.DaoSupport$1.invoke(DaoSupport.java:200) DEBUG - JDBC Name   --> MySQL Connector Java
2017-11-07 12:32:22,780 org.nutz.dao.impl.DaoSupport$1.invoke(DaoSupport.java:202) DEBUG - JDBC URL    --> jdbc:mysql://127.0.0.1:3306/wcc
2017-11-07 12:32:22,878 org.nutz.dao.impl.jdbc.mysql.MysqlJdbcExpert.checkDataSource(MysqlJdbcExpert.java:206) DEBUG - Mysql : character_set_client=utf8
2017-11-07 12:32:22,878 org.nutz.dao.impl.jdbc.mysql.MysqlJdbcExpert.checkDataSource(MysqlJdbcExpert.java:206) DEBUG - Mysql : character_set_connection=utf8
2017-11-07 12:32:22,878 org.nutz.dao.impl.jdbc.mysql.MysqlJdbcExpert.checkDataSource(MysqlJdbcExpert.java:206) DEBUG - Mysql : character_set_database=utf8
2017-11-07 12:32:22,879 org.nutz.dao.impl.jdbc.mysql.MysqlJdbcExpert.checkDataSource(MysqlJdbcExpert.java:206) DEBUG - Mysql : character_set_filesystem=binary
2017-11-07 12:32:22,879 org.nutz.dao.impl.jdbc.mysql.MysqlJdbcExpert.checkDataSource(MysqlJdbcExpert.java:206) DEBUG - Mysql : character_set_results=
2017-11-07 12:32:22,879 org.nutz.dao.impl.jdbc.mysql.MysqlJdbcExpert.checkDataSource(MysqlJdbcExpert.java:206) DEBUG - Mysql : character_set_server=utf8
2017-11-07 12:32:22,879 org.nutz.dao.impl.jdbc.mysql.MysqlJdbcExpert.checkDataSource(MysqlJdbcExpert.java:206) DEBUG - Mysql : character_set_system=utf8
2017-11-07 12:32:22,880 org.nutz.dao.impl.jdbc.mysql.MysqlJdbcExpert.checkDataSource(MysqlJdbcExpert.java:206) DEBUG - Mysql : character_sets_dir=C:\Program Files\MySQL\MySQL Server 5.7\share\charsets\
2017-11-07 12:32:22,882 org.nutz.dao.impl.jdbc.mysql.MysqlJdbcExpert.checkDataSource(MysqlJdbcExpert.java:213) DEBUG - Mysql : binlog_format=ROW
2017-11-07 12:32:22,883 org.nutz.dao.impl.jdbc.mysql.MysqlJdbcExpert.checkDataSource(MysqlJdbcExpert.java:220) DEBUG - Mysql : database=wcc
2017-11-07 12:32:22,884 org.nutz.dao.impl.jdbc.mysql.MysqlJdbcExpert.checkDataSource(MysqlJdbcExpert.java:226) DEBUG - Mysql : user=root@localhost
2017-11-07 12:32:22,920 org.nutz.dao.impl.DaoSupport.setDataSource(DaoSupport.java:221) DEBUG - Database info --> MYSQL:[MySQL - 5.7.17-log]
2017-11-07 12:32:22,924 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:157) DEBUG - Get 'cacheExecutor'<>
2017-11-07 12:32:22,924 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:183) DEBUG - 	 >> Load definition name=cacheExecutor
2017-11-07 12:32:22,924 org.nutz.ioc.loader.map.MapLoader.load(MapLoader.java:67) DEBUG - Loading define for name=cacheExecutor
2017-11-07 12:32:22,926 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(cacheExecutor) in JsonLoader(paths=[ioc/])
2017-11-07 12:32:22,926 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:215) DEBUG - 	 >> Make...'cacheExecutor'<>
2017-11-07 12:32:22,926 org.nutz.ioc.impl.ScopeContext.save(ScopeContext.java:64) DEBUG - Save object 'cacheExecutor' to [app] 
2017-11-07 12:32:22,928 org.nutz.ioc.aop.impl.DefaultMirrorFactory.getMirror(DefaultMirrorFactory.java:70) DEBUG - Load class org.nutz.plugins.cache.dao.DaoCacheInterceptor without AOP
2017-11-07 12:32:22,945 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:157) DEBUG - Get 'cacheProvider'<>
2017-11-07 12:32:22,945 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:183) DEBUG - 	 >> Load definition name=cacheProvider
2017-11-07 12:32:22,945 org.nutz.ioc.loader.map.MapLoader.load(MapLoader.java:67) DEBUG - Loading define for name=cacheProvider
2017-11-07 12:32:22,946 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(cacheProvider) in JsonLoader(paths=[ioc/])
2017-11-07 12:32:22,947 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:215) DEBUG - 	 >> Make...'cacheProvider'<>
2017-11-07 12:32:22,947 org.nutz.ioc.impl.ScopeContext.save(ScopeContext.java:64) DEBUG - Save object 'cacheProvider' to [app] 
2017-11-07 12:32:22,948 org.nutz.ioc.aop.impl.DefaultMirrorFactory.getMirror(DefaultMirrorFactory.java:70) DEBUG - Load class org.nutz.plugins.cache.dao.impl.provider.EhcacheDaoCacheProvider without AOP
2017-11-07 12:32:22,958 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:157) DEBUG - Get 'cacheManager'<>
2017-11-07 12:32:22,958 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:183) DEBUG - 	 >> Load definition name=cacheManager
2017-11-07 12:32:22,958 org.nutz.ioc.loader.map.MapLoader.load(MapLoader.java:67) DEBUG - Loading define for name=cacheManager
2017-11-07 12:32:22,959 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(cacheManager) in JsonLoader(paths=[ioc/])
2017-11-07 12:32:22,959 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:215) DEBUG - 	 >> Make...'cacheManager'<>
2017-11-07 12:32:22,959 org.nutz.ioc.impl.ScopeContext.save(ScopeContext.java:64) DEBUG - Save object 'cacheManager' to [app] 
2017-11-07 12:32:22,962 org.nutz.ioc.aop.impl.DefaultMirrorFactory.getMirror(DefaultMirrorFactory.java:70) DEBUG - Load class net.sf.ehcache.CacheManager without AOP
2017-11-07 12:32:22,967 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:157) DEBUG - Get 'sqlManager'<>
2017-11-07 12:32:22,967 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:183) DEBUG - 	 >> Load definition name=sqlManager
2017-11-07 12:32:22,967 org.nutz.ioc.loader.map.MapLoader.load(MapLoader.java:67) DEBUG - Loading define for name=sqlManager
2017-11-07 12:32:22,969 org.nutz.ioc.loader.combo.ComboIocLoader.load(ComboIocLoader.java:163) DEBUG - Found IocObject(sqlManager) in JsonLoader(paths=[ioc/])
2017-11-07 12:32:22,969 org.nutz.ioc.impl.NutIoc.get(NutIoc.java:215) DEBUG - 	 >> Make...'sqlManager'<>
2017-11-07 12:32:22,969 org.nutz.ioc.impl.ScopeContext.save(ScopeContext.java:64) DEBUG - Save object 'sqlManager' to [app] 
2017-11-07 12:32:22,971 org.nutz.ioc.aop.impl.DefaultMirrorFactory.getMirror(DefaultMirrorFactory.java:70) DEBUG - Load class org.nutz.dao.impl.FileSqlManager without AOP
2017-11-07 12:32:22,989 org.nutz.ioc.impl.ScopeContext.remove(ScopeContext.java:84) DEBUG - Remove object 'sqlManager' from [app] 
2017-11-07 12:32:22,990 org.nutz.ioc.impl.ScopeContext.remove(ScopeContext.java:84) DEBUG - Remove object 'dao' from [app] 
2017-11-07 12:32:22,991 org.nutz.mvc.impl.NutLoading.load(NutLoading.java:125) ERROR - Error happend during start serivce!
org.nutz.ioc.IocException: IocBean[dao] throw Exception when creating
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:150)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:216)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:245)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:152)
	at org.visual.tongyong.MainSetup.init(MainSetup.java:23)
	at org.nutz.mvc.impl.NutLoading.evalSetup(NutLoading.java:274)
	at org.nutz.mvc.impl.NutLoading.load(NutLoading.java:121)
	at org.nutz.mvc.ActionHandler.<init>(ActionHandler.java:19)
	at org.nutz.mvc.NutFilter._init(NutFilter.java:91)
	at org.nutz.mvc.NutFilter.init(NutFilter.java:69)
	at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
	at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
	at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4590)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5233)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
	at org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1702)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
	at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:482)
	at org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:431)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:300)
	at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
	at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
	at javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)
	at javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
	at javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)
	at javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionImpl.java:1401)
	at javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346)
	at sun.rmi.transport.Transport$1.run(Transport.java:200)
	at sun.rmi.transport.Transport$1.run(Transport.java:197)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
	at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
	at java.security.AccessController.doPrivileged(Native Method)
	at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: IocBean[dao] fail at field=[sqlManager]
	at org.nutz.ioc.weaver.FieldInjector.inject(FieldInjector.java:40)
	at org.nutz.ioc.weaver.DefaultWeaver.fill(DefaultWeaver.java:56)
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:136)
	... 57 more
Caused by: org.nutz.ioc.IocException: IocBean[sqlManager] throw Exception when creating
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:150)
	at org.nutz.ioc.impl.NutIoc.get(NutIoc.java:216)
	at org.nutz.ioc.val.ReferValue.get(ReferValue.java:24)
	at org.nutz.ioc.weaver.FieldInjector.inject(FieldInjector.java:32)
	... 59 more
Caused by: org.nutz.lang.born.BorningException: Fail to born or cast to 'org.nutz.dao.impl.FileSqlManager'
 by args: []
 because:java.lang.ArrayIndexOutOfBoundsException: 0
	at org.nutz.lang.born.ConstructorBorning.born(ConstructorBorning.java:25)
	at org.nutz.ioc.weaver.DefaultWeaver.born(DefaultWeaver.java:67)
	at org.nutz.ioc.impl.ObjectMakerImpl.make(ObjectMakerImpl.java:115)
	... 62 more
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
	at org.nutz.dao.impl.FileSqlManager$FC$d0275b2b871e237a38f11859247d1599.invoke(FileSqlManager.java)
	at org.nutz.lang.born.AbstractConstructorBorning.call(AbstractConstructorBorning.java:25)
	at org.nutz.lang.born.ConstructorBorning.born(ConstructorBorning.java:19)
	... 64 more

贴当前的dao.js看看

var ioc = {
    conf : {
        type : "org.nutz.ioc.impl.PropertiesProxy",
        fields : {
            paths : ["custom/"]
        }
    },
    sqlManager : {
        type : "org.nutz.dao.impl.FileSqlManager",
        fields : {
            paths : ["sqls/"]
        }
    },
    dataSource : {
        factory : "$conf#make",
        args : ["com.alibaba.druid.pool.DruidDataSource", "db."],
        type : "com.alibaba.druid.pool.DruidDataSource",
        events : {
            create : "init",
            depose : 'close'
        }
    },
    dao : {
        type : "org.nutz.dao.impl.NutDao",
        args : [{refer:"dataSource"}],
        fields : {
            interceptors : [{refer:"cacheExecutor"}, "log"],
            sqlManager : {refer:"sqlManager"}
        }
    },
    cacheExecutor : {
        type : "org.nutz.plugins.cache.dao.DaoCacheInterceptor",
        fields : {
            cacheProvider : {refer:"cacheProvider"},
            // 需要缓存的表名
            cachedTableNames : ["t_user_profile",
                //"t_user", "t_role", "t_permission", "t_role_permission"
            ]
        }
    },
    // 基于Ehcache的DaoCacheProvider
    cacheProvider : {
        type : "org.nutz.plugins.cache.dao.impl.provider.EhcacheDaoCacheProvider",
        fields : {
            cacheManager : {refer:"cacheManager"} // 引用ehcache.js中定义的CacheManager
        },
        events : {
            create : "init"
        }
    }
}

我晕啊, 能不能照着我的写完整!!!

    dao : {
        type : "org.nutz.dao.impl.NutDao",
        args : [{refer:"dataSource"}],
        fields : {
            interceptors : [{refer:"cacheExecutor"}, "log"],
            sqlManager : {refer:"sqlManager"} // 注入到dao对象里面
        }
    },
    sqlManager : {
        type : "org.nutz.dao.impl.FileSqlManager",
        args: ["sqls/"] // 改成构造方法参数
    }

嗯,跑起来了,“Sqls.setSqlBorning(BeetlSqlTpl.class);”放到AOP会更合适吗?

或者还是动作链?

放在MainSetup.init方法里面

今天把程序跑起来发现参数是null的时候不会进入到.sql的(if ( has("xxx") && xxx != null))判断里去,但是带着参数不是null的时候也进不去了

看我给的github库,clone下来跑

昨天就clon下来了,对照着看,没找到原理上有什么不对劲的地方……

@Inject
    SqlManager sqlManager;


    public NutMap queryData(NutMap[] param) {
        Sql sql;
        List<String> list = new ArrayList<>();
        NutMap re = new NutMap();
        if (param == null) {
            return re.setv("ok", false).setv("msg", "传值为空,请检查页面传值");
        } else {

            for (NutMap map : param
                    ) {
                String chart = map.get("chart").toString();//获取标识
                try{

                    sql = sqlManager.create(chart);//通过数据模型生成sql对象

                NutMap map_param = map.getAs("param", NutMap.class);
                if (map_param != null) {
                    for (Map.Entry<String,Object> en : map_param.entrySet()
                            ) {
                        if(en.getValue()!=null){
                            sql.setParam(en.getKey(), map_param.get(en.getKey()));
                        }
                    }
                }
                sql.setCallback(Sqls.callback.maps());
                dao.execute(sql);
                list = sql.getList(String.class);
                NutMap nm = new NutMap();
                nm.put("chart", chart);
                nm.put("list", list);
                Object o= arrangeData(nm);
                re.setv(chart, o);
            }catch (Exception e){
                log.info(e);
            }
            }

            return re.setv("ok", true);

        }
    }

是你的sql模板一堆错误

select distinct con.item as x_, con.days as y_, con.isup as isup from fct as con
<% if (params.~size > 0) {%>
 WHERE 1=1
	<% if (has("name")&& name !=null) {%> and con.name LIKE @name
	<% } if (has("cat") && cat !=null) { %> and con.cat LIKE @cat
	<% } if (has("commodity")&& commodity !=null) {%> and con.commodity LIKE @commodity
	<% } if (has("isup")&& isup !=null) {%> and con.isup = @isup <% }%>
	<%} %>
	ORDER BY days DESC LIMIT 0,10

看库里面模板

库里模板指什么

看我给的github库里面最新的sql模板文件

还是进不去

select distinct con.item as x_, con.days as y_, con.isup as isup from fct as con
<% if (params.~size > 0) {%>
 WHERE 1=1
	<% if (name! !=null) {%> and con.name LIKE @name
	<% } if (cat! !=null) { %> and con.cat LIKE @cat
	<% } if (commodity! !=null) {%> and con.commodity LIKE @commodity
	<% } if (isup! !=null) {%> and con.isup = @isup <% }%>
	<%} %>
	ORDER BY days DESC LIMIT 0,10

进不去啥?拿那个main方法实验啊,我给出的代码就是能用的

我说的是这个(“<% if (params.~size > 0) {%>”)这个逻辑进不去,sql.param里有参数而且不是null;但是这个if里边进不去,sql总是不带where后边的语句

debug一下sql.setParam这一行,看看有没有调用到

 try{

                  sql = sqlManager.create(chart);//执行完这一步的时候就不带着where的字符串(“select distinct con.item as x_, con.days as y_, con.isup as isup from fct as con /n ORDER BY days DESC LIMIT 0,10”)
                }catch (Exception e){
                    log.info(e);
                }
                NutMap map_param = map.getAs("param", NutMap.class);
                if (map_param != null) {
                    for (Map.Entry<String,Object> en : map_param.entrySet()
                            ) {
                        if(en.getValue()!=null){
                            sql.setParam(en.getKey(), map_param.get(en.getKey()));//执行成功
                        }
                    }
                }
                sql.setCallback(Sqls.callback.maps());//sql.params里set进一个map键值对,但是sql语句里还是没有where...那一部分

在我给出的main方法里面试成功再搞你自己的代码吧

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