基於Maven的JFinal項目

1、JFinal初識

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

2 遵循COC原則,零配置,無xmlmysql

3 首創Db + Record模式,靈活便利git

4 ActiveRecord支持,使數據庫開發極致快速web

5 自動加載修改後的Java文件,開發過程當中無需重啓web serversql

‍6 AOP支持,攔截器配置靈活,功能強大數據庫

7 Plugin體系結構,擴展性強json

8 多視圖支持,支持FreeMarker、JSP、Velocity後端

9 強大的Validator後端校驗功能架構

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

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

2、JFinal開發核心

**1.項目結構: **

輸入圖片說明

2. 配置文件a_little_config.txt:

jdbcUrl = jdbc:mysql://localhost/jfinal_demo?characterEncoding=utf8&zeroDateTimeBehavior=convertToNull
user = root
password =123456
devMode = true

3. 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>
      <param-value>com.demo.config.DemoConfig</param-value>
    </init-param>
  </filter>

  <filter-mapping>
    <filter-name>jfinal</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
</web-app>

4. DemoConfig:

/**
 * API引導式配置
 */
public class DemoConfig extends JFinalConfig {

	
	/**
	 * 配置常量
	 */
	public void configConstant(Constants me) {
		// 加載少許必要配置文件,隨後可用PropKit.get(...)獲取值
		PropKit.use("a_little_config.txt");

		//設置是否開發模式
		me.setDevMode(PropKit.getBoolean("devMode", false));

		//設置字符集
		me.setEncoding("UTF-8");

	}
	
	/**
	 * 配置路由
	 */
	public void configRoute(Routes me) {
		me.add("/", IndexController.class, "/index");	// 第三個參數爲該Controller的視圖存放路徑
		me.add("/blog", BlogController.class);			// 第三個參數省略時默認與第一個參數值相同,在此即爲 "/blog"
	}

	/**
	 * 配置引擎
   */
	public void configEngine(Engine engine) {

	}


	/**
	 * 配置插件
	 */
	public void configPlugin(Plugins me) {
		// 配置C3p0數據庫鏈接池插件
		DruidPlugin druidPlugin = new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());
		me.add(druidPlugin);
		
		// 配置ActiveRecord插件
		ActiveRecordPlugin arp = new ActiveRecordPlugin(druidPlugin);
		// 全部映射在 MappingKit 中自動化搞定
		_MappingKit.mapping(arp);
		me.add(arp);
	}
	
	public static DruidPlugin createDruidPlugin() {
		return new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password").trim());
	}
	
	/**
	 * 配置全局攔截器
	 */
	public void configInterceptor(Interceptors me) {
		
	}
	
	/**
	 * 配置處理器
	 */
	public void configHandler(Handlers me) {
		
	}
}

5. _JFinalDemoGenerator:

/**
 * 在數據庫表有任何變更時,運行一下 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.model.base";
		// base model 文件保存路徑
		String baseModelOutputDir = PathKit.getWebRootPath() + "/src/main/java/com/demo/model/base";
		
		// model 所使用的包名 (MappingKit 默認使用的包名)
		String modelPackageName = "com.demo.model";
		// model 文件保存路徑 (MappingKit 與 DataDictionary 文件默認保存路徑)
		String modelOutputDir = baseModelOutputDir + "/src/main";
		
		// 建立生成器
		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"而非 OscUser
		generator.setRemovedTableNamePrefixes("t_");
		// 生成
		generator.generate();
	}
}

6. BlogController:

/**
 * BlogController
 * 全部 sql 與業務邏輯寫在 Model 或 Service 中,不要寫在 Controller 中,養成好習慣,有利於大型項目的開發與維護
 */
@Before(BlogInterceptor.class)
public class BlogController extends Controller {

	static BlogService service = new BlogService();

	public void index() {
    //以json形式返回數據
		renderJson(service.paginate(getParaToInt(0, 1), 10));
	}

}

7. BlogService

/**
 * BlogService
 * 全部 sql 與業務邏輯寫在 Service 中,不要放在 Model 中,更不
 * 要放在 Controller 中,養成好習慣,有利於大型項目的開發與維護
 */
public class BlogService {
	
	/**
	 * 全部的 dao 對象也放在 Service 中
	 */
	private static final Blog dao = new Blog().dao();
	
	public Page<Blog> paginate(int pageNumber, int pageSize) {
		return dao.paginate(pageNumber, pageSize, "select *", "from blog order by id asc");
	}
	
	public Blog findById(int id) {
		return dao.findById(id);
	}
	
	public void deleteById(int id) {
		dao.deleteById(id);
	}
}

8. BlogInterceptor

/**
 * BlogInterceptor
 * 此攔截器僅作爲示例展現,在本 demo 中並不須要
 */
public class BlogInterceptor implements Interceptor {
	
	public void intercept(Invocation inv) {
		System.out.println("Before invoking " + inv.getActionKey());
		inv.invoke();
		System.out.println("After invoking " + inv.getActionKey());
	}

3、運行結果:

輸入圖片說明

4、源碼

http://git.oschina.net/null_133_5373/JFinalDemo

相關文章
相關標籤/搜索