在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配置文件
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/
7、点击添加用户