JFinal
JFinal 是基于Java 語言的極速 web 開發架構,其核心設計目标是開發迅速、代碼量少、學習簡單、功能強大、輕量級、易擴充、Restful。在擁有Java語言所有優勢的同時再擁有ruby、python等動态語言的開發效率。
項目結構:
一、建立一個Project
★ 打開IDEA,Create New Project
★ 通過Maven建立Project,但不使用模闆
★ 填寫Project相關命名,完成Project的建立。此處将Project命名為「jfinal-demo」
二、把目前Project改為一個POM工程。
該工程作為項目的父工程,用于定義各子產品依賴的包的版本、編碼方式等。
★ 删掉src目錄
★ 編輯根目錄下的pom.xml,将打包格式設定為pom。
★ 父工程的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-parent</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<!-- 集中定義依賴版本号 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<jfinal.version>3.5</jfinal.version>
<junit.version>4.12</junit.version>
</properties>
<!--集中聲明依賴-->
<dependencyManagement>
<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>
</dependencies>
</dependencyManagement>
<!--定義編譯相關内容-->
<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>
三、建立Module(子產品)「jfinal-web」
★ 在jfinal-demo目錄上單擊滑鼠右鍵,建立子Module
★ 建立時選擇使用模闆
★ 建立完成後,目錄結果如下圖所示
四、編寫測試用代碼
★ 在jfinal-web子產品的main目錄下,建立java目錄
★ 把剛建立的java目錄标記為Sources Root,這樣IDEA才會把該目錄下的.java檔案當做java源檔案來處理
★ 給「jfinal-web」子產品添加依賴。版本已經在父工程裡定義了,這裡不需要填寫version。
★ 「jfinal-web」子產品的pom.xml
<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/maven-v4_0_0.xsd">
<parent>
<artifactId>jfinal-parent</artifactId>
<groupId>jfinal-demo</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>jfinal-web</artifactId>
<packaging>war</packaging>
<name>jfinal-web Maven Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.jfinal</groupId>
<artifactId>jfinal</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl-api</artifactId>
<version>1.2</version>
<exclusions>
<exclusion>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
</exclusion>
<exclusion>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.38</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
<build>
<finalName>jfinal-web</finalName>
</build></project>
五、編寫程式代碼以及配置檔案
db.properties:
jdbcUrl = jdbc:mysql://localhost:3306/jfinal
user = root
password = 123456
BEIConfig.java配置檔案:
package com.bzj.jfinal.Config;
import com.bzj.jfinal.Controller.HelloController;
import com.bzj.jfinal.Model.User;
import com.jfinal.config.*;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.c3p0.C3p0Plugin;
import com.jfinal.render.ViewType;
import com.jfinal.template.Engine;
public class BEIConfig extends JFinalConfig {
// 加載少量必要配置,随後可用PropKit.get(...)擷取值
@Override
public void configConstant(Constants constants) {
//設定開發模式
constants.setDevMode(true);
//設定開發模式,如果為false的話,jfinal存在緩存,導緻頁面不能立即修改
constants.setDevMode(true);
//視圖設定為jsp頁面
constants.setViewType(ViewType.JSP);
PropKit.use("db.properties");
}
/**
* 配置路由 ,及請求位址與實際資源的映射關系 ,有點類似于 springmvc 的@RequestMapping注解
* @param routes
*/
@Override
public void configRoute(Routes routes) {
routes.add("/user", HelloController.class,"/WEB-INF/view/user");
}
@Override
public void configEngine(Engine engine) {
}
/**
* 配置Jfinal plugin擴充
* @param
*/
@Override
public void configPlugin(Plugins plugins) {
C3p0Plugin c3p0Plugin = new C3p0Plugin(PropKit.get("jdbcUrl"),PropKit.get("user"),PropKit.get("password"));
plugins.add(c3p0Plugin);
ActiveRecordPlugin activeRecordPlugin = new ActiveRecordPlugin(c3p0Plugin);
//activeRecordPlugin.setShowSql(true);
activeRecordPlugin.addMapping("user", User.class);
activeRecordPlugin.setBaseSqlTemplatePath(PathKit.getRootClassPath()
+ "/sql");
activeRecordPlugin.addSqlTemplate("all.sql");
/*// 所有映射在 MappingKit 中自動化搞定
_MappingKit.mapping(activeRecordPlugin);*/
plugins.add(activeRecordPlugin);
}
@Override
public void configInterceptor(Interceptors interceptors) {
}
@Override
public void configHandler(Handlers handlers) {
}
/**
* 配置模闆
* @param engine
*/
// public void configEngine(Engine engine) {
//
// }
}
HelloController.java:
package com.bzj.jfinal.Controller;
import com.bzj.jfinal.Model.User;
import com.jfinal.core.Controller;
import com.jfinal.plugin.activerecord.Db;
import java.util.List;
public class HelloController extends Controller {
public void form(){
render("form.jsp");
}
public void index(){
List<User> users = User.dao.find("select * from user");
System.out.println(users);
setAttr("list",users);
render("list.jsp");
}
public void submit(){
User user = getModel(User.class,"user");
user.save();
redirect("/user/index");
}
public void del(){
System.out.println(getPara(0));
User.dao.deleteById(getPara(0));
redirect("/user/index");
}
public void edit(){
System.out.println(getPara(0));
User user = User.dao.findById(getPara(0));
setAttr("user",user);
render("form.jsp");
}
public void update(){
User user = getModel(User.class,"user");
user.update();
/*redirect("/user");*/
index();
}
public void result(){
System.out.println(getPara("id")+"======================");
this.setAttr("result",User.dao.findById(this.getPara("id")));
System.out.println(User.dao.findById(this.getPara("id")));
render("result.jsp");
}
public void sqlTest(){
String sql = Db.getSql("user.allUser");
System.out.println(sql);
List<User> list = Db.query(sql);
setAttr("list",list);
render("list.jsp");
}
}
User.java:
package com.bzj.jfinal.Model;
import com.jfinal.plugin.activerecord.Model;
public class User extends Model<User> {
public static final User dao = new User();
private int id;
private String username;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
user.sql:
#sql("allUser")
SELECT * FROM user
#end
all.sql:
#namespace("user")
#include("user\user.sql")
#end
前端JSP頁面:
<%--
Created by IntelliJ IDEA.
User: bzj
Date: 2018/10/28
Time: 15:25
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page isELIgnored="false"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<div>
<a href="/user/form" target="_blank" rel="external nofollow" >新增使用者</a>
</div>
<form action="/user/result" method="post">
<input type="text" name="id">
<input type="submit" value="搜尋">
</form>
<table class="table">
<thead>
<tr>
<th colspan="5" align="center">使用者資訊表</th>
</tr>
<tr>
<th>ID</th> <th>賬号</th><th>密碼</th><th>操作</th>
</tr>
</thead>
<tbody>
<c:forEach items="${list}" var="user">
<tr>
<td>${user.id}</td> <td>${user.username}</td> <td>${user.password}</td>
<td><a href="/user/edit/${user.id}" target="_blank" rel="external nofollow" >修改</a>
<a href="/user/del/${user.id}" target="_blank" rel="external nofollow" >删除</a></td>
</tr>
</c:forEach>
</tbody>
</table>
</body>
</html>
項目啟動:
效果圖:
參考:http://www.jfinal.com/share/36