SSM框架搭建
Spring+SpringMVC+Mybatis
1.创建Maven项目(javaWeb项目) (org.yn)
1.1 把项目结构写完整
(domain,service,mapper,controller )
2.集成Spring
2.1 导入依赖包
<!--导入spring容器上下文jar-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!--spring测试-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
2.2加入配置文件applicationContext.xml
<?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:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://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
https://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd"
>
</beans>
2.3 测试 导入是否成功
写一个bean
<bean id="Date" class="java.util.Date"></bean>
测试类
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
public class test01 {
@Autowired
private Date date;
@Test
public void test(){
System.out.println(date.getTime());
}
}
3.集成Spring+Mybatis
3.1导入依赖包
(JDBC,mybatis,mysql,连接池,mybatis-spring,日志)
<!--集成Mybatis依赖jdbc-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>
<!-- mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
<!--连接池-->
<!-- https://mvnrepository.com/artifact/com.zaxxer/HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.3.1</version>
</dependency>
<!--spring和mybatis集成需要一个包-->
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.6</version>
</dependency>
<!--日志包-->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
3.2编写配置文件
jdbc.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/ssm
jdbc.username=root
jdbc.password=root
LOG4J 日志
#全局日志配置
log4j.rootLogger = info,console
#输出局部的日志信息(自己的包中的日志打印方式)
log4j.logger.com.yn=TRACE
### 配置输出到控制台
log4j.appender.console = org.apache.log4j.ConsoleAppender
### 使用System.out打印日志
log4j.appender.console.Target = System.out
### 指定日志的格式布局(日志是有格式的)
log4j.appender.console.layout = org.apache.log4j.PatternLayout
### 日志的打印格式
log4j.appender.console.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{1}:%L - %m%n
Mybatis核心类交给Spring管理
applicationContext.xml文件添加如下配置
<!--jdbc.properties-->
<context:property-placeholder location="classpath:jdbc.properties"/>
<!--dataSource-->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
<!-- 四大数据库基本信息-->
<property name="jdbcUrl" value="${jdbc.url}"/>
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
<!--其他信息-->
<property name="connectionTimeout" value="3000"></property>
<property name="maximumPoolSize" value="10"></property>
<property name="idleTimeout" value="3000"></property>
</bean>
<!--SqlSessionFactory
-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<!--1 dataSource-->
<property name="dataSource" ref="dataSource"></property>
<!-- 2 映射文件-->
<property name="mapperLocations" value="classpath:com/ronghuanet/mapper/*Mapepr.xml"/>
<!--3 别名包-->
<property name="typeAliasesPackage" value="com.ronghuanet.domain"></property>
</bean>
扫描Mapper包
applicationContext.xml文件添加如下配置
<!--扫描特定包下面的所有的接口,通过动态代理为我们Mapper产生映射器交给Spring管理
以后需要的时候直接注入
-->
<bean id="configurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.ronghuanet.mapper"></property>
<!--底层操作数据库,需要获取SqlSession,给他sqlSessionFactory一个工厂,它需要的时候通过调用
工厂的openSession方法获取
SqlSession sqlSession = factory.openSession();-->
<!--其实可以不要,会自动在容器中寻找-->
<!--<property name="sqlSessionFactory" ref="sqlSessionFactory"></property>-->
</bean>
3.3测试Spring-Mybatis
1.根据数据库创建实体类
2.创建mapper接口 和其对应的xml文件(注意spring配置文件中包扫描的位置是否正确)
3.创建接口方法,并通过xml实现(推荐使用插件MybatisX)
4.创建测试用例 用注解实现
4.Spring+Mybatis+Service事务支持·注解版
4.1导入包
在Spring中使用了AOP来集成事务,支持XML配置和 注解配置两种方式 , 当然需要导入 spring‐tx 包支持
<!--spring事务-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.8</version>
</dependency>
4.2 核心配置
- spring核心配置文件中添加 tx 的支持
- 配置相应的事务管理器: transactionManager
- 配置tx的注解支持
<context:component-scan base-package="org.yn.service"></context:component-scan>
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource" />
</bean>
<!-- 开始事务注解支持-->
<tx:annotation-driven />
4.3使用注解
service层中使用注解 @Transactional
@Transactional
public class EmployeeServiceImpl implements IEmployeeService {
....
}
5.集成SpringMVC
5.1导入包
<!--springmvc支持jar包,导入webmvc其实就已经导入web,它依赖于web-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<!--后端返回json数据需要-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.10.8</version>
</dependency>
<!--Servlet-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<!--jsp支持-->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>
5.2配置web.xml
- 文件头修改(版本问题)
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
2.配置核心分发器
<!--配置核心分发器-->
<!-- 拦截所有的请求,-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 将映射配置文件当做初始化参数配置进dispatcherServlet中-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!-- 项目启动就加载-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<!-- / 拦截请求,放行jsp请求,其他请求全部拦截 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
3.配置字符编码过滤器
<!--处理post请求编码问题,字符编码过滤器-->
<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>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
5.3spring-mvc.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!--引入applicationContext方案一 -->
<!-- <import resource="classpath:applicationContext.xml"></import>-->
<!-- 放行静态资源请求-->
<mvc:default-servlet-handler />
<!-- \开启spring对mvc的支持:即能够使用\@RequestMapping注解 \--\>-->
<mvc:annotation-driven/>
<!--扫描注解 -->
<context:component-scan base-package="org.yn.controller" />
<context:component-scan base-package="org.yn.*"></context:component-scan>
<!-- 设置视图路径的前后缀,该配置可以让我们写视图路径的时候更简单 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsps/" />
<property name="suffix" value=".jsp" />
</bean>
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 设置上传文件的最大尺寸为1MB -->
<!-- <property name="maxUploadSize">-->
<!-- <!– spring el写法:1MB –>-->
<!-- <value>#{1024*1024}</value>-->
<!-- </property>-->
<!-- 效果同上 -->
<!-- 10mb-->
<property name="maxUploadSize" value="10485760" />
</bean>
<!-- 配置拦截器组 -->
<!-- <mvc:interceptors>-->
<!-- <!– 拦截器 –>-->
<!-- <mvc:interceptor>-->
<!-- <!– 要拦截的配置,该配置必须写在不拦截的上面,/*拦截一级请求,/**拦截多级请求 –>-->
<!-- <mvc:mapping path="/**" />-->
<!-- <!– 设置不拦截的配置 –>-->
<!-- <mvc:exclude-mapping path="/login"/>-->
<!-- <!– 配置拦截器 –>-->
<!-- <bean class="com.yn.utils.MyInterceptor" />-->
<!-- </mvc:interceptor>-->
<!-- </mvc:interceptors>-->
</beans>
5.4 将spring配置文件和Spring-MVC配置文件关联启动
方案一:在spring-mvc.xml文件中配置、
<!--引入applicationContext方案一 -->
<import resource="classpath:applicationContext.xml"></import>
方案二:web.xml中配置
<!--方案2-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
#### 5.5 测试
。。。