`

jfinal3.2+maven+idea

 
阅读更多

1:新建一个maven项目,file->new->project->maven,输入组名包名项目名。

 

 

 2:右键项目名,加入web application。



3:添加pom.xml,依赖包

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>jfinal_demo</groupId>
    <artifactId>jfinal_demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <!-- 集中定义依赖版本号 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <jfinal.version>3.2</jfinal.version>
        <junit.version>4.12</junit.version>
    </properties>

    <!--集中声明依赖-->
    <dependencies>
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>${junit.version}</version>
        </dependency>
        <!--jfinal依赖-->
        <dependency>
            <groupId>com.jfinal</groupId>
            <artifactId>jfinal</artifactId>
            <version>${jfinal.version}</version>
        </dependency>
        <!--数据库需要包start-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.27</version>
            <scope>runtime</scope>
        </dependency>
        <!--数据库需要包end-->
        <!--链接池-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.5</version>
        </dependency>
        <!--链接池-->
        <!--jetty-->
        <dependency>
            <groupId>com.jfinal</groupId>
            <artifactId>jetty-server</artifactId>
            <version>8.1.8</version>
            <!--
                此处的 scope 值为 compile 仅为支持 IDEA 下启动项目
                打 war 包时需要改成 provided,以免将一些无用的 jar 打进去
            -->
            <scope>compile</scope>
        </dependency>
        <!--jetty-->
        <!--log4j-->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.9.1</version>
        </dependency>
        <!--log4j-->
    </dependencies>

    <!--定义编译相关内容-->
    <build>
        <!--定义编译后的包名-->
        <finalName>${project.artifactId}</finalName>

        <!--此标签下的是将要加载的插件-->
        <plugins>

            <!-- 资源文件拷贝插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.7</version>
                <configuration>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>

            <!-- java编译插件 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>1.7</source>
                    <target>1.7</target>
                    <encoding>${project.build.sourceEncoding}</encoding>
                </configuration>
            </plugin>
        </plugins>

        <!--此标签用于声明插件版本以便统一管理-->
        <pluginManagement>
            <plugins>
                <!-- 配置Tomcat插件 -->
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat7-maven-plugin</artifactId>
                    <version>2.2</version>
                    <configuration>
                        <!--配置端口号-->
                        <port>80</port>
                        <!--配置访问路径,此处配置为根目录,即http://localhost/-->
                        <path>/</path>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

 注意:如果要用jetty,jetty别用新包9.*,会报缺少文件错误。

 

4:在config报下建DemoConfig。这里的代码我直接copy官网配置。

 

package config;

import com.jfinal.config.*;
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;
import controller.BlogController;
import controller.IndexController;
import entity._MappingKit;

/**
 * api 引导配置
 */
public class DemoConfig extends JFinalConfig {
    /**
     * 运行此 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("web", 8080, "/");
    }

    /**
     * 配置常量
     */
    public void configConstant(Constants me) {
        // 加载少量必要配置,随后可用PropKit.get(...)获取值
        PropKit.use("config.properties");
        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) {
        me.addSharedFunction("/common/_layout.html");
        me.addSharedFunction("/common/_paginate.html");
    }

    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) {

    }
}

 注意:如果你用tomcat,那么不用考虑main中的方法。如果你用右键DEBUG运行那么要注意把demo中的webRoot改为web,更改view层的路径。重点关注,加载静态配置文件和数据库插件配置、配置控制器路由,用的比较多。

 

5:新建控制器,这点要鄙视一下,外面很多团队用这个框架的时候完全赶速度,不分层,把后面维护的朋友坑苦了。

 

package controller;

import com.jfinal.aop.Before;
import com.jfinal.core.Controller;
import entity.Blog;

/**
 * 本 demo 仅表达最为粗浅的 jfinal 用法,更为有价值的实用的企业级用法
 * 详见 JFinal 俱乐部: http://jfinal.com/club
 * 
 * BlogController
 * 所有 sql 与业务逻辑写在 Model 或 Service 中,不要写在 Controller 中,养成好习惯,有利于大型项目的开发与维护
 */
@Before(BlogInterceptor.class)
public class BlogController extends Controller {
	
	static BlogService service = new BlogService();
	
	public void index() {
		setAttr("blogPage", service.paginate(getParaToInt(0, 1), 10));
		render("blog.html");
	}
	
	public void add() {
	}
	
	/**
	 * save 与 update 的业务逻辑在实际应用中也应该放在 serivce 之中,
	 * 并要对数据进正确性进行验证,在此仅为了偷懒
	 */
	@Before(BlogValidator.class)
	public void save() {
		getModel(Blog.class).save();
		redirect("/blog");
	}
	
	public void edit() {
		setAttr("blog", service.findById(getParaToInt()));
	}
	
	/**
	 * save 与 update 的业务逻辑在实际应用中也应该放在 serivce 之中,
	 * 并要对数据进正确性进行验证,在此仅为了偷懒
	 */
	@Before(BlogValidator.class)
	public void update() {
		getModel(Blog.class).update();
		redirect("/blog");
	}
	
	public void delete() {
		service.deleteById(getParaToInt());
		redirect("/blog");
	}
}


 总结:在此感谢框架创建者提供的DEMO。很全crud和分页,验证都有。这里主要是用model+activeRecord的方式来交互数据库。还有一种是DB+record的方式,如下图。

 

 

// 创建name属性为James,age属性为25的record对象并添加到数据库
Record user = new Record().set("name", "James").set("age", 25);
Db.save("user", user);

// 删除id值为25的user表中的记录
Db.deleteById("user", 25);

// 查询id值为25的Record将其name属性改为James并更新到数据库
user = Db.findById("user", 25).set("name", "James");
Db.update("user", user);

// 查询id值为25的user
user = Db.findById("user", 25);

// 获取user的name属性
String userName = user.getStr("name");

// 获取user的age属性
Integer userAge = user.getInt("age");

// 查询所有年龄大于18岁的user,并输出其name属性
List<Record> users = Db.find("select * from user where age > 18");

// 分页查询性别为1并且年龄大于18的user,当前页号为1,每页10个user
Page<Record> userPage = Db.paginate(1, 10, "select *", "from user where sex=? and age>?", 1, 18);

6:加入视图控制,demo上给的是jfinal-view默认模板引擎,这个大家看个人喜好



 这里就不多说们基本上就是显示,模板定义和引用定义模板等

7:在web.xml中加入jfinal过滤器,配置DemoConfig.

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <display-name>jfinal-demo</display-name>
    <!--配置jfinal过滤器-->
    <filter>
        <filter-name>jfinal</filter-name>
        <filter-class>com.jfinal.core.JFinalFilter</filter-class>
        <init-param>
            <param-name>configClass</param-name>
            <param-value>config.DemoConfig</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>jfinal</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

  8:启动运行,有2中方式

        1:jetty

         

 

        2:tomcat

         

 总结:mysql包如果不能正常下来,可以百度找到,demo压缩包如附件,如果大家出现maven中的包无法发布到发布文件中,可以右键项目名,打开open module setting。如下图操作即可



 打完手工。

感想:优点是做企业网站或者erp、cms之类用jfinal的确能提升开发效率,入手简单。不足吧,个人觉得,面向切面这块,如果出现问题,可查找资料比较少,性能这块,因为主要是反射和静态类,比传统的IOC容器来说性能上差点。具体数字要看专业测试部门。

JFinal官方网址: http://www.jfinal.com

 

  • 大小: 93.3 KB
  • 大小: 38.2 KB
  • 大小: 61.6 KB
  • 大小: 6.8 KB
  • 大小: 96.5 KB
  • 大小: 61.8 KB
  • 大小: 111.9 KB
分享到:
评论

相关推荐

    jfinal3.2 demo maven idea

    本篇将深入探讨基于IDEA的JFinal 3.2的Maven Demo项目。JFinal是一款高效的Java Web开发框架,它以其轻量级、高性能和易用性受到许多开发者的青睐。JFinal 3.2是该框架的一个版本,引入了更多优化和改进,使得开发...

    jfinal3.2_all

    《JFinal 3.2 全面解析:框架特性与实战应用》 JFinal 是一个基于 Java 语言的轻量级 Web 开发框架,它的设计理念是简单、高效,旨在提高开发效率,降低项目维护成本。在 JFinal 3.2 版本中,该框架进一步优化了...

    JFinal3.2-all中文开发文档和各种Jar包-CSDN下载

    1. 新建项目:利用Maven或Gradle创建新的Java Web项目,引入JFinal的依赖。 2. 配置路由:定义Action,通过`@Before`、`@After`注解添加拦截器,实现请求处理逻辑。 3. 数据库操作:利用ActiveRecord或SqlMap进行...

    JFinal+Maven+FreeMarker入门实例

    在"JFinal+Maven+FreeMarker入门实例"中,我们将看到如何配置和使用这些工具。首先,我们需要在项目根目录下创建一个`pom.xml`文件,这是Maven项目的配置文件。在这里,我们需要列出所有依赖项,包括JFinal和...

    JFinal3.2中文开发文档和Jar包

    **JFinal 3.2** 是一款基于Java语言的轻量级Web开发框架,它以其高效、简洁的特性深受开发者喜爱。本资源包含的是JFinal 3.2的中文开发文档和对应的Jar包,这对于使用该框架进行项目开发的程序员来说,无疑是一份...

    JFinal+freemarker+maven demo实例

    总结来说,"JFinal+freemarker+maven demo实例"是一个典型的Java Web项目架构,展示了如何利用这三个工具进行高效开发。JFinal提供了快速开发的基础,FreeMarker实现了动态视图,而Maven则保证了项目的构建和管理。...

    jfinal3.2jar包src源码以及文档

    《深入解析JFinal 3.2:源码与文档详解》 JFinal 是一款基于 Java 语言的轻量级 Web 开发框架,它以其高效、简洁的特性深受开发者喜爱。本篇文章将围绕“jfinal3.2jar包src源码以及文档”这一主题,深入剖析 JFinal...

    maven整合jfinal+mysql

    在IT行业中,构建Java Web应用是一项常见的任务,而"Maven整合JFinal+MySQL"就是这样的一个实践案例。这里我们将深入探讨这个主题,了解如何利用Maven构建工具、JFinal轻量级框架以及MySQL数据库来创建一个高效且...

    基于jfinal+element ui+vue的开源商城管理系统.zip

    基于jfinal+element ui+vue的开源商城管理系统 基于jfinal+element ui+vue的开源商城管理系统 基于jfinal+element ui+vue的开源商城管理系统 基于jfinal+element ui+vue的开源商城管理系统 基于jfinal+element ...

    基于 JFinal2.0 + Bootstrap + SeaJS + FullC的终极排班管理系统

    基于 JFinal2.0 + Bootstrap + SeaJS + FullC的终极排班管理系统对人员信息的维护,增删改查等,对人员进行分组,对不同的任务或者部门人员分组来管理排班,分组支持增删改查等,排班班次设置,支持自定义班次名称、...

    jfinal培训+shiro介绍

    jfinal培训+shiro介绍 Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能: 认证 - 用户身份识别,常被称为用户“登录”; 授权 - 访问控制; 密码加密 - 保护或隐藏数据防止被...

    SSM+Maven+Jfinal+仓库管理系统

    【SSM+Maven+Jfinal+仓库管理系统】是一个典型的Java Web项目,它结合了Spring、Spring MVC和MyBatis(SSM)三大框架,并利用Maven进行项目管理和依赖管理,同时引入了Jfinal作为轻量级的开发框架,旨在构建一个高效...

    jfinal+maven

    《JFinal与Maven结合构建项目实践指南》 在当今的软件开发领域,高效、便捷的框架和构建工具是开发者的重要助手。本文将深入探讨如何使用Java轻量级框架JFinal与项目管理工具Maven相结合,搭建一个高效、可维护的...

    jfinal3.3+dubbo2.5.8+zookeeper-3.4.9

    jfinal3.3+dubbo2.5.8+zookeeper-3.4.9的集群框架,zookeeper自己网上去下一个,我是根据糊搞大神的文章来的;这里只共享了jfinal和dubbo集成的代码;如有问题希望各位大神指点指点,具体的参考可以去...

    Jfinal-3.2手册

    在 IntelliJ IDEA 中开发 JFinal 项目时,可以直接利用 IDEA 的 Maven 集成功能来管理 JFinal 依赖,并通过内置的 Tomcat 服务器进行调试。 **1.9 特别声明** 作者特别指出了一些关于 JFinal 使用上的注意事项,...

    基于jfinal+vue+ElementUI的前后端分离CRM系统.zip

    基于jfinal+vue+ElementUI的前后端分离CRM系统 主要技术栈 核心框架:jfinal3.8 缓存:redis caffeine 数据库连接池:Druid 工具类:hutool,fastjson,poi-ooxml 定时任务:jfinal-cron 项目构建工具:maven ...

    jfinal最新版本3.2文档

    在Maven中,可以通过添加JFinal依赖到pom.xml文件中来集成JFinal,而在IDEA中,则可以通过创建一个新的项目,并按照文档指导进行配置。 ### 第二部分:JFinalConfig #### 配置核心组件 这部分主要讲解了如何配置...

    基于jfinal+shiro+layui+freemarker等框架和技术结合maven多模块方式构建开发的一款通用内容发布系统

    《构建通用内容发布系统:深度解析jfinal+shiro+layui+freemarker技术栈》 在当前数字化时代,内容发布系统的建设对于企业、组织和个人来说至关重要,它们为信息传播提供了便捷的平台。本文将深入探讨一款基于...

    jfinal_manual_3.2_jfinal最新手册

    ### JFinal 3.2 手册核心知识点详解 #### 第一章 快速上手上手 ##### 1.1 创建项目 - **步骤**:首先需要创建一个新的Java Web项目。 - **工具**:可以使用Eclipse、IntelliJ IDEA等开发工具进行创建。 - **环境**...

Global site tag (gtag.js) - Google Analytics