JFinal的简单使用

导入JFinal工程

首先要将JFinal工程放在你的工作空间目录下

然后直接在idea中打开该项目,可以运行。

 

 

展示结果

 

 

阅读JFinal的源码并对每一部分的功能进行介绍

导入完项目之后便开始看一下,JFinal开发的项目是什么样的。但是首先我是特别的蒙。并不是特别懂项目的结构。因为首先看来JFinal官方的简介。

 

 

 

Blog找到了,但只有这点儿内

 

 

而其中的set方法则是来源于

 

 

get方法中的get+类型则是对属性进行一个取值,再返回。

随后又看了_JFinalDemoGenerator类下的getDataSource()方法。

这个方法顾名思义,就是获取数据源,也就是数据库中的数据表。

 

 

代码很短,但通过官网了解到ActiveReceord中定义了addMapping(String tableName, Class<? extends Model> modelClass>)方法,该方法建立了数据库表名到Model的映射关系。

    另外,以上代码中arp.addMapping("user", User.class),表的主键名为默认为 "id",如果主键名称为 "user_id" 则需要手动指定,如:arp.addMapping("user", "user_id", User.class)。

 

接着看来service层的代码

Pageinate()方法是从数据库中查找数据对页面进行一个划分,分页操作实现需要的方法,并进行前端界面展示。

findById则是通过主键查找到对象并返回

deleteById则通过主键对表中数据进行一个删除操作。

随后看controller 的方法,该层则使用了service层的方法。

 

Index则是设置前端的界面如何展示,并且直接跳转到前端界面。

save方法则是对前端界面新添加的界面进行返回并再跳转到前端界面

edit方法则是对前端界面进行数据展示前端界面

update方法则是对前端界面修改后的对象进行保存,并展示

delete方法则是删除对象,再展示页面

add方法应该会添加对象。

 

 

 

 

 

 

 

 

 

 

 

 

接着看intercept方法

 

Interceptor 可以对方法进行拦截,并提供机会在方法的前后添加切面代码,实现 AOP 的核心目标。Interceptor 接口仅仅定义了一个方法 public void intercept(Invocation inv)。

一定要调用一次 inv.invoke(),除非是刻意不去调用剩下的拦截器与 action,这种情况仍然需要使用 inv.getController().render()/renderJson() 调用一下相关的 render() 方法为客户端响应数据。

 

 

随后看BlogValidator方法

主要作用是对代码进行校验,并且进行错误处理。

DemoConfig中的配置代码,官方说的很详细了,都是对相关配置进行操作。

而且必须需要两个文件。

 

 

否则项目是无法启动的。

最后一个方法仅是跳转到首页。

Pageinate.html进行分页操作的核心

 

 

Blog.html

 

 

 

 

 

 

 

 

 

 

 

 

 

则是展示界面的核心

以上就是我了解到的核心代码

基于JFinal完成一个简单的学生信息管理系统

首先创建数据库

 

 

 

 

随后编写实体对象方法

public M setId(String id){
   set("id",id);
   return (M)this;
}
public String getId(){
   return getStr("id");
}
public M setName(String name) {
   set("name", name);
   return (M)this;
}
public String getName(){
   return getStr("name");
}
public M setClassid(String cd) {
   set("classid", cd);
   return (M)this;
}
public String getClassid(){
   return getStr("classid");
}
public M setAge(String age) {
   set("age", age);
   return (M)this;
}
public String getAge(){
   return getStr("age");
}
public M setHeight(String h) {
   set("height", h);
   return (M)this;
}
public String getHeight(){
   return getStr("height");
}
public M setSex(String sex) {
   set("sex", sex);
   return (M)this;
}
public String getSex(){
   return getStr("sex");
}
public M setSchoolin(String d) {
   set("schoolin", d);
   return (M)this;
}
public String getSchoolin(){
   return  getStr("schoolin");
}

接着编写service代码

 

public class BlogService {
   
   /**
    * 所有的 dao 对象也放在 Service 中,并且声明为 private,避免 sql 满天飞
    * sql 只放在业务层,或者放在外部 sql 模板,用模板引擎管理:
    *           http://www.jfinal.com/doc/5-13
    */
   private Student dao = new Student().dao();
   
