项目结构

pom.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2
3 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5 <modelVersion>4.0.0</modelVersion>
6
7 <groupId>com.haifei</groupId>
8 <artifactId>SSM17</artifactId>
9 <version>1.0-SNAPSHOT</version>
10 <packaging>war</packaging>
11
12 <name>SSM17 Maven Webapp</name>
13 <!-- FIXME change it to the project's website -->
14 <url>http://www.example.com</url>
15
16
17 <!--maven使用properties指定版本号--> <!--版本锁定-->
18 <properties>
19 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
20 <maven.compiler.source>1.8</maven.compiler.source>
21 <maven.compiler.target>1.8</maven.compiler.target>
22
23 <spring.version>5.0.2.RELEASE</spring.version>
24 <slf4j.version>1.6.6</slf4j.version>
25 <log4j.version>1.2.12</log4j.version>
26 <mysql.version>5.1.6</mysql.version>
27 <mybatis.version>3.4.5</mybatis.version>
28 </properties>
29
30
31 <dependencies>
32 <dependency>
33 <groupId>mysql</groupId>
34 <artifactId>mysql-connector-java</artifactId>
35 <version>${mysql.version}</version>
36 </dependency>
37 <dependency>
38 <groupId>c3p0</groupId>
39 <artifactId>c3p0</artifactId>
40 <version>0.9.1.2</version>
41 <type>jar</type>
42 <scope>compile</scope>
43 </dependency>
44 <dependency>
45 <groupId>com.alibaba</groupId>
46 <artifactId>druid</artifactId>
47 <version>1.1.10</version>
48 <type>jar</type>
49 <scope>compile</scope>
50 </dependency>
51
52 <dependency>
53 <groupId>javax.servlet</groupId>
54 <artifactId>servlet-api</artifactId>
55 <version>2.5</version>
56 <scope>provided</scope>
57 </dependency>
58 <dependency>
59 <groupId>javax.servlet.jsp</groupId>
60 <artifactId>jsp-api</artifactId>
61 <version>2.0</version>
62 <scope>provided</scope>
63 </dependency>
64 <dependency>
65 <groupId>jstl</groupId>
66 <artifactId>jstl</artifactId>
67 <version>1.2</version>
68 </dependency>
69
70 <!-- log start -->
71 <dependency>
72 <groupId>log4j</groupId>
73 <artifactId>log4j</artifactId>
74 <version>${log4j.version}</version>
75 </dependency>
76 <dependency>
77 <groupId>org.slf4j</groupId>
78 <artifactId>slf4j-api</artifactId>
79 <version>${slf4j.version}</version>
80 </dependency>
81 <dependency>
82 <groupId>org.slf4j</groupId>
83 <artifactId>slf4j-log4j12</artifactId>
84 <version>${slf4j.version}</version>
85 </dependency>
86 <!-- log end -->
87
88 <!--mybatis-->
89 <dependency>
90 <groupId>org.mybatis</groupId>
91 <artifactId>mybatis</artifactId>
92 <version>${mybatis.version}</version>
93 </dependency>
94 <!--mybatis-spring-->
95 <dependency>
96 <groupId>org.mybatis</groupId>
97 <artifactId>mybatis-spring</artifactId>
98 <version>1.3.0</version>
99 </dependency>
100
101 <dependency>
102 <groupId>org.springframework</groupId>
103 <artifactId>spring-context</artifactId>
104 <version>${spring.version}</version>
105 </dependency>
106 <dependency>
107 <groupId>org.springframework</groupId>
108 <artifactId>spring-web</artifactId>
109 <version>${spring.version}</version>
110 </dependency>
111 <dependency>
112 <groupId>org.springframework</groupId>
113 <artifactId>spring-webmvc</artifactId>
114 <version>${spring.version}</version>
115 </dependency>
116
117 <dependency>
118 <groupId>org.springframework</groupId>
119 <artifactId>spring-tx</artifactId>
120 <version>${spring.version}</version>
121 </dependency>
122 <dependency>
123 <groupId>org.springframework</groupId>
124 <artifactId>spring-jdbc</artifactId>
125 <version>${spring.version}</version>
126 </dependency>
127
128 <dependency>
129 <groupId>org.springframework</groupId>
130 <artifactId>spring-aop</artifactId>
131 <version>${spring.version}</version>
132 </dependency>
133 <dependency>
134 <groupId>org.aspectj</groupId>
135 <artifactId>aspectjweaver</artifactId>
136 <version>1.6.8</version>
137 </dependency>
138
139 <dependency>
140 <groupId>org.springframework</groupId>
141 <artifactId>spring-test</artifactId>
142 <version>${spring.version}</version>
143 </dependency>
144 <dependency>
145 <groupId>junit</groupId>
146 <artifactId>junit</artifactId>
147 <version>4.12</version>
148 <!--<scope>test</scope>-->
149 <scope>compile</scope>
150 </dependency>
151 </dependencies>
152
153
154 <build>
155 <finalName>SSM17</finalName>
156 <pluginManagement>
157 <plugins>
158 <plugin>
159 <groupId>org.apache.maven.plugins</groupId>
160 <artifactId>maven-compiler-plugin</artifactId>
161 <version>3.2</version>
162 <configuration>
163 <source>1.8</source>
164 <target>1.8</target>
165 <encoding>UTF-8</encoding>
166 <showWarnings>true</showWarnings>
167 </configuration>
168 </plugin>
169 </plugins>
170 </pluginManagement>
171 </build>
172
173
174 </project>
web.xml
1 <!DOCTYPE web-app PUBLIC
2 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
3 "http://java.sun.com/dtd/web-app_2_3.dtd" >
4
5 <web-app>
6 <display-name>Archetype Created Web Application</display-name>
7
8 <!--配置Spring的监听器;默认只加载WEB-INF目录下的applicationContext.xml配置文件,所以需要设置配置文件的路径-->
9 <listener>
10 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
11 </listener>
12 <!--设置配置文件的路径-->
13 <context-param>
14 <param-name>contextConfigLocation</param-name>
15 <param-value>classpath:applicationContext.xml</param-value>
16 </context-param>
17
18
19 <!--配置springMVC的前端控制器,实质就是一个servlet-->
20 <servlet>
21 <servlet-name>dispatcherServlet</servlet-name>
22 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
23 <!--加载springMVC.xml配置文件-->
24 <init-param>
25 <param-name>contextConfigLocation</param-name>
26 <param-value>classpath:springMVC.xml</param-value>
27 </init-param>
28 <!--期望启动服务器,就创建该servlet-->
29 <load-on-startup>1</load-on-startup>
30 </servlet>
31 <servlet-mapping>
32 <servlet-name>dispatcherServlet</servlet-name>
33 <url-pattern>/</url-pattern>
34 </servlet-mapping>
35
36 <!--配置springMVC中解决中文乱码的过滤器-->
37 <filter>
38 <filter-name>characterEncodingFilter</filter-name>
39 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
40 <!--指定编码集-->
41 <init-param>
42 <param-name>encoding</param-name>
43 <param-value>UTF-8</param-value>
44 </init-param>
45 </filter>
46 <filter-mapping>
47 <filter-name>characterEncodingFilter</filter-name>
48 <url-pattern>/*</url-pattern>
49 </filter-mapping>
50
51 </web-app>
log4j.properties
1 # Set root category priority to INFO and its only appender to CONSOLE.
2 #log4j.rootCategory=INFO, CONSOLE debug info warn error fatal
3 log4j.rootCategory=info, CONSOLE, LOGFILE
4
5 # Set the enterprise logger category to FATAL and its only appender to CONSOLE.
6 log4j.logger.org.apache.axis.enterprise=FATAL, CONSOLE
7
8 # CONSOLE is set to be a ConsoleAppender using a PatternLayout.
9 log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
10 log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
11 log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
12
13 # LOGFILE is set to be a File appender using a PatternLayout.
14 log4j.appender.LOGFILE=org.apache.log4j.FileAppender
15 log4j.appender.LOGFILE.File=d:\axis.log
16 log4j.appender.LOGFILE.Append=true
17 log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
18 log4j.appender.LOGFILE.layout.ConversionPattern=%d{ISO8601} %-6r [%15.15t] %-5p %30.30c %x - %m\n
jdbc.xml
1 jdbc.driver=com.mysql.jdbc.Driver
2 jdbc.url=jdbc:mysql://localhost:3306/hm_ssm
3 jdbc.username=root
4 jdbc.password=root
springMVC.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:mvc="http://www.springframework.org/schema/mvc"
4 xmlns:context="http://www.springframework.org/schema/context"
5 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
6 xsi:schemaLocation="
7 http://www.springframework.org/schema/beans
8 http://www.springframework.org/schema/beans/spring-beans.xsd
9 http://www.springframework.org/schema/mvc
10 http://www.springframework.org/schema/mvc/spring-mvc.xsd
11 http://www.springframework.org/schema/context
12 http://www.springframework.org/schema/context/spring-context.xsd
13 ">
14
15 <!--开启注解扫描,只扫描Controller注解-->
16 <context:component-scan base-package="com.haifei">
17 <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
18 </context:component-scan>
19
20 <!--配置视图解析器对象,实质就是一个bean-->
21 <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
22 <property name="prefix" value="/WEB-INF/pages/"/>
23 <property name="suffix" value=".jsp"/>
24 </bean>
25
26 <!--过滤静态资源-->
27 <mvc:resources location="/css/" mapping="/css/**" />
28 <mvc:resources location="/images/" mapping="/images/**" />
29 <mvc:resources location="/js/" mapping="/js/**" />
30
31 <!--开启springMVC的注解支持-->
32 <mvc:annotation-driven/>
33
34 </beans>
applicationContext.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xmlns:context="http://www.springframework.org/schema/context"
5 xmlns:aop="http://www.springframework.org/schema/aop"
6 xmlns:tx="http://www.springframework.org/schema/tx"
7 xsi:schemaLocation="
8 http://www.springframework.org/schema/beans
9 http://www.springframework.org/schema/beans/spring-beans.xsd
10 http://www.springframework.org/schema/context
11 http://www.springframework.org/schema/context/spring-context.xsd
12 http://www.springframework.org/schema/aop
13 http://www.springframework.org/schema/aop/spring-aop.xsd
14 http://www.springframework.org/schema/tx
15 http://www.springframework.org/schema/tx/spring-tx.xsd
16 ">
17
18
19 <!--开启注解所需的组件扫描,期望spring只负责处理service和dao;controller用springMVC处理-->
20 <context:component-scan base-package="com.haifei">
21 <!--配置哪些注解不被扫描-->
22 <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
23 </context:component-scan>
24
25
26 <!--Spring整合Mybatis框架-->
27 <!--1、加载外部的properties文件-->
28 <context:property-placeholder location="classpath:jdbc.properties"/>
29 <!--2、配置数据源(数据库连接池)-->
30 <bean id="dataSource_c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource">
31 <property name="driverClass" value="${jdbc.driver}"></property>
32 <property name="jdbcUrl" value="${jdbc.url}"></property>
33 <property name="user" value="${jdbc.username}"></property>
34 <property name="password" value="${jdbc.password}"></property>
35 </bean>
36 <bean id="dataSource_druid" class="com.alibaba.druid.pool.DruidDataSource">
37 <property name="driverClassName" value="${jdbc.driver}"></property>
38 <property name="url" value="${jdbc.url}"></property>
39 <property name="username" value="${jdbc.username}"></property>
40 <property name="password" value="${jdbc.password}"></property>
41 </bean>
42 <!--<!–配置spring jdbcTemplate–>
43 <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
44 <property name="dataSource" ref="dataSource_c3p0"/>
45 </bean>-->
46 <!--3、配置SqlSessionFactory工厂-->
47 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
48 <property name="dataSource" ref="dataSource_c3p0" /> <!--数据源可选c3p0和druid-->
49 </bean>
50 <!--4、配置AccountDao接口所在包-->
51 <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
52 <property name="basePackage" value="com.haifei.dao"/>
53 </bean>
54 <!--/Spring整合Mybatis框架(以上配置完成后,sqlMapConfig.xml可以删掉了)-->
55
56
57 <!--配置Spring框架的声明式事务管理-->
58 <!--1、配置事务管理器-->
59 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
60 <property name="dataSource" ref="dataSource_c3p0"/> <!--数据源可选c3p0和druid-->
61 </bean>
62 <!--2、配置事务通知-->
63 <tx:advice id="txAdvice" transaction-manager="transactionManager">
64 <tx:attributes>
65 <tx:method name="find*" read-only="true"/> <!--以find开头的方法设置为只读-->
66 <tx:method name="*" isolation="DEFAULT"/> <!--除了以find开头的方法设置,例如隔离级别设置为默认-->
67 </tx:attributes>
68 </tx:advice>
69 <!--3、配置AOP增强-->
70 <aop:config>
71 <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.haifei.service.impl.*ServiceImpl.*(..))" />
72 <!--public可以省略不写 返回值为* impl包下的*ServiceImpl类中的所有方法,且任意类型的参数-->
73 <!--对以上描述的方法进行增强-->
74 </aop:config>
75 <!--/配置Spring框架的声明式事务管理-->
76
77
78 </beans>
jsp页面
1 <%@ page contentType="text/html;charset=UTF-8" language="java" %>
2 <html>
3 <head>
4 <title>index.jsp</title>
5 </head>
6 <body>
7 <a href="account/findAll">测试查询</a>
8 <hr>
9 <h2>测试保存</h2>
10 <form action="account/save" method="post">
11 姓名:<input type="text" name="name" /><br/>
12 金额:<input type="text" name="money" /><br/>
13 <input type="submit" value="保存"/><br/>
14 </form>
15 </body>
16 </html>
1 <%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
2 <%--https://blog.csdn.net/fyqcdbdx/article/details/6317579--%>
3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
4 <html>
5 <head>
6 <title>list.jsp</title>
7 </head>
8 <body>
9 <h2>查询到所有账户信息,在此页面展示</h2>
10 <c:forEach items="${accountList}" var="account">
11 ${account.id}--${account.name}--${account.money}<br>
12 </c:forEach>
13 </body>
14 </html>
.java
1 package com.haifei.domain;
2
3 import java.io.Serializable;
4
5 /**
6 * 实体类-账户
7 */
8 public class Account implements Serializable {
9
10 /*
11 为啥不用基本数据类型而采用对应的包装类?
12 https://www.cnblogs.com/vincentmax/p/14285762.html
13
14 在数据库中,数据的默认值是 null,而在 Java 中,基本类型的默认值不是 null
15 int 类型的默认值是 0,而包装类Integer的默认值是 null,因为是对象
16 */
17 private Integer id;
18 private String name;
19 private Double money;
20
21 @Override
22 public String toString() {
23 return "Account{" +
24 "id=" + id +
25 ", name='" + name + '\'' +
26 ", money=" + money +
27 '}';
28 }
29
30 public Integer getId() {
31 return id;
32 }
33
34 public void setId(Integer id) {
35 this.id = id;
36 }
37
38 public String getName() {
39 return name;
40 }
41
42 public void setName(String name) {
43 this.name = name;
44 }
45
46 public Double getMoney() {
47 return money;
48 }
49
50 public void setMoney(Double money) {
51 this.money = money;
52 }
53 }
1 package com.haifei.dao;
2
3 import com.haifei.domain.Account;
4 import org.apache.ibatis.annotations.Insert;
5 import org.apache.ibatis.annotations.Select;
6 import org.springframework.stereotype.Repository;
7
8 import java.util.List;
9
10 /**
11 * dao接口-账户
12 */
13 @Repository //将dao层类交给spring的IOC容器进行管理,实例化bean
14 public interface AccountDao {
15
16 //查询所有账户
17 @Select("select * from ssm_account")
18 public List<Account> findAll();
19
20 //保存账户信息
21 @Insert("insert into ssm_account(name,money) values(#{name},#{money})")
22 public void saveAccount(Account account);
23
24 }
1 package com.haifei.service;
2
3 import com.haifei.domain.Account;
4
5 import java.util.List;
6
7 /**
8 * service接口-账户
9 */
10 public interface AccountService {
11
12 //查询所有账户
13 public List<Account> findAll();
14
15 //保存账户信息
16 public void saveAccount(Account account);
17
18 }
1 package com.haifei.service.impl;
2
3 import com.haifei.dao.AccountDao;
4 import com.haifei.domain.Account;
5 import com.haifei.service.AccountService;
6 import org.springframework.beans.factory.annotation.Autowired;
7 import org.springframework.stereotype.Service;
8
9 import java.util.List;
10
11 /**
12 * service接口实现类-账户
13 */
14 @Service("accountService") //将service层类交给spring的IOC容器进行管理,实例化bean
15 public class AccountServiceImpl implements AccountService {
16
17 @Autowired //根据类型进行自动注入
18 private AccountDao accountDao;
19
20 @Override
21 public List<Account> findAll() {
22 System.out.println("业务层:查询所有账户");
23 return accountDao.findAll();
24 }
25
26 @Override
27 public void saveAccount(Account account) {
28 System.out.println("业务层:保存账户信息");
29 accountDao.saveAccount(account);
30 }
31
32 }
1 package com.haifei.controller;
2
3 import com.haifei.domain.Account;
4 import com.haifei.service.AccountService;
5 import org.springframework.beans.factory.annotation.Autowired;
6 import org.springframework.stereotype.Controller;
7 import org.springframework.ui.Model;
8 import org.springframework.web.bind.annotation.RequestMapping;
9 import org.springframework.web.servlet.ModelAndView;
10
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13 import java.io.IOException;
14 import java.util.List;
15
16 /**
17 * web层-账户
18 */
19 @Controller //将web层类交给spring的IOC容器进行管理,实例化bean
20 @RequestMapping("/account")
21 public class AccountController {
22
23 @Autowired //根据类型进行自动注入
24 private AccountService accountService;
25
26 @RequestMapping("/findAll")
27 public String findAll(Model model){
28 System.out.println("表现层:查询所有账户信息");
29 List<Account> accountList = accountService.findAll();
30 model.addAttribute("accountList", accountList);
31 return "list";
32 }
33 /*@RequestMapping("/findAll")
34 public ModelAndView findAll(ModelAndView modelAndView){
35 System.out.println("表现层:查询所有账户信息");
36 List<Account> accountList = accountService.findAll();
37 modelAndView.addObject("accountList", accountList);
38 modelAndView.setViewName("list");
39 return modelAndView;
40 }*/
41
42 @RequestMapping("/save")
43 public void save(Account account, HttpServletRequest request, HttpServletResponse response) throws IOException {
44 System.out.println("表现层:保存账户信息");
45 accountService.saveAccount(account);
46 response.sendRedirect(request.getContextPath() + "/account/findAll"); //重定向至查询功能
47 }
48
49 }
数据库
1 create table account(
2 id int primary key auto_increment,
3 name varchar(20),
4 money double
5 );
