1. 程式人生 > >maven整合jfinal(輕量級框架)

maven整合jfinal(輕量級框架)

      前段時間有機會接觸了下jfinal這個框架,感覺用來寫一些小型的入口網站或者業務簡單的功能性網站比較實用,上手簡單,開發快。

      首先介紹一下Jfinal,它是一個基於MVC模式的WEB+ORM框架。有以下特點:

1.MVC架構,設計精巧,使用簡單

2.遵循COC原則,零配置,無xml

3.獨創Db + Record模式,靈活便利

4ActiveRecord支援,使資料庫開發極致快速

5.自動載入修改後的java檔案,開發過程中無需重啟web server

6AOP支援,攔截器配置靈活,功能強大

7.Plugin體系結構,擴充套件性強

8.多檢視支援,支援FreeMarker、JSP、Velocity

9.強大的Validator後端校驗功能

10.功能齊全,擁有struts2的絕大部分功能

11.體積小僅248K,且無第三方依賴

好了,廢話不多說,直接開幹!

專案結構圖


1.新建一個maven專案(這個步驟不多說,附:pom.xml依賴)

	<dependencies>
	<!-- jfinal 核心包 -->
		<dependency>
			<groupId>com.jfinal</groupId>
			<artifactId>jfinal</artifactId>
			<version>2.2</version>
		</dependency>
		<dependency>
			<groupId>com.jfinal</groupId>
			<artifactId>cos</artifactId>
			<version>26Dec2008</version>
		</dependency>
	<!-- 阿里巴巴druid資料連線池-->	
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.15</version>
		</dependency>
	<!-- mysql驅動-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.20</version>
		</dependency>
	<!-- 單元測試-->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.11</version>
		</dependency>
	<!-- servlet標準-->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
		</dependency>
	</dependencies>


由此可見使用jfinal的依賴包並不多,核心只有兩個

2.配置資料來源引數(jdbc.properties )

#jdbc mysql
driverClass=com.mysql.jdbc.Driver
#我的資料庫表叫test,根據自己實際情況修改
jdbcUrl=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8
user=root
password=root

initialSize=1
minIdle=1
maxActivee=20

3.實體層(不需要寫欄位對映,只要繼承Model)

package com.jfinal.dao;

import com.jfinal.plugin.activerecord.Model;

/**
 * 實體層
 *
 * @author lpf
 */

public class News extends Model<News>{
}
4.jfinal配置檔案(非常重要,註釋都已寫好,需要更深層次的功能自己查閱資料,這裡只配置基本的)
package com.jfinal.config;

import com.jfinal.controller.IndexController;
import com.jfinal.controller.NewsController;
import com.jfinal.dao.News;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.render.ViewType;

/**
 * jfinal配置檔案
 *
 * @author lpf
 */
public class WebConfig extends JFinalConfig{

	@Override
	public void configConstant(Constants constants) {
		//設定編碼格式
		constants.setEncoding("UTF-8");
		//設定為開發模式(如果為fals,jfinal會快取頁面,導致開發時修改頁面後不能立即呈現)
		constants.setDevMode(true);
		//jfinal支援很多型別的頁面,這裡設定為jsp,FreeMarker也支援)
		constants.setViewType(ViewType.JSP);
	}

	@Override
	public void configRoute(Routes routes) {
		//統一設定對映訪問路徑  類似於spring mvc的@RequestMapping
		routes.add("/", IndexController.class);
		routes.add("/news", NewsController.class);
	}

	@Override
	public void configPlugin(Plugins plugins) {
		//這裡啟用Jfinal外掛  讀取jdbc配置
		PropKit.use("jdbc.properties");
		final String URL =PropKit.get("jdbcUrl");
		final String USERNAME = PropKit.get("user");
		final String PASSWORD =PropKit.get("password");
		final Integer INITIALSIZE = PropKit.getInt("initialSize");
		final Integer MIDIDLE = PropKit.getInt("minIdle");
		final Integer MAXACTIVEE = PropKit.getInt("maxActivee");

		DruidPlugin druidPlugin = new DruidPlugin(URL,USERNAME,PASSWORD);
		druidPlugin.set(INITIALSIZE,MIDIDLE,MAXACTIVEE);
		druidPlugin.setFilters("stat,wall");
		plugins.add(druidPlugin);

		//實體對映
		ActiveRecordPlugin activeRecordPlugin = new ActiveRecordPlugin(druidPlugin);
		activeRecordPlugin.addMapping("news","id", News.class);
		plugins.add(activeRecordPlugin);

	}

	@Override
	public void configInterceptor(Interceptors me) {
		// TODO Auto-generated method stub

	}

	@Override
	public void configHandler(Handlers me) {
		// TODO Auto-generated method stub

	}
}
5. service業務層(jfinal支援事務處理,這裡只是簡單的插入一條資料)
package com.jfinal.service;

import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;

public class NewsService {

    public void add(String newstitle){
            Record news = new Record().set("newstitle", newstitle);
            Db.save("news", news);
    }
}
6.controller控制層

新聞控制層

package com.jfinal.controller;


import com.jfinal.core.Controller;
import com.jfinal.service.NewsService;


public class NewsController extends Controller{


    private NewsService newsService = new NewsService();


    public void index(){
    <span style="white-space:pre">	</span>test();
    <span style="white-space:pre">	</span>renderJsp("/news/news.jsp");<span style="white-space:pre">	</span>
    }


    public void test(){
       System.out.println("進入...");
       newsService.add("測試值");
       System.out.println("執行成功...");
      
    }
}
專案根路徑訪問
package com.jfinal.controller;

import com.jfinal.core.Controller;

/**
 * jfinal預設呼叫方法
 *
 * @author lpf
 */

public class IndexController extends Controller{

    public void index(){
        renderJsp("index.jsp");
    }
}

到這裡基本就完成了一個簡單的jfianl框架的搭建,如果需要事務處理,攔截器、日誌等功能可以自己去查資料。我會附上專案原始碼,可以自己匯入修改。

jfinal官網地址: http://www.jfinal.com/
專案原始碼:http://pan.baidu.com/s/1i4TABh7