自分で書いたJFinalのBaseControllerを共有(3)
2311 ワード
自分で書いたJFinalのBaseControllerを共有(2)
今日はたまたまブログをめくって、自分が回り道をしていることに気づきました.モデルのclassを変数として保存し、毎回取りに行かなくてもよい. はもともとclassを手に入れていたので、forNameにも行きました.当時は最初のバージョンから2番目のバージョンに変更されたので、詳しく見ていませんでした.最初のバージョンも同じ問題です.
修正後のBaseControllerコードは以下の通りです.
今日はたまたまブログをめくって、自分が回り道をしていることに気づきました.
修正後の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() + "");
}
}