jFinal自建baseService复用咨询

感觉每次重复写Service很麻烦,所以想着能不能做做一个基础的service(把很多系统自用的方法写这里),然后每次表新建service的时候,直接extends这个基础service不是少写很多代码。

基础service

public class BaseService {
    protected Model tableClass ;
    protected String tableName ;

    //查询
    public Map<String, Object> getData(String json) {
        ...省略代码
            map.put("data", tableClass.dao().paginate(1, 10, "select *", " from " + tableName + " order by sequ asc"));
        ...省略代码
    }

    //新增,更新
    @Before(Tx.class) //如果新增或者更新有问题,直接回滚
    public Map<String, Object> upData(String json) {
        ...省略代码
                tableClass = JSONObject.parseObject(JSONObject.toJSONString(json), tableClass.getClass());
        ...省略代码
                tableClass.update();
        ...省略代码
    }

    //删除
    @Before(Tx.class) //如果删除有问题,直接回滚
    public Map<String, Object> delData(String id) {
        ...省略代码
                tableClass.dao().deleteById(id);
        ...省略代码
    }
}

业务service

public class SysMenuService extends BaseService{

    public SysMenuService(){
        super.tableName ="sys_menu";
        super.tableClass = new SysMenu();
    }

}

业务controller

public class SysMenuController extends Controller {

    SysMenuService service=new SysMenuService();

    //查询数据
    public void getdata(){
        String data =getPara("data");
        renderJson(service.getData(data));
    }

    //新增、更新数据
    public void updata(){
        String data =getPara("data");
        renderJson(service.upData(data));
    }

    //删除数据
    public void deldata(){
        String data =getPara("data");
        renderJson(service.delData(data));
    }

}

请问大神

1、以上代码这么写是否合适,是否还有更好的方法;

2、从性能方面是否合理;

3、追加问一下Db和Model操作,是否性能一致,感觉Db更方便一些;

4、每建立一个表,都要写一个service和一个controller,这块能否有更好的方式,比如写一个通用的,然后动态调用配置文件;

5、最终目标就是自动生成表model,然后数据库里面写配置文件,service和controller就一个(除了特殊方法单独写),然后就可以直接使用了。是否有这样的例子参考。

谢谢!

评论区

netwild

2018-07-12 10:15

为你的项目写一个BaseService是必须的
可以写成抽象类,提供常用的上下文操作、ORM操作
然后各业务Service全部继承这个BaseService,同时实现单列
Controller中直接引用这个单列的Service即可

再高级一点,利用guice实现业务Service的注入

再再高级一点,为每个Model自动生成对应的Service

JFinal

2018-07-12 11:56

1: 是否有 BaseService 取决于代码重用的程序是否高
2:性能完全没有影响
3:Db 与 Model 的性能完全一样。尽可能使用 Model,Db + Record 模式作为补充。model 有类型有 getter、setter 方法,对于开发会更友好些。Db + Record 可以做到一些 Model 做不到的事情,例如,一次性更新多条记录:
Db.update("update .... where id > ?", 123);
而 Model 的 update() 方法只能更新它自己
4:建议手写这部分代码,jfinal 已经很省代码了,还是要稍微写点代码的,更有掌控感
5:目前没有例子

热门反馈

扫码入社