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">新增用户</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}">修改</a> <a href="/user/del/${user.id}">删除</a></td> </tr> </c:forEach> </tbody> </table> </body> </html>
项目启动: