JFinal

2019-05-19 19:35

@RichardHe 还有一个办法,找一个同事将 maven 库已下载的文件,整体打个包发给你,省下下载时间

JFinal

2019-05-19 19:34

@泰山日出 通过代码:
new DictCustom().findById(id)

可以猜出你的对象是 model, 那么你的 #(dictCustom.function_name??) 具体行为如下:
1:先找 dictCustom.getFunction_name() 方法,找到则调用
2:直接调用 dictCustom.get("function_name") 方法

查看一下上面两个是否可以获取到值,在 getFunction_name() 方法以及 Model.get(String) 方法中设置断点,看程序走没走这里

这里可能的问题在于:不要认为会调用 getFunctionName() 方法,这里的 getter 方法并不会理会下划线,只会将 fieldName 的首字线变大写字母,并在之前添加 "get",即:
getFunction_name()

JFinal

2019-05-19 19:30

@RichardHe 我天天都在用的,没有问题,注意要配置好 maven conf 目录下的 settings.xml

JFinal

2019-05-19 17:11

@zzutligang 这个问题是 java 有关线程安全的基础问题,大致就是:只要对象可能被多线程使用,这个对象就必须保障是线程安全的

JFinal

2019-05-19 17:10

最简单是通过直接配置 mysql 为读写分离,做主从配置,主库可读写,从库只读。这种方案对于你的代码来说是透明的,是最省事的

再一个就是直接使用第三方中间件,类似于 shareding jdbc、mycat 之类的,同样也是对你的代码透明化,代码完全不需要知道这件事

如果你非要自己写代码解决,做个全局拦截器,参考 Tx.java,事先往 Config 中的 ThreadLocal 中放入 Connection 对象,后续一切数据库操作都会使用这个 Connection,从而实现读写分离

全局拦截器大致为:
String methodName = nv.getMethodName();
Connection conn;
// 根据 methodName 判断出是写库操作
if (isWriteDb(methodName)) {
conn = DbKit.getConfig("写库数据源对应的 configName").getDataSource().getConnection();
} else { // 读库操作
conn = DbKit.getConfig("读库数据源对应的 configName").getDataSource().getConnection();
}

// 设置到 ThreadLocal 中去,当前线程后续的所有数据库操作都将用到这个 conn
DbKit.getConfig().setThreadLocalConnection(conn);

try {
inv.invoke();
}finally {
DbKit.getConfig().removeThreadLocalConnection();
}

注意,使用上面的方法以后,后面的数据库操作就不要再使用 Db.use(...)、model.use(...) 方法了,否则将覆盖掉上面拦截器的努力

@海哥 的 jpress 或 jboot 项目就是通过拦截器实现的读写分离,可以参考一下

JFinal

2019-05-19 15:05

文档中有关 field 表达式的输出优先级已经逐一列出,这里的关键在于 “优先级” , 从上到下,只要碰到了满足的条件,后面的将会被跳过

JFinal

2019-05-19 12:03

注意观察 TaskNote dao 这个变量,前方是有 static 修饰的,意味着这个变量是全局共享的,所有线程都可以用它

那么,这个 dao 对象就 “不是” 线程安全的,所以在 new TaskNote() 的时候,后面追加一个 dao() 方法,可以让这个对象变成线程安全的,可以全局共享

但是变成线程安全就必须限制对 dao 对象的写操作,否则就不会线程安全

综上,你去掉了 dao() 方法,必然导致极多的问题,如果你一定要使用 use 方法,这么来用才可保证线程安全:
new TaskNote().use(...).find(...)

也就是说临时 new 出来对象,再 use(...)

JFinal

2019-05-19 12:00

这个问题可大可小,看你的数据规模,如果数据量小,用普通的查询与缓存就好

如果规模很大,找找现成的方案,甚至自己写算法

根据自己的场景选择适合的就好,做技术的切忌做着 10 万数据量的事,操着亿级数据量的心

JFinal

2019-05-19 11:57

@netwild 这个方案复杂度、学习成本都提升了,而且会拉低 jfinal 的 aop 性能,而这个需求其实并不强烈

所以暂不支持这个方案,否则会得不偿失

JFinal

2019-05-19 11:56

maven 下载 jar 包只是第一次比较慢,而且不需要翻墙,更重要的是你可以配置 maven 指向阿里提供的公共库,速度极快:
https://blog.csdn.net/bladeandmaster88/article/details/88071344
https://www.cnblogs.com/charlesblc/p/6104804.html

最后,既然还是菜鸟,反正也是学新东西,还不如一步到位学最有用的东西,以免后面还得再学一次,可节省学习成本

最后的最后, maven 用起来要学的知识点极少, 10 分钟足够了,本站就有学习文档:
https://www.jfinal.com/doc/1-1

JFinal

2019-05-18 16:47

@happyboy XML 管理 sql 有太多干扰,而且无关的文本很多,例如:你无法在 xml 中自由使用大于号小于号

JFinal

2019-05-18 16:46

你自己可以用别的注解做个实验,都一样的结果,当年 jfinal 做这个功能的时候比任何人都希望拥有可继承的功能

JFinal

2019-05-18 16:45

确实是这样的一个行为, 但是这个是 java 语言的规则,是 jfinal 无法插手的

继承过来的方法,如果子类中的方法有 @Before , 则父类的将失效

JFinal

2019-05-17 17:25

最简单好用的是这个:
https://www.jfinal.com/doc/5-13

JFinal

2019-05-17 11:36

jfinal demo 中有现在的,改一两个参数直接用上即可

代码中有注释,参数的含义一目了然