2020-03-20 15:10
最后在使用的时候这么来用:
ActiveRecordPlugin arp = new ActiveRecordPlugin(...);
Dialect dialect = new OracleDialect();
dialect.setModelBuilder(new MyModelBuilder());
dialect.setRecordBuilder(new MyRecordBuilder());
arp.setDialect(dialect);
me.add(arp);
简单来说就是换掉 OracleDialect 中的两个 Builder,换成你自己的
这种扩展方式就是在精确控制从 JDBC 过来的数据,对不同的数据类型进行处理
2020-03-20 15:08
@yunqi 扩展一下 :
com.jfinal.plugin.activerecord.ModelBuilder.java
当前 oracle 用的是对于上述 ModelBuilder 的扩展:
TimestampProcessedModelBuilder.java
TimestampProcessedRecordBuilder.java
通过查看 OracleDialect.java 可以知道是如何用起来的
具体办法如下:
1:继承 TimestampProcessedModelBuilder、TimestampProcessedRecordBuilder 这两个类,分别创建 MyModelBuilder、MyRecordBuilder
2:覆盖父类的 build(...) 方法,在里头添加 if 判断,处理一下 oracle 返回的 BigDeciaml 类型
3:在做的时候需要在 build 方法中添加断点,看看 BigDecimal 类型出来的时候,if 判断中的类型应该与 Types 中的那个能对应上
2020-03-19 16:56
历史上有很多人碰到过这种问题
最后的本质原因找到了,只有一个: 确实是因为发送了两次请求
具体到不同的人,发两次请求的方式不同,我举一个最罕见的例子:
在五六年前有一位同学是因为 html 中的 img 标签中的 src="", 而这个 src 为空字符串的值居然在 IE 浏览器中会自动发送一次请求,外加用户手动请求的一次,一共两次
不同的人可能会用不同的方式触发了两次请求,但有一点可以肯定:绝对不要在 jfinal 上找原因,jfinal 绝对不可能自发请求两次
解决问题的具体办法是:
1:在后台代码找原因:在被请求的地方设置断点,查看请求调用栈
2:在前端代码找原因:打开浏览器的开发者工具,进入 network 栏,查看发送请求的次数
2020-03-18 23:19
@mscedifier 这个信息对于每个被代理的类来说只会输出一次,第二次请求的时候就不会输出了
因为生成代理只需要一次