一、 知识储备阶段
SSM
: 主流的构建javaweb项目的mvc架构,组成为springmvc
+spring
+mybatis
。springmvc
:主要负责处理Tomcat
接受到的http请求,并将处理完成的结果写入响应体中返回给客户端浏览器。spring
: 负责管理bean
对象,实现业务功能代码的解耦合。通过ioc
依赖注入的方式动态获取通过spring容器管理的java对象。通过Aspectj
实现Aop
功能,达到业务功能代码的解耦合。mybatis
:orm
模型的数据库连接框架,主要用于javaweb项目dao
层的实现。maven
:主流的项目管理工具,用于管理项目依赖和项目构建,与其功能相近的有gradle
、cmake
、ant
、nant
。idea
:最好用的java开发编译器。二、项目创建
- 打开idea点击创建项目
2. 先新建一个空工程用于管理项目模块
3. 填写项目信息
4. 进入空工程,创建项目模块
5. 新建maven模块
6. 新模块属性配置
7. 选择maven工具的配置文件和本地仓库位置,后面会有maven的settins.xml获取和配置介绍
8、之后点击确定,等待项目初始化,如果初始化太慢可以往下看,下面会介绍项目中的属性文件配置和maven的settings.xml文件配置。初始化完成后创建项目包体和配置文件,完善后的项目结构如下:
1)包结构介绍
| 包名 | 作用 |
|–|–|
| dao | 数据库操作声明的java接口所属包 |
| entity | 与数据库表对应的java类所属包,用于service和dao层参数传递,接收mybatis查询后的结果集 |
| service | 业务逻辑处理的java类所属包 |
| web.controller | http请求接收和响应的java文件所属包 |
| web.filter | 先于controller拿到http请求,做特定处理之后传给controller的java类所属包 |
2)配置文件介绍
文件名 | 作用 |
---|---|
pom.xml | maven构建项目配置文件 |
web.xml | web应用配置文件 |
applicationContext.xml | spring和mybatis整合配置文件 |
mybatis.xml | mybatis配置文件 |
springMVC.xml | springmvc配置文件 |
jdbc.properties | 数据库连接池配置文件 |
三、属性文件配置
maven文件settings.xml文件获取与配置(这个操作只需要操作一次,以后新建项目都不需要)
1) 获取settings.xml文件找到maven安装目录下的
conf
文件夹,在该文件夹中可以看到settings.xml
文件。2)配置settings.xml并且指定本地仓库
拷贝一份
settings.xml
放到自己自定义的文件夹中,比如我新建了maven文件夹来存放maven配置文件,并在同级目录下新建文件夹repository
用作本地仓库。
打开settings.xml
文件,在<mirrors>
标签节点下添加下面配置,设置阿里云镜像。因为正常情况下maven远程仓库是国外的下载依赖包太慢,所以使用阿里云的镜像仓库。1
2
3
4
5
6<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<mirrorOf>central</mirrorOf>
</mirror>在
settings.xml
文件中搜索localRepository
标签,该标签是被注释的,复制一份添加到下面,其中的标签内容修改成自己的本地仓库路径,仓库路径就是前面创建的repository
文件夹,例如我的是E:\maven\repository
。本地仓库是用来存放从远程仓库下载的项目工程依赖包,以后构建项目都会优先从本地仓库获取依赖包,如果本地仓库没有获取到才会去远程仓库下载。1
<localRepository>E:\maven\repository</localRepository>
maven项目构建配置文件pom.xml的配置(后面的配置文件每次新建项目时都需要根据项目需求配置)
1)整理pom.xml
文件,整理后如下2)`build`标签配置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21<?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>org.example</groupId>
<artifactId>SSMModule</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
</properties>
<dependencies>
</dependencies>
<build>
</build>
</project>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24<build>
<resources>
<!--maven构建项目时默认不会移动src/main/java下的文件,需要手动指定需要移动的配置文件-->
<resource>
<directory>src/main/java</directory><!--所在的目录-->
<includes><!--包括目录下的.properties,.xml文件都会扫描到-->
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
<plugins>
<!--该插件用于指定maven构建项目时使用的编译器编译版本-->
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>3)
propertis
标签配置1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!--统一管理依赖包版本-->
<spring.version>4.2.5.RELEASE</spring.version>
<jackson.version>2.5.0</jackson.version>
<junit.version>4.12</junit.version>
<servlet.version>4.0.1</servlet.version>
<jsp.version>2.1.3-b06</jsp.version>
<jstl.version>1.2</jstl.version>
<mybatis.version>3.2.8</mybatis.version>
<mysql.version>5.1.9</mysql.version>
<druid.version>1.1.12</druid.version>
<log4j.version>1.7.9</log4j.version>
<mybatis-spring.version>1.2.2</mybatis-spring.version>
<slf4j.version>1.7.18</slf4j.version>
<log4j.version>1.2.17</log4j.version>
<commons-pool.version>1.6</commons-pool.version>
<commons-dbcp.version>1.2</commons-dbcp.version>
</properties>4)dependencies标签配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105<!--单元测试-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- jackson依赖-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- springmvc依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- aspectj依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aspects</artifactId>
<version>${spring.version}</version>
</dependency>
<!--spring和mybatis整合-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>${mybatis-spring.version}</version>
</dependency>
<!-- mybatis依赖-->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>${mybatis.version}</version>
</dependency>
<!-- 注解式的事务提供支持 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- 事务管理器 -->
<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>${mysql.version}</version>
</dependency>
<!-- druid连接池依赖-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
<!-- 日志依赖-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
web,xml文件配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54<?xml version="1.0" encoding="UTF-8"?>
<!--webapp约束描述文件-->
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!-- 制定spring配置文件位置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:applicationContext.xml</param-value>
</context-param>
<!-- 注册servletContext监听器,用于创建唯一的spring容器管理对象-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 字符编码过滤器-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 配置springmvc中央调度器-->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springMVC.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>SpringMVC</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 设置项目启动页面-->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>applicationContext.xml文件配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42<?xml version="1.0" encoding="UTF-8"?>
<!--spring约束描述文件-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
<!--组件扫描器,用于扫描service所在包路径下的service对象,将其添加到spring容器中管理-->
<context:component-scan base-package="com.ssm.demo.service"/>
<!--读取mysql连接池的配置文件jdbc.properties-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!-- 阿里巴巴吧的druid数据库连接池性能比较好,一般使用druid连接池作为数据源-->
<bean id="dataBase" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driverClass}"/>
<property name="url" value="${jdbc.url}"/>
<property name="name" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--用于整合spring和mybatis-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataBase"/>
<!-- 配置Mybati的核心配置文件 -->
<property name="configLocation" value="classpath:mybatis.xml" />
</bean>
<!--用于扫描dao层对象,将dao层对象注入到spring容器中-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.jing.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
</bean>
<!--事务注解驱动开启-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataBase"/>
</bean>
<tx:annotation-driven transaction-manager="transactionManager"/>
</beans>springMVC文件配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27<?xml version="1.0" encoding="UTF-8"?>
<!--springmvc约束描述文件-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<!-- 组件扫描器,用于注入controller对象到spring容器中-->
<context:component-scan base-package="com.ssm.demo.web.controller"/>
<!-- 添加springmvc注解驱动,自动注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter-->
<mvc:annotation-driven />
<!-- 设置视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/" />
<property name="suffix" value=".jsp"/>
</bean>
<!-- springmvc没有处理静态资源的能力,所以将资源文件交给web服务器处理-->
<mvc:default-servlet-handler />
</beans>mybatis文件配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24<?xml version="1.0" encoding="UTF-8" ?>
<!--mybatis 约束描述文件-->
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<!-- 控制日志输出 -->
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
<typeAliases>
<!--默认别名为:javabean 的首字母小写的非限定类名来作为它的别名-->
<package name="com.ssm.demo.entity" />
</typeAliases>
<mappers>
<!-- name 是映射文件所在的包名 -->
<package name="com.ssm.demo.dao"/>
</mappers>
</configuration>jdbc.properties文件配置
1
2
3
4jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=password