   public Page<Student> paginate(int pageNumber, int pageSize) {
      return dao.paginate(pageNumber, pageSize, "select *", "from student order by id asc");
   }
   
   public Student findById(int ID) {
      return dao.findById(ID);
   }
   
   public void deleteById(int ID) {
      dao.deleteById(ID);
   }
}

 

Validator代码

public class BlogValidator extends Validator {
   
   protected void validate(Controller controller) {
      validateRequiredString("student.name", "titleMsg2", "请输入学生姓名!");
      validateRequiredString("student.no", "titleMsg1", "请输入学生学号!");
//    validateRequiredString("student.Name", "titleMsg2", "请输入学生姓名!");
      validateRequiredString("student.classid", "titleMsg3", "请输入学生班级!");
      validateRequiredString("student.age", "titleMsg4", "请输入学生年龄!");
      validateRequiredString("student.height", "titleMsg5", "请输入学生身高!");
      validateRequiredString("student.sex", "titleMsg6", "请输入学生性别!");
      validateRequiredString("student.schoolin", "titleMsg7", "请输入入学日期!");

   }
   
   protected void handleError(Controller controller) {
      controller.keepModel(Student.class);
      
      String actionKey = getActionKey();
      if (actionKey.equals("/blog/save"))
         controller.render("add.html");
      else if (actionKey.equals("/blog/update"))
         controller.render("edit.html");
   }
}

 

随后编写前端的核心代码

Student.html

#@layout()
#define main()
<h1>Blog管理  
<a href="/blog/add">创建学生</a>
</h1>
<div class="table_box">
   <table class="list">
      <tbody>
         <tr>
            <th width="10%">ID</th>
            <th width="20%">姓名</th>
            <th width="10%">班级</th>
            <th width="10%">年龄</th>
            <th width="10%">身高</th>
            <th width="10%">性别</th>
            <th width="20%">入学日期</th>
            <th width="10%">操作</th>
         </tr>
         
         #for(x : blogPage.getList())
         <tr>
            <td style="text-align:left;">#(x.id)</td>
            <td style="text-align:left;">#(x.name)</td>
            <td style="text-align:left;">#(x.classid)</td>
            <td style="text-align:left;">#(x.age)</td>
            <td style="text-align:left;">#(x.height)</td>
            <td style="text-align:left;">#(x.sex)</td>
            <td style="text-align:left;">#(x.schoolin)</td>
            <td style="text-align:left;">
                 <a href="/blog/delete/#(x.id)">删除</a>
                 <a href="/blog/edit/#(x.id)">修改</a>
            </td>
         </tr>
         #end
      </tbody>
   </table>
   #@paginate(blogPage.pageNumber, blogPage.totalPage, "/blog/")
</div>
#end

 

 

_form.html

<fieldset class="solid">
   <legend>新增学生</legend>
   <input type="hidden" name="student.id" value="#(student.id??)" />#(titleMsg)
   <div>
      <label>姓名</label>
      <input type="text" name="student.name" value="#(student.name??)"/>#(titleMsg2)
   </div>
   <div>
      <label>班级</label>
      <input type="text" name="student.classid" value="#(student.classid??)"/>#(titleMsg3)
   </div>
   <div>
      <label>年龄</label>
      <input type="text" name="student.age" value="#(student.age??)"/>#(titleMsg4)
   </div>
   <div>
      <label>身高</label>
      <input type="text" name="student.height" value="#(student.height??)"/>#(titleMsg5)
   </div>
   <div>
      <label>性别</label>
      <input type="text" name="student.sex" value="#(student.sex??)"/>#(titleMsg6)
   </div>
   <div>
      <label>入学日期</label>
      <input type="text" name="student.schoolin" value="#(student.schoolin??)"/>#(titleMsg7)
   </div>
   <div>
      <label> </label>
      <input value="提交" type="submit">
   </div>
</fieldset>

 

posted @ 2022-04-11 20:20  好吗,好  阅读(496)  评论(0)    收藏  举报