天天看點

Jfinal+maven 簡單demo sql管理JFinal

JFinal

JFinal 是基于Java 語言的極速 web 開發架構,其核心設計目标是開發迅速、代碼量少、學習簡單、功能強大、輕量級、易擴充、Restful。在擁有Java語言所有優勢的同時再擁有ruby、python等動态語言的開發效率。

項目結構:

Jfinal+maven 簡單demo sql管理JFinal

一、建立一個Project

★ 打開IDEA,Create New Project

Jfinal+maven 簡單demo sql管理JFinal

★ 通過Maven建立Project,但不使用模闆

Jfinal+maven 簡單demo sql管理JFinal

★ 填寫Project相關命名,完成Project的建立。此處将Project命名為「jfinal-demo」

Jfinal+maven 簡單demo sql管理JFinal
Jfinal+maven 簡單demo sql管理JFinal

二、把目前Project改為一個POM工程。

該工程作為項目的父工程,用于定義各子產品依賴的包的版本、編碼方式等。

★ 删掉src目錄

Jfinal+maven 簡單demo sql管理JFinal

★ 編輯根目錄下的pom.xml,将打包格式設定為pom。

Jfinal+maven 簡單demo sql管理JFinal

★ 父工程的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+maven 簡單demo sql管理JFinal

★ 建立時選擇使用模闆

Jfinal+maven 簡單demo sql管理JFinal
Jfinal+maven 簡單demo sql管理JFinal
Jfinal+maven 簡單demo sql管理JFinal

★ 建立完成後,目錄結果如下圖所示

Jfinal+maven 簡單demo sql管理JFinal

四、編寫測試用代碼

★ 在jfinal-web子產品的main目錄下,建立java目錄

Jfinal+maven 簡單demo sql管理JFinal

★ 把剛建立的java目錄标記為Sources Root,這樣IDEA才會把該目錄下的.java檔案當做java源檔案來處理

Jfinal+maven 簡單demo sql管理JFinal

★ 給「jfinal-web」子產品添加依賴。版本已經在父工程裡定義了,這裡不需要填寫version。

Jfinal+maven 簡單demo sql管理JFinal

★ 「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>      

項目啟動:

Jfinal+maven 簡單demo sql管理JFinal
Jfinal+maven 簡單demo sql管理JFinal
Jfinal+maven 簡單demo sql管理JFinal

效果圖:

Jfinal+maven 簡單demo sql管理JFinal

參考:http://www.jfinal.com/share/36