在JFinal中,除了Model可以对数据库进行操作之外,JFinal还提供了Db+Record模式来对数据库进行操作。
Record相当于一个通用的Model,不同的是Record只能够承载数据,需要借助DB类来进行数据库的操作。而Model类既可承载数据也可以对数据库进行操作。(Record类里只使用Map来存储数据库里每一列的字段,DB类封装了数据库的常用操作:save,update,delete,find/query。
下面,我们来看一下Db+Record的一些使用方法:
package com.controller;
import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import com.model.Blog;
import java.util.List;
import java.util.Map;
public class RecordController extends Controller{
/**
* 查询所有blog
*/
public void index(){
List<Record> bloglist= Db.find("select * from blog");
setAttr("bloglist",bloglist);
renderJsp("BlogList.jsp");
}
/**
*根据id删除blog
*/
public void deleteBlog(){
Db.deleteById("blog",getParaToInt("id"));
redirect("/record");
}
/**
* 添加blog
*/
public void saveBlog(){
Record blogs=new Record().set("title",getPara("title")).set("content",getPara("content")).set("category",getPara("category"));
Db.save("blog","id",blogs);
redirect("/record");
}
public void edit(){
Integer id=getParaToInt("id");
if(id !=null && id>0){
Record blog=Db.findById("blog",id);
setAttr("blog",blog);
render("blogUpdate.html");
}
}
/**
* 更新
*/
public void updateBlog(){
Record record=new Record();
record.set("id",getPara("blog.id"));
record.set("title",getPara("blog.title"));
record.set("content",getPara("blog.content"));
Db.update("blog",record);
redirect("/record");
}
/**
* 分页查询
*/
public void paginate(){
Integer pageNumber=getParaToInt("pageNumber");
if(pageNumber==null){
pageNumber=1;
}
Page<Record> page=Db.paginate(pageNumber,5,"select *","from blog");
setAttr("blogPage",page);
renderJsp("page.jsp");
}
}
在updateBlog()方法中,我们可以看出,与使用Model模式相比,Model为我们提供了getModel()方法来获取request中的数据,而Db+Record模式并没有这样的方法,因此,当我们需要获得一个Record对象的时候,我们需要自己构造。