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