 
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 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-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: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怎么根据列名 找到呢?正在研究