(比springmvc更快的开发)jfinal 快速开发入门 freemarker mysql

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介:   源码下载 : http://download.csdn.net/download/knight_black_bob/9160015              sql   SET FOREIGN_KEY_CHECKS=0; -- --------------...

 

源码下载 :

http://download.csdn.net/download/knight_black_bob/9160015

 

 

 
 



 
 

 

 

sql

 

SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for `clazz`
-- ----------------------------
DROP TABLE IF EXISTS `clazz`;
CREATE TABLE `clazz` (
  `clazzid` int(11) NOT NULL AUTO_INCREMENT,
  `clazzname` varchar(255) DEFAULT NULL,
  `clazzaddr` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`clazzid`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of clazz
-- ----------------------------
INSERT INTO `clazz` VALUES ('1', 'java', '信息学院');
INSERT INTO `clazz` VALUES ('2', 'php', '信息学院');

-- ----------------------------
-- Table structure for `student`
-- ----------------------------
DROP TABLE IF EXISTS `student`;
CREATE TABLE `student` (
  `stuid` int(11) NOT NULL AUTO_INCREMENT,
  `stuname` varchar(255) DEFAULT NULL,
  `stuage` int(11) DEFAULT NULL,
  `stusex` int(11) DEFAULT NULL,
  `clazzid` int(11) DEFAULT NULL,
  PRIMARY KEY (`stuid`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of student
-- ----------------------------
INSERT INTO `student` VALUES ('2', '2', '2', '2', '1');
INSERT INTO `student` VALUES ('9', '5', '5', '5', '1');
INSERT INTO `student` VALUES ('11', '2', '2', '2', '1');
INSERT INTO `student` VALUES ('12', '5', '5', '5', '1');

 

pom.xml

 手动添加 jfinal-1.8.jar  文件

<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">
	
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.baoy.cn</groupId>
	<artifactId>Demo1</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>Demo1 Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>c3p0</groupId>
			<artifactId>c3p0</artifactId>
			<version>0.9.1.2</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.freemarker</groupId>
			<artifactId>freemarker</artifactId>
			<version>2.3.23</version>
			<scope>compile</scope>
		</dependency>

		<dependency>
			<groupId>com.jfinal</groupId>
			<artifactId>jetty-server</artifactId>
			<version>8.1.8</version>
			<scope>compile</scope>
		</dependency>

		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.17</version>
			<scope>compile</scope>
		</dependency>

	</dependencies>

	<build>
		<finalName>Demo1</finalName>
		<pluginManagement>
			<plugins>
				<plugin>
					<groupId>org.eclipse.m2e</groupId>
					<artifactId>lifecycle-mapping</artifactId>
					<version>1.0.0</version>
					<configuration>
						<lifecycleMappingMetadata>
							<pluginExecutions>
								<pluginExecution>
									<pluginExecutionFilter>
										<groupId>org.apache.maven.plugins</groupId>
										<artifactId>maven-dependency-plugin</artifactId>
										<versionRange>[2.0,)</versionRange>
										<goals>
											<goal>copy-dependencies</goal>
											<goal>unpack</goal>
										</goals>
									</pluginExecutionFilter>
									<action>
										<ignore />
									</action>
								</pluginExecution>
							</pluginExecutions>
						</lifecycleMappingMetadata>
					</configuration>
				</plugin>
			</plugins>
		</pluginManagement>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<version>2.8</version>
				<executions>
					<execution>
						<phase>prepare-package</phase>
						<goals>
							<goal>copy-dependencies</goal>
						</goals>
						<configuration>
							<outputDirectory>src/main/webapp/WEB-INF/lib</outputDirectory>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>

	</build>
</project>

 

 

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

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


</web-app>

 

 

 

 

 

DemoConfig.java

 

package baoyou.config;

import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.c3p0.C3p0Plugin;

import baoyou.controller.ClazzController;
import baoyou.controller.StudentController;
import baoyou.model.Clazz;
import baoyou.model.Student;

public class DemoConfig extends JFinalConfig {

	@Override
	public void configConstant(Constants me) { 

	}

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

	}

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

	}

	@Override
	public void configPlugin(Plugins me) {
		C3p0Plugin cp = new C3p0Plugin("jdbc:mysql://localhost:3306/demo", "root", "root");
		me.add(cp);
		ActiveRecordPlugin arp = new ActiveRecordPlugin(cp);
		me.add(arp);

		arp.addMapping("student", "stuid", Student.class);
		arp.addMapping("clazz", "clazzid", Clazz.class);

	}

	@Override
	public void configRoute(Routes me) {
		 me.add("/", StudentController.class);
	     me.add("/student", StudentController.class);
	     me.add("/clazz", ClazzController.class);

	}

}

 

 

 

package baoyou.model;

import com.jfinal.plugin.activerecord.Model;

public class Student extends Model<Student> {
	 public static final Student dao = new Student();
	 
	 public Clazz getClazz() {
	        return Clazz.dao.findById(get("clazzid"));
	} 
}

 

 

package baoyou.model;

import com.jfinal.plugin.activerecord.Model;

public class Clazz  extends Model<Clazz>{
	 public static final  Clazz dao = new Clazz();
}

 

 

package baoyou.intercepter;

import com.jfinal.aop.Interceptor;
import com.jfinal.core.ActionInvocation;

public class StudentInterceptor implements Interceptor  {

	@Override
	public void intercept(ActionInvocation ai) { 
		
		System.out.println("Before action invoking");
        ai.invoke();
        System.out.println("After action invoking");

	}

}

 

 

package baoyou.validator;

import com.jfinal.core.Controller;
import com.jfinal.validate.Validator;

public class StudentValidator  extends Validator {

    //在校验失败时才会调用
    @Override
    protected void handleError(Controller controller) {
        controller.keepPara("student.stuname");//将提交的值再传回页面以便保持原先输入的值
        controller.render("/add.html");
    }

    @Override
    protected void validate(Controller controller) {
        //验证表单域name,返回信息key,返回信息value
        validateRequiredString("student.stuname", "stunameMsg",
                "请输入学生名称!");
    }

}

 

 

package baoyou.controller;

import java.util.List;

import com.jfinal.aop.Before;
import com.jfinal.core.Controller;

import baoyou.intercepter.StudentInterceptor;
import baoyou.model.Student;
import baoyou.validator.StudentValidator;


public class StudentController  extends Controller {

	@Before(StudentInterceptor.class)
    public void index() {
        List<Student> list = Student.dao.find("select * from student");
        setAttr("studentList", list);
        render("/list.html");
    }

    public void add() {
    	System.out.println("------------");
        render("/add.html");
    }

    public void delete() {
        // 获取表单域名为studentID的值
        // Student.dao.deleteById(getPara("studentID"));
        // 获取url请求中第一个值
        Student.dao.deleteById(getParaToInt());
//        forwardAction("/student");
        redirect("/student");
    }

    public void update() {
        Student student = getModel(Student.class);
        student.update();
        forwardAction("/student");
    }

    public void get() {
        Student student = Student.dao.findById(getParaToInt());
        setAttr("student", student);
        render("/index2.html");
    }

    
    public void save() {
        Student student = getModel(Student.class);
        student.save();
        redirect("/student");
    }


}

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="zh-CN" xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link href="/css/manage.css" media="screen" rel="stylesheet" type="text/css" />
<script src="/js/jquery-1.4.4.min.js" type="text/javascript" ></script>
<#-- base href="${CPATH}" / -->
</head>
    <body>
        <a href="./student/add">添加</a>
        <table border="1">
            <tr>
                <td>
                    姓名
                </td>
                <td>
                    年龄
                </td>
                <td>
                    性别
                </td>
                <td>
                    班级
                </td>
                <td>
                    操作
                </td>
            </tr>
            <#list studentList as student>
            <tr>
                <td>
                    ${student.stuname}
                </td>
                <td>
                    ${student.stuage}
                </td>
                <td>
                    ${student.stusex}
                </td>
                <td>
                    ${student.getClazz().clazzname}
                </td>
                <td>
                    <a href="./student/delete/${student.stuid}">删除</a>
                    <a href="./student/get/${student.stuid}">修改</a>
                </td>
            </tr>
            </#list>

        </table>
    </body>
</html>

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xml:lang="zh-CN" xmlns="http://www.w3.org/1999/xhtml" lang="zh-CN">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
<link href="/css/manage.css" media="screen" rel="stylesheet" type="text/css" />
<script src="/js/jquery-1.4.4.min.js" type="text/javascript" ></script>
<#-- base href="${CPATH}" / -->
</head>

    <body>
        <form action="./save" method="post">
            姓名:
            <input type="text" name="student.stuname" />${stunameMsg!}
            <br />
            年龄:
            <input type="text" name="student.stuage" />
            <br />
            性别:
            <input type="text" name="student.stusex" />
            <br />
            班级:
            <input type="text" name="student.clazzid" />
            <br />
            <input type="submit" value="保存" />
        </form>
    </body>
</html>

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

捐助开发者

在兴趣的驱动下,写一个免费的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。



 
 
 谢谢您的赞助,我会做的更好!

 

 

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL】根据binlog日志获取回滚sql的一个开发思路
【MySQL】根据binlog日志获取回滚sql的一个开发思路
|
12天前
|
SQL 关系型数据库 MySQL
MySQL入门到精通
MySQL入门到精通
|
1月前
|
存储 SQL 运维
运维开发.MySQL.范式与反范式化
运维开发.MySQL.范式与反范式化
38 1
|
20天前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
92 0
|
2月前
|
存储 关系型数据库 MySQL
MySQL数据库开发进阶:精通数据库表的创建与管理22
【7月更文挑战第22天】数据库的创建与删除,数据表的创建与管理
40 1
|
1月前
|
SQL 数据可视化 关系型数据库
平时MySQL开发时,经常用到的小技巧
MySQL开发过程中常用的一些技巧,包括使用MD5函数、创建带逻辑删除标识和时间戳的表、多行合并为一行、时间差计算、不走索引的查询优化、多表连接更新等操作的SQL语句示例。
52 0
|
2月前
|
SQL 关系型数据库 MySQL
MySQL如何入门
MySQL如何入门
|
2月前
|
数据库
基于PHP+MYSQL开发制作的趣味测试网站源码
基于PHP+MYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分, 自己手动在数据库里修改数据,数据库里有就会优先查询数据库的信息, 没设置的话第一次查询缘分都是非常好的 95-99,第二次查就比较差 , 所以如果要你女朋友查询你的名字觉得很好 那就得是她第一反应是查和你的缘分, 如果查的是别人,那不好意思,第二个可能是你。
49 3
|
2月前
|
Java 关系型数据库 MySQL
JPA + MySQL 开发总结
JPA + MySQL 开发总结
39 0
|
2月前
|
存储 关系型数据库 MySQL
MySQL小白教程:从入门到查询高手
MySQL小白教程:从入门到查询高手