Jfinal项目搭建

来源:互联网 发布:mac铁锈红是什么色 编辑:程序博客网 时间:2024/05/17 15:18

JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!为您节约更多时间,去陪恋人、家人和朋友 :)


JFinal有如下主要特点:

  • MVC架构,设计精巧,使用简单

  • 遵循COC原则,零配置,无xml

  • 独创Db + Record模式,灵活便利

  • ActiveRecord支持,使数据库开发极致快速

  • 自动加载修改后的java文件,开发过程中无需重启web server

  • AOP支持,拦截器配置灵活,功能强大

  • Plugin体系结构,扩展性强

  • 多视图支持,支持FreeMarker、JSP、Velocity

  • 强大的Validator后端校验功能

  • 功能齐全,拥有struts2的绝大部分功能

  • 体积小仅339K,且无第三方依赖

搭建一个jfinal项目最少仅需要引入四个jar包

druid-1.0.5.jar                                           // 配置C3p0数据库连接池插件
jfinal-3.0-bin-with-src.jar                        //Jfinal核心包
log4j-1.2.16.jar                                         //日志包
mysql-connector-java-5.1.20-bin.jar     //数据库连接驱动


搭建Jfinal项目:

(1)引入jar包

(2)创建核心配置类

(3)修改web.xml文件


引入jar包



创建核心配置类

DemoConfig.java

