前面有篇关于JEECG项目搭建的文章,这里继续原来的话题
2.:单表增删改查,生成代码生成器生成代码
2.1:如果单表有字段是外键,是不能直接生成代码的,直接自已手动改造一下生成的Entity,这一点不太方面
改造前:
改造后:
2.2:外键后取值“taste00Entity_tasteName”,可以取得到值,但是发现数据查询的时侯出1+N次的查询方式2.3:解决JEECG生成的List查询1+N次的方法
经过代码跟踪,发现最后做数据查询的类是org/jeecgframework/core/common/dao/impl/GenericBaseCommonDao.java。
查询数据列表的方法是org.hibernate.Criteria,Criteria里面的方法setFetchMode能够解决1+N次的查询问题,具体代码如下。
也将把这个代码上报给JEECG,也许在下个版本就会解决这个问题了
String[] fields = cq.getDataGrid().getField().split(",");
for (int i = 0; i < fields.length; i++) {
if (fields[i].indexOf("_") != -1) {
fields[i] = fields[i].substring(0, fields[i].indexOf("_"));// 外键字段引用名
//需要查询的关联对象
criteria.setFetchMode(fields[i], org.hibernate.FetchMode.JOIN);
}
}
2.4:关于代码器配置,可能造成整个系统架构的问题
jeecg_config.properties配置文件,里面的jeecg_filed_convert
查看了JEECG关于org.jeecgframework.tag-sources-3.3.2.jar里面的源码
上一个问题2.3取值XXX_XXX是跟据“_”利害反射原理进行取值的
如:jeecg_filed_convert=false,有一张表为XXX_XXX,那么取值的时侯就要这样写XXX_XXX_XXX,这样就取不到需要的值,甚至系统报错。
建议:jeecg_filed_convert=true不要去改,JEECG把这个配置取消掉
2.5:单页生成的时侯,查看数据报了这个错,JSONObject.fromObject(-->的时侯报的
Json串
{'total':4,'rows':[{'state':'closed','id':'1','employeeId':'999','tasteName':'温度','mutex':'1','disMode':'0','lastUpdate':'2013-05-19 15:05:24.0'},{'state':'closed','id':'2','employeeId':'999','tasteName':'甜度','mutex':'1','disMode':'0','lastUpdate':'2013-05-19 15:05:34.0'},{'state':'closed','id':'3','employeeId':'999','tasteName':'加料','mutex':'0','disMode':'0','lastUpdate':'2013-05-19 15:05:49.0'},{'state':'closed','id':'4','employeeId':'999','tasteName':'';\';\','mutex':'0','disMode':'0','lastUpdate':'2013-05-24 18:37:47.0'}]}
原因:'tasteName':'';\';\'里面包含了单引号,查看org.jeecgframework.tag-sources-3.3.2.jar里面的源码,JEECG对对象做了一次转换,将对象封装成字符串,再转成“JSONObject”。
建议:输入框校验不允许输入单引号
2.6:datagrid自定义标签对数据字典的引用
例如:dictionary="sex"
2.7:JEECE在线开发,移除或删除的时侯表没有删除干净。
查看hibernate语句操作的表"cgform_head";“cgform_field”,只看到对这张两表进行操作,事实应该不只是这两张表
在数据库里新建一张同名表,再使用在线代码生成器生成,如果表结构和原来的不样,,拉出来是代码还是原来表结构,并不是新表的结构,具体怎么解决,如果有解决方案会再发贴。
暂时解决方案:已经使用在线代码生成器生成表,需要进行修改,直接使用在线代码生成器进行相应的修改。
2.8:在线代码生成,移除的时侯,运行了N个delete,感觉不太合理