2018-09-22 11:55

@JFinal 我正好也遇到这个问题,问下。
if (value instanceof java.util.Date) {
if (value instanceof java.sql.Timestamp) {
return "\"" + new SimpleDateFormat(timestampPattern).format(value) + "\"";
}
数据库用的DateTime,发现是java.util.date,为啥 进来正好,又判断为 java.sql.Timestamp。Timestamp extends java.util.Date

难道是因为 JFinal把数据的DateTime映射为 Timestamp类型,我去确认下。

2018-09-22 11:53

@小徐同学 我也正在看这个。

2018-09-22 11:45

@杜福忠 参考你的思路,搞了个 测试专用的插件。测试代码和正常代码分开维护。

2018-09-22 10:53

@fansunion 参考你的思路,搞了个 测试专用的插件。测试代码和正常代码分开维护。

public abstract class TestPlugin implements IPlugin{

@Override
public boolean start() {
LogKit.info("-----------JTN测试插件Start成功----------");
LogKit.info("-----------JTN测试插件,start doTest----------");
doTest();
LogKit.info("-----------JTN测试插件,end doTest----------");
return true;
}

protected abstract void doTest();

@Override
public boolean stop() {
LogKit.info("-----------JTN测试插件Stop成功----------");
return true;
}

}
public class BgjTestPlugin extends TestPlugin{

@Override
protected void doTest() {
BrandAdminService brandService = BrandAdminService.me;
Brand brand = new Brand();
brand.setYn(1);
brand.setCategoryId(4);
List list=brandService.list(brand);
Map brandMap=brandService.findByIdListAsMap(Arrays.asList(1,2,3));
System.out.println(list.size());

}

}
me.add(new BgjTestPlugin());

2018-09-22 09:35

@JFinal 目前写了 后台的CRUD,全都是 单表查询足够了,而且几乎都是 BaseService里的方法。BaseController也满足大部分的需要。

2018-09-22 09:35

@JFinal 单表类sql,全部用java的方法,看起来清晰简单。多表复杂查询,用 模版足够了。一般情况下,没有必要使用多表查询,sql复杂,不好维护,性能也容易出问题。 分页查询并且 条件是关联表的字段时,才需要联合查询。 关联id尽可能全部层,包括关联id表的关联id。 name等非索引之类的,看情况。

2018-09-21 09:19

@杜福忠 多谢提供思路。

2018-09-20 19:14

public class BrandAdminController extends BaseController {

private BrandAdminService service = BrandAdminService.me;

@Override
protected BrandAdminService getService() {
return service;
}
}
符合需求的标准化 Controoler,几行代码就行。
如果变化,再重载或重写一个。
Service完全可以服用,Model/Dao 用 JFinal底层的。
666。
页面,目前考虑用vue,jquery,layui之类的,然后再选择 tree、日期、弹出层等单一牛逼的组件

2018-09-20 19:11

后续再优化。Hibernate、Mybatis、JFinal,各种版本的 CRUD。单表操作,非常快。一般不用联表查询。打好基础,今后重在业务和核心技术。

2018-09-20 19:10

public void test() {
BrandAdminService brandService = BrandAdminService.me;
Brand brand = new Brand();
brand.setYn(1);
brand.setCategoryId(4);
List list=brandService.list(brand);
System.out.println(list.size());
}

public List list(T model){
Table table=TableMapping.me().getTable(model.getClass());
String whereSql = buildWhereSql(model, table);
String sql="select * from " + getTableName() + whereSql;
List list=getDao().find(sql);
return list;
}

public String buildWhereSql(T model, Table table) {
String whereSql=" where 1 = 1";
Set>> set=table.getColumnTypeMapEntrySet();
for(Entry> entry:set){
String columnName=entry.getKey();
String attrName= StrKit.toCamelCase(columnName);
//String getterMethodName = "getter"+StringUtils.capitalize(attrName);
Object attrValue=ReflectionKit.getProperty(model, attrName);
if(attrValue != null){
whereSql+= " and "+columnName+"="+attrValue;
}
}
return whereSql;
}

搞定了。

2018-09-20 18:53

@JFinal com.jfinal.kit.StrKit.toCamelCase(String) 看过源码就是爽,哈哈哈

2018-09-20 18:47

@JFinal 怎么匹配到 java对应的属性名呢? 比如 数据库字段叫做user_name,jfinal 转换为 userName,那么 model的get方法为 getUserName。 userName怎么根据列名 找到呢?正在研究