package com.demo.common;import com.demo.blog.BlogController;import com.demo.common.model._MappingKit;import com.demo.index.IndexController;import com.jfinal.config.Constants;import com.jfinal.config.Handlers;import com.jfinal.config.Interceptors;import com.jfinal.config.JFinalConfig;import com.jfinal.config.Plugins;import com.jfinal.config.Routes;import com.jfinal.core.JFinal;import com.jfinal.kit.PropKit;import com.jfinal.plugin.activerecord.ActiveRecordPlugin;import com.jfinal.plugin.druid.DruidPlugin;import com.jfinal.template.Engine;/** * 本 demo 仅表达最为粗浅的 jfinal 用法,更为有价值的实用的企业级用法 * 详见 JFinal 俱乐部: http://jfinal.com/club *  * API引导式配置 */public class DemoConfig extends JFinalConfig {/**
         * 如果以此方法运行,须引入jetty-server-8.1.8.jar,如以tomcat运行,需删除
         * jetty-server-8.1.8.jar

          * 运行此 main 方法可以启动项目,此main方法可以放置在任意的Class类定义中,不一定要放于此 *  * 使用本方法启动过第一次以后,会在开发工具的 debug、run config 中自动生成 * 一条启动配置,可对该自动生成的配置再添加额外的配置项,例如 VM argument 可配置为: * -XX:PermSize=64M -XX:MaxPermSize=256M */public static void main(String[] args) {/** * 特别注意:Eclipse 之下建议的启动方式 */JFinal.start("WebRoot", 80, "/", 5);/** * 特别注意:IDEA 之下建议的启动方式,仅比 eclipse 之下少了最后一个参数 */// JFinal.start("WebRoot", 80, "/");}/** * 配置常量 */public void configConstant(Constants me) {// 加载少量必要配置,随后可用PropKit.get(...)获取值PropKit.use("a_little_config.txt");me.setDevMode(PropKit.getBoolean("devMode", false));}/** * 配置路由 */public void configRoute(Routes me) {me.add("/", IndexController.class, "/index");// 第三个参数为该Controller的视图存放路径//me.add("/blog", BlogController.class);// 第三个参数省略时默认与第一个参数值相同,在此即为 "/blog"}//配置通用模板
        public void configEngine(Engine me) {}public static DruidPlugin createDruidPlugin() {return new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());}/** * 配置插件 */public void configPlugin(Plugins me) {// 配置C3p0数据库连接池插件DruidPlugin druidPlugin = createDruidPlugin();me.add(druidPlugin);// 配置ActiveRecord插件ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);// 所有映射在 MappingKit 中自动化搞定_MappingKit.mapping(arp);me.add(arp);}/** * 配置全局拦截器 */public void configInterceptor(Interceptors me) {}/** * 配置处理器 */public void configHandler(Handlers me) {}}

创建数据库连接配置文件

a_little_config.txt

jdbcUrl = jdbc:mysql://localhost/jfinal_demo?characterEncoding=utf8&zeroDateTimeBehavior=convertToNulluser = rootpassword =devMode = true

修改web.xml文件

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"><filter><filter-name>jfinal</filter-name><filter-class>com.jfinal.core.JFinalFilter</filter-class><init-param><param-name>configClass</param-name> 
                         //该路径改为 DemoConfig.java 路径                 <param-value>com.demo.common.DemoConfig</param-value></init-param></filter><filter-mapping><filter-name>jfinal</filter-name><url-pattern>/*</url-pattern></filter-mapping></web-app>


创建控制器

IndexController.java

package com.demo.index;import com.jfinal.core.Controller;/** * 本 demo 仅表达最为粗浅的 jfinal 用法,更为有价值的实用的企业级用法 * 详见 JFinal 俱乐部: http://jfinal.com/club *  * IndexController */public class IndexController extends Controller {public void index() {render("index.html");}}


_MappingKit.java

package com.demo.common.model;import com.jfinal.plugin.activerecord.ActiveRecordPlugin;/** * 本 demo 仅表达最为粗浅的 jfinal 用法,更为有价值的实用的企业级用法 * 详见 JFinal 俱乐部: http://jfinal.com/club *  * Generated by JFinal, do not modify this file. * <pre> * Example: * public void configPlugin(Plugins me) { *     ActiveRecordPlugin arp = new ActiveRecordPlugin(...); *     _MappingKit.mapping(arp); *     me.add(arp); * } * </pre> */public class _MappingKit {public static void mapping(ActiveRecordPlugin arp) {//运行_JFinalDemoGenerator.java自动生成}}

_JFinalDemoGenerator.java

package com.demo.common.model;import javax.sql.DataSource;import com.demo.common.DemoConfig;import com.jfinal.kit.PathKit;import com.jfinal.kit.PropKit;import com.jfinal.plugin.activerecord.generator.Generator;import com.jfinal.plugin.druid.DruidPlugin;/** * 本 demo 仅表达最为粗浅的 jfinal 用法,更为有价值的实用的企业级用法 * 详见 JFinal 俱乐部: http://jfinal.com/club *  * 在数据库表有任何变动时,运行一下 main 方法,极速响应变化进行代码重构 */public class _JFinalDemoGenerator {public static DataSource getDataSource() {PropKit.use("a_little_config.txt");DruidPlugin druidPlugin = DemoConfig.createDruidPlugin();druidPlugin.start();return druidPlugin.getDataSource();}public static void main(String[] args) {// base model 所使用的包名String baseModelPackageName = "com.demo.common.model.base";// base model 文件保存路径String baseModelOutputDir = PathKit.getWebRootPath() + "/../src/com/demo/common/model/base";// model 所使用的包名 (MappingKit 默认使用的包名)String modelPackageName = "com.demo.common.model";// model 文件保存路径 (MappingKit 与 DataDictionary 文件默认保存路径)String modelOutputDir = baseModelOutputDir + "/..";// 创建生成器Generator generator = new Generator(getDataSource(), baseModelPackageName, baseModelOutputDir, modelPackageName, modelOutputDir);// 设置是否生成链式 setter 方法generator.setGenerateChainSetter(false);// 添加不需要生成的表名generator.addExcludedTable("adv");// 设置是否在 Model 中生成 dao 对象generator.setGenerateDaoInModel(true);// 设置是否生成链式 setter 方法generator.setGenerateChainSetter(true);// 设置是否生成字典文件generator.setGenerateDataDictionary(false);// 设置需要被移除的表名前缀用于生成modelName。例如表名 "osc_user",移除前缀 "osc_"后生成的model名为 "User"而非 OscUsergenerator.setRemovedTableNamePrefixes("t_");// 生成generator.generate();}}






0 0
原创粉丝点击