jfinal3.2+maven+idea

阅读更多

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

 
jfinal3.2+maven+idea_第1张图片
 
jfinal3.2+maven+idea_第2张图片
 2:右键项目名,加入web application。


jfinal3.2+maven+idea_第3张图片
3:添加pom.xml,依赖包

 



    4.0.0

    jfinal_demo
    jfinal_demo
    1.0-SNAPSHOT

    
    
        UTF-8
        3.2
        4.12
    

    
    
        
        
            junit
            junit
            ${junit.version}
        
        
        
            com.jfinal
            jfinal
            ${jfinal.version}
        
        
        
            mysql
            mysql-connector-java
            5.1.27
            runtime
        
        
        
        
            com.alibaba
            druid
            1.1.5
        
        
        
        
            com.jfinal
            jetty-server
            8.1.8
            
            compile
        
        
        
        
            org.apache.logging.log4j
            log4j-core
            2.9.1
        
        
    

    
    
        
        ${project.artifactId}

        
        

            
            
                org.apache.maven.plugins
                maven-resources-plugin
                2.7
                
                    ${project.build.sourceEncoding}
                
            

            
            
                org.apache.maven.plugins
                maven-compiler-plugin
                3.2
                
                    1.7
                    1.7
                    ${project.build.sourceEncoding}
                
            
        

        
        
            
                
                
                    org.apache.tomcat.maven
                    tomcat7-maven-plugin
                    2.2
                    
                        
                        80
                        
                        /
                    
                
            
        
    

 注意:如果要用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 users = Db.find("select * from user where age > 18");

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

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


jfinal3.2+maven+idea_第4张图片
 这里就不多说们基本上就是显示,模板定义和引用定义模板等

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



    jfinal-demo
    
    
        jfinal
        com.jfinal.core.JFinalFilter
        
            configClass
            config.DemoConfig
        
    
    
        jfinal
        /*
    

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

        1:jetty

         
jfinal3.2+maven+idea_第5张图片
 

        2:tomcat

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


jfinal3.2+maven+idea_第7张图片
 打完手工。

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

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

 

  • jfinal3.2+maven+idea_第8张图片
  • 大小: 93.3 KB
  • jfinal3.2+maven+idea_第9张图片
  • 大小: 38.2 KB
  • jfinal3.2+maven+idea_第10张图片
  • 大小: 61.6 KB
  • jfinal3.2+maven+idea_第11张图片
  • 大小: 6.8 KB
  • jfinal3.2+maven+idea_第12张图片
  • 大小: 96.5 KB
  • jfinal3.2+maven+idea_第13张图片
  • 大小: 61.8 KB
  • jfinal_demo.zip (7.2 MB)
  • 下载次数: 1
  • jfinal3.2+maven+idea_第14张图片
  • 大小: 111.9 KB
  • 查看图片附件

你可能感兴趣的:(jfinal3.2+maven+idea)