手把手教你新建 jfinal 项目 (三)

在jfinal 中,可以集成 数据库访问插件 C3p0Plugin。不需要我们自己去写jdbc数据库访问类了。

首先我们需要jar包  c3p0 .和freeMark的jar包。

地址:http://sourceforge.net/projects/c3p0/

因为我使用的是oracle11g,需要 ojdbc6.0 jar包

地址:http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-112010-090769.html

步奏:

1、在web-inf下面放了jdbc.properties配置文件

手把手教你新建 jfinal 项目 (三)_第1张图片


2、我们要做一个 工人的显示页面,数据表为 worker,这个自己建。workerid是主键,这个建表随便建的。不要喷我。自己添点数据

CREATE TABLE "WORKER"
  (
    "WORKERID" NUMBER(10,0) NOT NULL ENABLE,
    "NAME"     VARCHAR2(50 BYTE),
    "GENDER"   VARCHAR2(10 BYTE),
    "NOTE"     VARCHAR2(200 BYTE),
    "PHONE"    VARCHAR2(20 BYTE),
    "SUBMITDATE" DATE,
    "CUSTOMER"   VARCHAR2(50 CHAR),
    "DEPARTMENT" VARCHAR2(50 CHAR)
  )

3、新建实体Worker类,和控制器WorkerController类。配置路径与action的映射

Worker:

/**  
 * @Project: JfinalTest 
 * @Title: Worker.java
 * @Package com.demo.entity
 * @author c_wolf your emai address
 * @date 2014-5-26 上午11:38:19
 * @Copyright: 2014 www.knowology.cn Inc. All rights reserved.
 * @version V1.0   
 */
package com.demo.entity;

import com.jfinal.plugin.activerecord.Model;


public class Worker extends Model<Worker>{
    //话说这句可以不要
      public static final Worker dao = new Worker();
}

 DemoConfig:

这个是DemoConfig.class里面的配置
public void configRoute(Routes me) {
         me.add("/hello", HelloController.class);
         me.add("/workers",WokersController.class);
    }

/**  
 * @Project: JfinalTest 
 * @Title: WokersController.java
 * @Package demo
 * @author c_wolf your emai address
 * @date 2014-5-26 上午11:41:23
 * @Copyright: 2014 www.knowology.cn Inc. All rights reserved.
 * @version V1.0   
 */
package demo;
import java.util.List;
import com.demo.entity.Worker;
import com.jfinal.aop.Before;
import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.ehcache.CacheInterceptor;
import com.jfinal.plugin.ehcache.CacheName;
import com.jfinal.plugin.ehcache.EvictInterceptor;


public class WokersController extends Controller {
    
  /**
     * index 表示根路径,对应的路径为 localhost:..../hello
     * 这里我们让它显示所有的工人。这里是使用了模板引擎 freeMark,它会根据list自动显示数据
     */
    public void index() {        
        List<Worker> list = Worker.dao.find("select * from worker where rownum<10");
        //==request.setAttribute(name, value),就是将list放入request中
        setAttr("workersList", list);
        //渲染到workers.html页面中。
        render("/workers.html");
    }
    
    /***
     * 添加用户,我们从页面接收到用户名(简单点,其他字段就为空吧)
        对应路径 /hello/add
     */
    public void add(){
        //获取前端传来的参数有几种方式,根据名字或者根据下标顺序
        String name = this.getPara("name");
        new Worker().set("workerid", "worker_ID_SEQ.nextval").set("name", name).save();
        render("/success.html");
    }
    /***
     * 这里根据ID来查询用户吧
       对应路径为 hello/id/51
     */
    public void id(){
       
        //查询ID为51的工人
        int id = this.getParaToInt(0);
        Worker w = Worker.dao.findById(id);
        //这里是按照json 格式来返回 这个工人的数据,这里可以和 jquery 的Ajax 请求配合使用
        renderJson(w);
    }
   
        
    
}

4、上一节我们已经知道了,jfinal在项目初始化的时候会自动加载配置,初始化这些 插件,所以我们只需要在 DemoConfig中配置就行了。 


public void configPlugin(Plugins me) {
        loadPropertyFile("jdbc.properties");//读取配置文件
//根据配置文件初始化c3p0插件
        C3p0Plugin c3p0Plugin = new C3p0Plugin(getProperty("jdbc.url"),
                getProperty("jdbc.username"), getProperty("jdbc.password"));
        c3p0Plugin.setDriverClass(getProperty("jdbc.driverClassName"));
        //将插件添加到Plugins中,这样在项目启动时,才能去初始化这些数据库连接池等
        me.add(c3p0Plugin);
//这个是操作数据的插件
        ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0Plugin);
        me.add(arp);
        // 配置Oracle方言
        arp.setDialect(new OracleDialect());
        // 配置属性名(字段名)大小写不敏感容器工厂。ORACLE才配置这些,以便于使用小写的属性
        arp.setContainerFactory(new CaseInsensitiveContainerFactory());       
//下面这个的意思是告诉插件,我也初始化的是worker表,主键为 workerid,对应的实体操作类为Worker,如果主键为id,
//第二个参数可以不需要,默认主键为id字段     
     arp.addMapping("worker","workerid",Worker.class);
        //当你在这里配置 表民和主键后,当程序启动时,它会根据你的表名去将这个表的信息字段等预先查询出来。
        //所以你可以在controller中执行 findbyid()等方法
/**
在 ActiveRecordPlugin 的start 方法中
 TableBuilder.build(tableList, config);
最后对每个表都有一个对应的 Table 对象
public class Table {
    
    private String name;//表名
    private String primaryKey;//主键
    private String secondaryKey = null;
//这个是字段--类型 对应的map
    private Map<String, Class<?>> columnTypeMap;    // config.containerFactory.getAttrsMap();
    
    private Class<? extends Model<?>> modelClass;

*/
       
    }

5、新建worker.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <base href="/JfinalTest/">
        <title>jfinal测试页面</title>
        <script type="text/javascript" src="Scripts/jquery-1.8.0.min.js"></script>
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
        <meta http-equiv="description" content="this is my page">
        <meta http-equiv="content-type" content="text/html; charset=UTF-8">

        <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

    </head>

    <body>

        <form action="workers/add">
            姓名:
            <input name="name" />
            <input type="submit" value="提交">
        </form>
        <div id="some_one" style="color: red;">
            页面底部的脚本将会加载一个员工显示到这里
        </div>
        <table border="1">
            <tr>
                <td>
                    姓名
                </td>
                <td>
                    性别
                </td>

            </tr>
            <#list workersList as worker>
            <tr>
                <td>
                    ${worker.NAME}
                </td>

                <td>
                    ${worker.gender}
                </td>
            </tr>
            </#list>

        </table>


        <script>
    //查询 id 为 55的 worker 信息
    $.post("workers/id/55", null, function(data) {
        var worker = data;
        $("#some_one").html("用户名:" + worker.NAME);
    }, "json");
</script>
    </body>
</html>


6、启动项目http://localhost:8050/JfinalTest/workers/


手把手教你新建 jfinal 项目 (三)_第2张图片


7、点击添加用户


手把手教你新建 jfinal 项目 (三)_第3张图片

手把手教你新建 jfinal 项目 (三)_第4张图片


你可能感兴趣的:(手把手教你新建 jfinal 项目 (三))