自分で書いたJFinalのBaseControllerを共有(3)

2311 ワード

自分で書いたJFinalのBaseControllerを共有(2)
今日はたまたまブログをめくって、自分が回り道をしていることに気づきました.
  • モデルのclassを変数として保存し、毎回取りに行かなくてもよい.
  • はもともとclassを手に入れていたので、forNameにも行きました.当時は最初のバージョンから2番目のバージョンに変更されたので、詳しく見ていませんでした.最初のバージョンも同じ問題です.

  • 修正後のBaseControllerコードは以下の通りです.
    import java.lang.reflect.ParameterizedType;
    import java.lang.reflect.Type;
    import com.jfinal.core.Controller;
    import com.jfinal.plugin.activerecord.Db;
    import com.jfinal.plugin.activerecord.Model;
    import com.jfinal.plugin.activerecord.Page;
    import com.jfinal.plugin.activerecord.Record;
    /**
     *  CRUD
     * 
     * @author hexin
     * 
     * @param <M> Model
     */
    public class BaseController<M extends Model<M>> extends Controller {
     public BaseController() {
      //  class , 
      this.setModelClass(getClazz());
     }
     /**
      *  M class
      * 
      * @return M
      */
     @SuppressWarnings("unchecked")
     public Class<M> getClazz() {
      Type t = getClass().getGenericSuperclass();
      Type[] params = ((ParameterizedType) t).getActualTypeArguments();
      return (Class<M>) params[0];
     }
     protected Class<M> modelClass;
     public Class<M> getModelClass() {
      return modelClass;
     }
     public void setModelClass(Class<M> modelClass) {
      this.modelClass = modelClass;
     }
     /**
      *  
      */
     public void getByPage() {
      Page<Record> list = Db
        .paginate(getParaToInt("pageNumber"), getParaToInt("pageSize"),
          "select *", "from " + getModelClass().getSimpleName()
            + " order by id desc");
      renderJson(list);
     }
     /**
      *  
      */
     public void getAll() {
      renderJson(Db.find("select * from " + getModelClass().getSimpleName()
        + " order by id asc;"));
     }
     /**
      *  id 
      */
     public void getById() {
      renderJson(Db.findById(getModelClass().getSimpleName(),
        getParaToInt("id")));
     }
     /**
      *  
      * 
      * @throws Exception
      */
     public void save() throws Exception {
      renderText((getModel(getModelClass())).save() + "");
     }
     /**
      *  
      * 
      * @throws Exception
      */
     public void update() throws Exception {
      renderText(getModel(getModelClass()).update() + "");
     }
     /**
      *  
      * 
      * @throws Exception
      */
     public void delete() throws Exception {
      renderText(getModel(getModelClass()).delete() + "");
     }
    }