一、基本概念
1.Spring
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。 简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
2.SpringMVC
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring MVC分离了控制器、模型对象、分派器以及处理程序对象的角色,这种分离让它们更容易进行定制。
3.MyBatis
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。MyBatis是一个基于Java的持久层框架。iBATIS提供的持久层框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了几乎所有的JDBC代码和参数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。
二、使用Maven创建web项目
1.打开Eclipse, 选择File -> New -> Other,在New窗口中选择 Maven -> Maven Project;点击Next。
2.选择项目路径,这里选择Use default Workspace location默认工作空间。
3.选择项目类型,在Artifact Id中选择maven-archetype-webapp
4.输入Group Id和 Artifact Id,package可以不写。
Group Id:类似于包名
Artifact Id:项目的名称
Version:初始的版本号,一般不需要改动
其他选项设置为空,点击Next创建项目,如下图:
5.点击Finish,会生成一个这样目录的项目。
6.修改项目编码方式
在项目上右键 -> Properties -> Resource -> Text file encoding -> 改为“utf-8”。
7.添加Source文件夹
接下来需要添加src/main/java、src/test/java、src/test/resources三个文件夹。注意不是建普通的Folder,而是Source Folder。在项目上右键new -> Other,在New窗口中选择
Java -> Source Folder。
如果出现了下面的情况,其实是文件夹已经存在了,只是我们看不到。
8.在项目上右键,选择Properties,在弹出的属性窗口中依次选择Java Build Path -> Libraries -> JRE System Library -> Edit。
9.在Edit Library窗口中修改JRE为jdk1.7.0_25。
10.设置好之后的目录结构如下图所示:
这时看到src/main/java和src/test/java文件夹就已经显示出来了。
11.让项目使用jdk 1.7编译
在项目上右键 -> 选择Properties -> 选择Java Compiler -> 将Compiler Compliance Level 改为“1.7”。
12.更改class路径
右键项目,选择Java Build Path -> Source,下面应该有4个文件夹,src/main/java,src/main/resources,src/test/java,src/test/resources。双击每个文件夹的Output folder,选择路径。src/main/java,src/main/resources,选择target/classes;src/test/java ,src/test/resources, 选择target/test-classes。选上Allow output folders for source folders。(如果没有选上的话)
13.把项目变成Dynamic Web项目
右键项目,选择Properties,在属性窗口中选择Project Facets,修改Java版本号为1.7,默认为1.5或其他版本。注:先去掉“Dynamic Web Module”,然后再保存。
14.接下来继续右键项目 -> Properties ->选择Project Facets -> 勾选“Dynamic Web Module”,选择版本为3.0 -> 然后点击下方的“Further configuration available...”。
15.在弹出的窗口中修改Content directory为“src/main/webapp”。
设置好之后的项目结构如下图所示,可以看到在webapp下面多了一个META-INF文件夹。
或者还有一种做法,就是在“Modify Faceted Project”窗口中不用修改Content directory,即用他的默认值“WebContent”。
接下来观察我们的项目结构,多了一个WebContent目录。
这个结构不符合maven的结构,我们还要做如下修改:
把上图WebContent下面两个目录 META-INF ,WEB-INF 直接剪切到src/main/webapp目录下,并删掉WebContent目录即可。
16.设置部署程序集(Web Deployment Assembly)
在项目上右键,选择Properties -> Deployment Assembly,点击进去后,如下图:
此处列表是,部署项目时,文件发布的路径。
(1)我们删除跟test相关的项,因为test是测试使用,并不需要部署。
(2)设置将Maven的jar包发布到lib下。
在右边点击“Add”按钮,在弹出的窗口中选择Java Build Path Entries。
点击Next,选择Maven Dependencies
点击Finish,然后可以看到已经把Maven Dependencies添加到Web应用结构中了,完成后如下图:
17.至此一个基于maven的webapp就建立好了,并可以直接从eclipse中发布到tomcat。发布完成后,进入到tomcat的部署路径,我的是D:\apache-tomcat-7.0.27\webapps\SSMProDemo,发现WEB-INF目录下自动生成了lib目录,并且所有依赖的jar包也都已经部署进来。如果没有lib目录,说明项目依赖的jar包没有部署进来,这时运行程序会报错:java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener。
三、创建数据库和表
打开MySQL数据库,创建两张表,一张用于存放用户信息的表tb_user,另一张为字典表tb_dict。SQL脚本如下:
/* Navicat MySQL Data Transfer Source Server : local Source Server Version : 50617 Source Host : localhost:3306 Source Database : demodb Target Server Type : MYSQL Target Server Version : 50617 File Encoding : 65001 Date: 2017-01-31 18:39:18 */ SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for `tb_dict` -- ---------------------------- DROP TABLE IF EXISTS `tb_dict`; CREATE TABLE `tb_dict` ( `dictid` int(11) NOT NULL AUTO_INCREMENT COMMENT '字典id', `field` varchar(15) DEFAULT NULL COMMENT '对照字段', `fieldname` varchar(20) DEFAULT NULL COMMENT '对照字段名称', `code` varchar(10) DEFAULT NULL COMMENT '代码', `codedesc` varchar(100) DEFAULT NULL COMMENT '代码描述', `enabled` varchar(2) DEFAULT '1' COMMENT '启用状态(0:禁用;1:启用)', `sortno` int(4) DEFAULT NULL COMMENT '排序号', PRIMARY KEY (`dictid`) ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of tb_dict -- ---------------------------- INSERT INTO `tb_dict` VALUES ('1', 'SEX', '性别', '1', '男', '1', '1'); INSERT INTO `tb_dict` VALUES ('2', 'SEX', '性别', '2', '女', '1', '2'); INSERT INTO `tb_dict` VALUES ('3', 'EDU', '学历', '1', '高中', '1', '1'); INSERT INTO `tb_dict` VALUES ('4', 'EDU', '学历', '3', '本科', '1', '3'); INSERT INTO `tb_dict` VALUES ('5', 'EDU', '学历', '4', '研究生', '1', '4'); INSERT INTO `tb_dict` VALUES ('6', 'EDU', '学历', '5', '博士', '1', '5'); INSERT INTO `tb_dict` VALUES ('7', 'EDU', '学历', '2', '专科', '1', '2'); -- ---------------------------- -- Table structure for `tb_user` -- ---------------------------- DROP TABLE IF EXISTS `tb_user`; CREATE TABLE `tb_user` ( `user_id` int(11) NOT NULL AUTO_INCREMENT, `user_name` varchar(20) DEFAULT NULL COMMENT '姓名', `user_sex` varchar(2) DEFAULT NULL COMMENT '性别', `user_birthday` date DEFAULT NULL COMMENT '出生日期', `user_email` varchar(50) DEFAULT NULL COMMENT '邮箱', `user_edu` varchar(2) DEFAULT NULL COMMENT '学历', `user_telephone` varchar(30) DEFAULT NULL COMMENT '联系方式', `user_address` varchar(100) DEFAULT NULL COMMENT '住址', `create_time` datetime DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`user_id`) ) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of tb_user -- ---------------------------- INSERT INTO `tb_user` VALUES ('1', '李磊', '1', '1985-01-12', 'lilei123@sina.com', '3', '13211335451', '北京市东城区XXXX', '2017-01-31 18:24:41'); INSERT INTO `tb_user` VALUES ('2', '张华', '2', '1988-11-15', 'zhanghuajig@163.com', '3', '13811362254', '北京市西城区XXXX', '2017-01-31 18:29:08'); INSERT INTO `tb_user` VALUES ('3', '王媛媛', '2', '1990-04-06', 'yuanyuan112@sina.com', '3', '13511784568', '北京市西城区XXXX', '2017-01-18 10:30:48'); INSERT INTO `tb_user` VALUES ('4', '陈迪', '1', '1990-06-16', 'chendi0616@sina.com', '3', '13511697892', '北京市东城区XXXX', '2017-01-10 09:20:50'); INSERT INTO `tb_user` VALUES ('5', '王海东', '1', '1989-05-23', 'wanghaidong@163.com', '4', '13811981290', '北京市石景山区苹果园XXXXX', '2017-01-12 18:33:31'); INSERT INTO `tb_user` VALUES ('6', '李雪梅', '2', '1985-05-12', 'lixuemei@163.com', '2', '13911378945', '北京市朝阳区XXX', '2017-01-27 18:34:42'); INSERT INTO `tb_user` VALUES ('7', '张扬', '1', '1988-04-12', 'zhangyang11@sina.com', '3', '13611651245', '北京市石景山区XXXX', '2017-01-24 18:35:46'); INSERT INTO `tb_user` VALUES ('8', '赵庆', '1', '1986-05-06', 'zhaoqing56@163.com', '2', '13599632147', '北京市朝阳区XXX', '2017-01-31 18:38:57');
表结构如下所示:
四、添加依赖包
项目主要依赖的jar包有Spring核心包、Spring AOP包、Spring MVC包、MyBatis ORM包、MyBatis-Spring适配包、JSTL、JUnit、Log4j2等,具体的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"> <modelVersion>4.0.0</modelVersion> <groupId>com.demo</groupId> <artifactId>SSMProDemo</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>SSMProDemo Maven Webapp</name> <url>http://maven.apache.org</url> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>4.3.0.RELEASE</spring.version> </properties> <dependencies> <!--Spring框架核心库 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <!-- Spring MVC --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>${spring.version}</version> </dependency> <!-- aspectJ AOP 织入器 --> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.9</version> </dependency> <!--mybatis-spring适配器 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.3.0</version> </dependency> <!--Spring java数据库访问包,在本例中主要用于提供数据源 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <!--mysql数据库驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <!--log4j日志包 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.6.1</version> </dependency> <!-- mybatis ORM框架 --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.4.1</version> </dependency> <!-- JUnit单元测试工具 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.10</version> </dependency> <!--c3p0 连接池 --> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <!-- JSTL