2017-08-13 14:23

@yjjdick1990 千万别这么说,多花时间专注于你喜欢与擅长的事情,就能超越前人,从来都是长江后浪推前浪

2017-08-13 14:08

Db 的 update 方法并不是只支持 update 型的 sql,同时也支持 insert、delete 这样的 sql 语句, just do it

2017-08-13 14:07

@yjjdick1990 save 看你是想实现什么,Db.save(...) 支持 Record 对象保存,如果你希望支持 String sql, Object... para 这样的参数,用一下 Db.update(sqlPara) 即可

2017-08-13 14:05

batch 方法本质上是为某一条 sql 准备 n 多条数据,然后一次性发给数据库,注意观察一下 batch 方法中的 PreparedStatement 这个对象的操作过程:
1:获取 pst = conn.prepareStatement(sql); 这里意味着只有一条 sql
2:pst.setXxx(...) 注入字段数据
3:pst.addBatch() 将数据添加为 batch
4:pst.executeBatch(); 批量提交到数据库

简单说,batch 批量操作核心在于一条 sql ,多条数据,而这多条数据是重用了这一条 sql

另一种 batch 模式,注意看一下 DbPro 中带有 List sqlList参数的那个 batch 方法,是多条 sql, st.addBatch(sql); 但是这个不支持多条数据

如果你希望是多条 sql + 数据 的组合 batch 操作,估计无法实现,否则我当时应该会添加这个方法

希望你能发现 jdbc 有这个支持,搞定后记得反馈给我

2017-08-13 13:58

@yjjdick1990 通常来说,create table 这个建表的 sql 里面的字段的次序与反射出来的字段次序是有关系的,但或许不同的数据库版本以及 jdbc 驱动版本行为上有差别,建议对于多主键,添加一行强制指定的配置

无论什么原因引起的并不重要,重要的是要有应对机制。反射次序我们无法控制,手动指定才是我个可以干预的手段

2017-08-13 12:12

通过如下方法保障项目中的 log4j 可以正确工作:
1:在本站首页下载 jfinal demo,然后将 log4j.jar 以及里面的一个 log4j.properties 配置放在你的项目之中

2:项目中测试 log4j 是否可以正确工作,使用如下的代码:
Log.getLog(getClass()).error("测试日志是正工作正常");

3:找到日志文件,查看里面是否有内容

确保了在项目中日志可以工作以后,再去部署项目才有意义

2017-08-13 11:58

如果日志中的信息拿不到手,没人能帮你猜出来问题原因

2017-08-13 11:57

首先,要确保配置好项目的日志,如果启动时是项目代码自身的问题,那么项目中的日志会记录下来异常信息。项目的日志是最最基本的要求

其次,tomcat 的日志本身已经存在,但是只在某些情况下才会做日志,通常是与 tomcat 有关的异常

了解了上面两点,优先从项目日志中找问题,如果项目日志配置正确但没有内容,那么就从 tomcat 中找问题

2017-08-13 11:54

在 _MappingKit.mapping(arp);这行一行代码之后添加一行:
arp.setPrimaryKey("points", "member_id, point_type, index_time");

这样就强制指定了多主键的次序,如果不强制指定,那么默认按照反射的结果来。 反射的结果通常是正确的,如果不正确很可能是建表的 sql 里面的次序有变动

2017-08-13 11:49

看下 tomcat 的 log 目录下的日志,找到 cause 这段信息才能知道具体原因

仅凭上面的信息量无法定位

2017-08-12 23:22

@地狱里的帅灵魂 _MappingKit 是生成器自己生成的,不用自己手写,生成器在 jfinal demo 里面有,运行一下里面的 main 方法就生成了 _MappingKit

2017-08-12 18:03

如果暂时不想升级,可以用下面的方法支持:
SqlPara sp = Db.getSqlPara(...);
Db.update(sp.getSql(), sp.getPara());

2017-08-12 17:41

升级到 jfinal 3.2 就支持了这个功能

2017-08-12 17:17

@i++ 这个改进很不错,下个版本添加这个功能,感谢你的贡献 ^_^

2017-08-12 11:36

要特别注意:经过上面的改进以后,如果某个参数值为 null,那么所报的异常为参数个数不对,对于不知道有此扩展的背景的开发者可能会被搞糊涂,以为自己少传了参数,这也是 jfinal 为啥不直接支持的原因之一

还有一个原因是字段值是可以设置为 null 值的,所以在有些场景下 null 本身是正确的值