SSM整合
创建Maven工程导入相关依赖
<?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> per.xgt</ groupId>
< artifactId> SSM-01-helloWorld</ artifactId>
< version> 1.0-SNAPSHOT</ version>
< properties>
< spring.version> 5.3.1</ spring.version>
</ properties>
< dependencies>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-context</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-beans</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-web</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-webmvc</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-jdbc</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-aspects</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-test</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
< dependency>
< groupId> org.mybatis</ groupId>
< artifactId> mybatis</ artifactId>
< version> 3.5.7</ version>
</ dependency>
< dependency>
< groupId> org.mybatis</ groupId>
< artifactId> mybatis-spring</ artifactId>
< version> 2.0.6</ version>
</ dependency>
< dependency>
< groupId> com.alibaba</ groupId>
< artifactId> druid</ artifactId>
< version> 1.0.9</ version>
</ dependency>
< dependency>
< groupId> junit</ groupId>
< artifactId> junit</ artifactId>
< version> 4.13.2</ version>
< scope> test</ scope>
</ dependency>
< dependency>
< groupId> mysql</ groupId>
< artifactId> mysql-connector-java</ artifactId>
< version> 8.0.16</ version>
</ dependency>
< dependency>
< groupId> log4j</ groupId>
< artifactId> log4j</ artifactId>
< version> 1.2.17</ version>
</ dependency>
< dependency>
< groupId> com.github.pagehelper</ groupId>
< artifactId> pagehelper</ artifactId>
< version> 5.2.0</ version>
</ dependency>
< dependency>
< groupId> ch.qos.logback</ groupId>
< artifactId> logback-classic</ artifactId>
< version> 1.2.3</ version>
</ dependency>
< dependency>
< groupId> javax.servlet</ groupId>
< artifactId> javax.servlet-api</ artifactId>
< version> 3.1.0</ version>
< scope> provided</ scope>
</ dependency>
< dependency>
< groupId> com.fasterxml.jackson.core</ groupId>
< artifactId> jackson-databind</ artifactId>
< version> 2.12.1</ version>
</ dependency>
< dependency>
< groupId> commons-fileupload</ groupId>
< artifactId> commons-fileupload</ artifactId>
< version> 1.3.1</ version>
</ dependency>
< dependency>
< groupId> org.thymeleaf</ groupId>
< artifactId> thymeleaf-spring5</ artifactId>
< version> 3.0.12.RELEASE</ version>
</ dependency>
</ dependencies>
</ project>
配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
< web-app xmlns = " http://xmlns.jcp.org/xml/ns/javaee"
xmlns: xsi= " http://www.w3.org/2001/XMLSchema-instance"
xsi: schemaLocation= " http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version = " 4.0" >
< filter>
< filter-name> CharacterEncodingFilter</ 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>
< init-param>
< param-name> forceResponseEncoding</ param-name>
< param-value> true</ param-value>
</ init-param>
</ filter>
< filter-mapping>
< filter-name> CharacterEncodingFilter</ filter-name>
< url-pattern> /*</ url-pattern>
</ filter-mapping>
< filter>
< filter-name> HiddenHttpMethodFilter</ filter-name>
< filter-class> org.springframework.web.filter.HiddenHttpMethodFilter</ filter-class>
</ filter>
< filter-mapping>
< filter-name> HiddenHttpMethodFilter</ filter-name>
< url-pattern> /*</ url-pattern>
</ filter-mapping>
< servlet>
< servlet-name> DispatcherServlet</ 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>
</ servlet>
< servlet-mapping>
< servlet-name> DispatcherServlet</ servlet-name>
< url-pattern> /</ url-pattern>
</ servlet-mapping>
< listener>
< listener-class> org.springframework.web.context.ContextLoaderListener</ listener-class>
</ listener>
< context-param>
< param-name> contextConfigLocation</ param-name>
< param-value> classpath:spring.xml</ param-value>
</ context-param>
</ web-app>
springmvc配置文件
<?xml version="1.0" encoding="UTF-8"?>
< 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: mvc= " http://www.springframework.org/schema/mvc"
xsi: schemaLocation= " http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd" >
< context: component-scan base-package = " per.xgt.controller" >
< context: include-filter type = " annotation" expression = " org.springframework.stereotype.Controller" />
</ context: component-scan>
< bean id = " viewResolver" class = " org.thymeleaf.spring5.view.ThymeleafViewResolver" >
< property name = " order" value = " 1" />
< property name = " characterEncoding" value = " UTF-8" />
< property name = " templateEngine" >
< bean class = " org.thymeleaf.spring5.SpringTemplateEngine" >
< property name = " templateResolver" >
< bean class = " org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver" >
< property name = " prefix" value = " /WEB-INF/templates/" />
< property name = " suffix" value = " .html" />
< property name = " templateMode" value = " HTML5" />
< property name = " characterEncoding" value = " UTF-8" />
</ bean>
</ property>
</ bean>
</ property>
</ bean>
< mvc: default-servlet-handler />
< mvc: annotation-driven />
< mvc: view-controller path = " /" view-name = " index" > </ mvc: view-controller>
< bean id = " multipartResolver" class = " org.springframework.web.multipart.commons.CommonsMultipartResolver" > </ bean>
< mvc: interceptors>
< mvc: interceptor>
< mvc: mapping path = " /**" />
< mvc: exclude-mapping path = " /index" />
< mvc: exclude-mapping path = " /" />
< bean class = " per.xgt.interceptors.MyInterceptor" />
</ mvc: interceptor>
</ mvc: interceptors>
< bean class = " org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" >
< property name = " exceptionMappings" >
< props>
< prop key = " java.lang.ArithmeticException" > error</ prop>
</ props>
</ property>
< property name = " exceptionAttribute" value = " ex" > </ property>
</ bean>
</ beans>
拦截器
package per. xgt. interceptors ;
import org. springframework. web. servlet. HandlerInterceptor ;
import org. springframework. web. servlet. ModelAndView ;
import javax. servlet. http. HttpServletRequest ;
import javax. servlet. http. HttpServletResponse ;
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle ( HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System . out. println ( "拦截器..." ) ;
request. getRequestDispatcher ( "/" ) . forward ( request, response) ;
return false ;
}
@Override
public void postHandle ( HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
HandlerInterceptor . super . postHandle ( request, response, handler, modelAndView) ;
}
@Override
public void afterCompletion ( HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
HandlerInterceptor . super . afterCompletion ( request, response, handler, ex) ;
}
}
jdbc.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/emp?serverTimeZone=UTC
jdbc.username=root
jdbc.password=root
log4j配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE log4j:configuration SYSTEM "log4j.dtd" >
< log4j: configuration xmlns: log4j= " http://jakarta.apache.org/log4j/" >
< appender name = " STDOUT" class = " org.apache.log4j.ConsoleAppender" >
< param name = " Encoding" value = " UTF-8" />
< layout class = " org.apache.log4j.PatternLayout" >
< param name = " ConversionPattern" value = " %-5p %d{MM-dd HH:mm:ss,SSS}
%m (%F:%L) \n" />
</ layout>
</ appender>
< logger name = " java.sql" >
< level value = " debug" />
</ logger>
< logger name = " org.apache.ibatis" >
< level value = " info" />
</ logger>
< root>
< level value = " debug" />
< appender-ref ref = " STDOUT" />
</ root>
</ log4j: configuration>
Spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
< 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.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd" >
< context: component-scan base-package = " per.xgt" >
< context: exclude-filter type = " annotation" expression = " org.springframework.stereotype.Controller" />
</ context: component-scan>
< context: property-placeholder location = " classpath:jdbc.properties" > </ context: property-placeholder>
< bean id = " dataSource" class = " com.alibaba.druid.pool.DruidDataSource" >
< property name = " driverClassName" value = " ${jdbc.driver}" > </ property>
< property name = " url" value = " ${jdbc.url}" > </ property>
< property name = " username" value = " ${jdbc.username}" > </ property>
< property name = " password" value = " ${jdbc.password}" > </ property>
</ bean>
< bean id = " dataSourceTransactionManager" class = " org.springframework.jdbc.datasource.DataSourceTransactionManager" >
< property name = " dataSource" ref = " dataSource" />
</ bean>
< tx: annotation-driven transaction-manager = " dataSourceTransactionManager" />
< bean class = " org.mybatis.spring.SqlSessionFactoryBean" >
< property name = " configLocation" value = " classpath:mybatis-config.xml" />
< property name = " dataSource" ref = " dataSource" />
< property name = " typeAliasesPackage" value = " per.xgt.entity" />
</ bean>
< bean class = " org.mybatis.spring.mapper.MapperScannerConfigurer" >
< property name = " basePackage" value = " per.xgt.dao" />
</ bean>
</ beans>
mybatis配置文件
<?xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd" >
< configuration>
< settings>
< setting name = " mapUnderscoreToCamelCase" value = " true" />
</ settings>
< plugins>
< plugin interceptor = " com.github.pagehelper.PageInterceptor" > </ plugin>
</ plugins>
</ configuration>
测试
mapper接口
public interface EmployeeMapper {
public Employee findOne ( Integer id) ;
}
mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
< mapper namespace = " per.xgt.dao.EmployeeMapper" >
< select id = " findOne" resultType = " per.xgt.entity.Employee" >
SELECT *
FROM emp
WHERE id = #{id}
</ select>
</ mapper>
service接口
public interface EmployeeService {
public Employee findOne ( Integer id) ;
}
service实现类
@Service
public class EmployeeServiceImpl implements EmployeeService {
@Autowired
private EmployeeMapper employeeMapper;
public Employee findOne ( Integer id) {
return employeeMapper. findOne ( id) ;
}
}
controller
package per. xgt. controller ;
import org. springframework. beans. factory. annotation. Autowired ;
import org. springframework. stereotype. Controller ;
import org. springframework. web. bind. annotation. PathVariable ;
import org. springframework. web. bind. annotation. RequestMapping ;
import org. springframework. web. bind. annotation. ResponseBody ;
import org. springframework. web. servlet. ModelAndView ;
import per. xgt. entity. Employee ;
import per. xgt. service. EmployeeService ;
@Controller
public class MyController {
@Autowired
private EmployeeService employeeService;
@RequestMapping ( "/hello" )
public String hello ( ) {
System . out. println ( "方法......" ) ;
return "hello" ;
}
@RequestMapping ( "/index" )
public String index ( ) {
int i = 10 / 0 ;
return "index" ;
}
@RequestMapping ( "/emp/{id}" )
@ResponseBody
public ModelAndView emp ( @PathVariable ( "id" ) Integer id, ModelAndView model) {
Employee employee = employeeService. findOne ( id) ;
model. setViewName ( "emp" ) ;
model. addObject ( "emp" , employee) ;
return model;
}
}
首页index
<! DOCTYPE html >
< html lang = " en" xmlns: th= " http://www.tymeleaf.org" >
< head>
< meta charset = " UTF-8" >
< title> Title</ title>
</ head>
< body>
< h1> 首页</ h1>
< a th: href= " @{/emp/1}" > 员工</ a>
</ body>
</ html>
跳转页
<! DOCTYPE html >
< html lang = " en" xmlns: th= " http://www.tymeleaf.org" >
< head>
< meta charset = " UTF-8" >
< title> Title</ title>
</ head>
< body>
< p th: text= " ${emp.id} + ${emp.empName}" > </ p>
</ body>
</ html>