SSM框架整合
1.创建maven项目,准备实体表
idea创建一个maven项目,选用骨架webapp。创建后边验证要用的数据库和实体表。
create database ssm;
create table account(
id int primary key auto_increment,
name varchar(20),
money double
);
2.删除pom文件中没用的依赖,引入相关依赖
完整的pom.xml
<?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>com.litengbin</groupId>
<artifactId>SSM</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<spring.version>5.0.2.RELEASE</spring.version>
<slf4j.version>1.6.6</slf4j.version>
<log4j>1.2.12</log4j>
<mysql.version>5.1.6</mysql.version>
<mybatis.version>3.4.5</mybatis.version>
</properties>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId><!--spring aop所要用到的包-->
<version>1.6.8</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId><!--spring aop要用到的包-->
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId><!--spring 核心包-->
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId><!--快速web开发时spring所需要的包-->
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId><!--springmvc框架相关类-->
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId><!--对Junit等测试框架的简单封装-->
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId><!--为JDBC、Hibernate、JDO、JPA、Beans等提供的一致的声明式和编程式事务管理支持-->
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId><!--对JDBC 的简单封装-->
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId><!--单元测试-->
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId><!--mysql驱动包-->
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId><!--使用spring框架的时候导入jstl标签库-->
<version>1.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId><!--log4j日志start-->
<version>${log4j}</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><!--log4j日志end -->
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId><!--mybatis依赖-->
<version>${mybatis.version}</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId><!--spring整合mybatis-->
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
</dependencies>
<build>
<finalName>ssm</finalName>
<pluginManagement>
<plugins>
<!--java编译插件-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
创建java、resources目录
3.整合思路
先spring再springmvc最后mybatis。
先把spring搭建好后保证spring可以使用,后搭建springmvc保证springmvc可以使用后整合两者。同理mybatis。
4.整合spring
spring在三层模型中主要是业务层。
4.1 创建实体类Account
代码略
4.2 编写service层代码和service实现类
实现类代码
public class AccountServiceImpl implements AccountService {
@Override
public List<Account> findAll() {
System.out.println("业务层:查询所有的账户");
return null;
}
}
4.3 配置
目的把service交给IOC进行管理
applicationContext.xml
<!--把类交给IOC容器去管理 开启注解扫描-->
<context:component-scan base-package="com.ltb.service"/>
并在service的实现类上添加@Service注解
4.4 测试spring
编写测试类,单元测试看是否可以调到实现类的方法
public class TestSpring {
@Test
public void test(){
//创建工厂,加载配置文件
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
//获取service对象,调用方法
AccountService bean = ac.getBean(AccountService.class);
bean.findAll();
}
}
5.整合springmvc
5.1 编写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>
<display-name>Archetype Created Web Application</display-name>
<!--乱码过滤器-->
<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>
<!--配置前端控制器-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--加载springmvc.xml配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!--启动加载,正整数就行-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--前端控制拦截器,拦截以.do结尾的请求-->
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
5.2 编写springmvc.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: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 http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--开启注解扫面,扫描Controller-->
<context:component-scan base-package="com.ltb.controller" />
<!--视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/pages/" /><!--前缀-->
<property name="suffix" value=".jsp" /><!--后缀-->
</bean>
<!--异常处理器、文件上传解析器、各种拦截器、哪些资源不拦截等-->
<!--mvc注解支持-->
<mvc:annotation-driven />
</beans>
5.3 编写controller层代码同时编写请求list.jsp和跳转suc.jsp
@Controller
@RequestMapping("/account")
public class AccountController {
@RequestMapping("/findAll.do")
public ModelAndView findAll(){
System.out.println("表现层:查询所有账户");
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("suc");//要跳转的jsp
return modelAndView;
}
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>list.jsp</title>
</head>
<body>
<h3>账户列表页面</h3>
<a href="/account/findAll.do">查询所有</a>
</body>
</html>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>suc.jsp</title>
</head>
<body>
<h3>springmvc工作正常</h3>
</body>
</html>
注意跳转jsp的位置和部署tomcat时不要加项目别名
6.spring整合springmvc
<!--配置监听器,目的是启动时加载spring配置文件,将sevice注入到controller-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--全局扫描路径,监听器默认会加载/WEB-INF目录下的配置文件-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
修改controller层代码,看能否注入service并执行service代码
7. 整合Mybatis
7.1 编写mybatis的配置文件MybatisConfig.xml
<?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>
<!--配置数据库连接环境-->
<environments default="mysql">
<environment id="mysql">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mysql"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</dataSource>
</environment>
</environments>
<!--引入映射文件-->
<mappers>
<package name="com.ltb.dao"/>
</mappers>
</configuration>
7.2 编写dao层代码和测试类
public interface AccountDao {
@Select(value = " select * from account ")
public List<Account> findAll();
}
public class TestMyBatis {
@Test
public void run1() throws IOException {
//加载配置文件
InputStream resourceAsStream = Resources.getResourceAsStream("MybatisConfig.xml");
//构建工厂
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(resourceAsStream);
//创建session
SqlSession sqlSession = factory.openSession();
//获取代理对象
AccountDao mapper = sqlSession.getMapper(AccountDao.class);
//调用方法
List<Account> all = mapper.findAll();
for (Account account : all) {
System.out.println(account);
}
//关闭资源
sqlSession.close();
resourceAsStream.close();
}
}
8. spring整合mybatis
思想就是将上面的MybatisConfig.xml里的内容整合到applicationContext.xml中
<!--把类交给IOC容器去管理 开启注解扫描-->
<context:component-scan base-package="com.litengbin.service"/>
<!--配置数据库连接池-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql:///mysql"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<!--spring整合mybatis,SqlSessionFactoryBean创建工厂对象-->
<bean id="sessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--配置扫描dao接口所在的包-->
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactory" ref="sessionFactory"/>
<property name="basePackage" value="com.litengbin.dao"/>
</bean>
之后修改controller、service层代码验证
9. 配置事务管理
在applicationContext.xml中添加事务的管理
<!--配置声明式事务管理-->
<!--平台事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!--配置事务的通知-->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="find*" read-only="true"/><!--以find开头的均认为是select,事务管理只打开只读就可以-->
<tx:method name="*"/><!--其余的就打开事务,这里也可以配置隔离级别之类的-->
</tx:attributes>
</tx:advice>
<!--配置事务的增强-->
<aop:config>
<!--aop:advisor表示增强自己写的service,execution(public * com.litengbin.service.impl.*ServiceImpl.*(..))表示增强*返回类型的impl包的ServiceImpl结尾的不定个数形参的方法-->
<aop:advisor advice-ref="txAdvice" pointcut="execution(public * com.litengbin.service.impl.*ServiceImpl.*(..))"/>
</aop:config>
还没有评论,来说两句吧...