搭建整合环境
1. 搭建整合环境
整合说明:SSM整合可以使用多种方式,咱们会选择XML + 注解的方式 整合的思路
先搭建整合的环境 先把Spring的配置搭建完成 再使用Spring整合SpringMVC框架 最后使用Spring整合MyBatis框架 创建数据库和表结构 语句
create database ssm;
use ssm;
create table account(
id int primary key auto_increment ,
name varchar ( 20 ) ,
money double
) ;
创建maven的工程(今天会使用到工程的聚合和拆分的概念,这个技术maven高级会讲) 1. 创建ssm_parent父工程(打包方式选择pom,必须的) 2. 创建ssm_web子模块(打包方式是war包) 3. 创建ssm_service子模块(打包方式是jar包) 4. 创建ssm_dao子模块(打包方式是jar包) 5. 创建ssm_domain子模块(打包方式是jar包) 6. web依赖于service,service依赖于dao,dao依赖于domain 7. 在ssm_parent的pom.xml文件中引入坐标依赖 8. 部署ssm_web的项目,只要把ssm_web项目加入到tomcat服务器中即可 pom.xml
< properties>
< spring.version> 5.0.2.RELEASE</ spring.version>
< slf4j.version> 1.6.6</ slf4j.version>
< log4j.version> 1.2.12</ log4j.version>
< mysql.version> 5.1.6</ mysql.version>
< mybatis.version> 3.4.5</ mybatis.version>
</ properties>
< dependencies>
< dependency>
< groupId> org.aspectj</ groupId>
< artifactId> aspectjweaver</ artifactId>
< version> 1.6.8</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-aop</ artifactId>
< version> ${spring.version}</ version>
</ dependency>
< dependency>
< groupId> org.springframework</ groupId>
< artifactId> spring-context</ 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-test</ artifactId>
< version> ${spring.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>
< dependency>
< groupId> junit</ groupId>
< artifactId> junit</ artifactId>
< version> 4.12</ version>
< scope> compile</ scope>
</ dependency>
< dependency>
< groupId> mysql</ groupId>
< artifactId> mysql-connector-java</ artifactId>
< 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>
< version> 1.2</ 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>
< dependency>
< groupId> org.mybatis</ groupId>
< artifactId> mybatis</ artifactId>
< version> ${mybatis.version}</ version>
</ dependency>
< dependency>
< groupId> org.mybatis</ groupId>
< artifactId> mybatis-spring</ artifactId>
< version> 1.3.0</ version>
</ dependency>
< dependency>
< groupId> c3p0</ groupId>
< artifactId> c3p0</ artifactId>
< version> 0.9.1.2</ version>
< type> jar</ type>
< scope> compile</ scope>
</ dependency>
</ dependencies>
编写实体类,在ssm_domain项目中编写
public class Account implements Serializable {
private Integer id;
private String name;
private Double money;
@Override
public String toString ( ) {
return "Account{" +
"id=" + id +
", name='" + name + '\'' +
", money=" + money +
'}' ;
}
public Integer getId ( ) {
return id;
}
public void setId ( Integer id) {
this . id = id;
}
public String getName ( ) {
return name;
}
public void setName ( String name) {
this . name = name;
}
public Double getMoney ( ) {
return money;
}
public void setMoney ( Double money) {
this . money = money;
}
}
编写dao接口
public interface AccountDao {
public List< Account> findAll ( ) ;
public void saveAccount ( Account account) ;
}
编写service接口和实现类
public interface AccountService {
public List< Account> findAll ( ) ;
public void saveAccount ( Account account) ;
}
public class AccountServiceImpl implements AccountService {
@Override
public List< Account> findAll ( ) {
System. out. println ( "业务层: 查询所有" ) ;
return null;
}
@Override
public void saveAccount ( Account account) {
System. out. println ( "业务层:保存账户" ) ;
}
}
Spring框架代码的编写
1. 搭建和测试Spring的开发环境
在ssm_web项目中创建applicationContext.xml的配置文件,编写具体的配置信息。 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: context= " http://www.springframework.org/schema/context"
xmlns: aop= " http://www.springframework.org/schema/aop"
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
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd" >
< context: component-scan base-package = " cn.itcast" >
< context: exclude-filter type = " annotation" expression = " org.springframework.stereotype.Controller" />
</ context: component-scan>
</ beans>
在ssm_web项目中编写测试方法,进行测试
public class testSpring {
@Test
public void run1(){
//加载配置文件
ApplicationContext ac= new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
//获取对象
AccountService as = (AccountService) ac.getBean("accountService");
//调用方法
as.findAll();
}
}
Spring整合SpringMVC框架
1. 搭建和测试SpringMVC的开发环境
在web.xml中配置DispatcherServlet前端控制器
< 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>
在web.xml中配置DispatcherServlet过滤器解决中文乱码
< 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>
创建springmvc.xml的配置文件,编写配置文件
< context: component-scan base-package = " cn.itcast" >
< context: include-filter type = " annotation" expression = " org.springframework.stereotype.Controller" />
</ context: component-scan>
< bean id = " internalResourceViewResolver" class = " org.springframework.web.servlet.view.InternalResourceViewResolver" >
< property name = " prefix" value = " /WEB-INF/pages" > </ property>
< property name = " suffix" value = " .jsp" > </ property>
</ bean>
< mvc: resources location = " /css/" mapping = " /css/**" />
< mvc: resources location = " /images/" mapping = " /images/**" />
< mvc: resources location = " /js/" mapping = " /js/**" />
< mvc: annotation-driven/>
测试SpringMVC的框架搭建是否成功
编写index.jsp和list.jsp编写,超链接
< a href = " account/findAll" > 测试</ a>
2. 创建AccountController类,编写方法,进行测试
@Controller
@RequestMapping ( "/account" )
public class AccountController {
@RequestMapping ( "/findAll" )
public String findAll ( ) {
System. out. println ( "表现层:查询所有账户........" ) ;
return "list" ;
}
}
2. Spring整合SpringMVC的框架
目的:在controller中能成功的调用service对象中的方法。 在项目启动的时候,就去加载applicationContext.xml的配置文件,在web.xml中配置ContextLoaderListener监听器(该监听器只能加载WEB-INF目录下的applicationContext.xml的配置文件)。
< 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>
在controller中注入service对象,调用service对象的方法进行测试
@Controller
@RequestMapping ( "/account" )
public class AccountController {
@Autowired
private AccountService as;
@RequestMapping ( "/findAll" )
public String findAll ( ) {
System. out. println ( "表现层:查询所有账户........" ) ;
List< Account> all = as. findAll ( ) ;
return "list" ;
}
Spring整合MyBatis框架
1. 搭建和测试MyBatis的环境
在web项目中编写SqlMapConfig.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://localhost:3306/ssm" />
< property name = " username" value = " root" />
< property name = " password" value = " admin" />
</ dataSource>
</ environment>
</ environments>
< mappers>
< package name = " cn.itcast.dao" />
</ mappers>
</ configuration>
在AccountDao接口的方法上添加注解,编写SQL语句
public interface AccountDao {
@Select ( "select * from account" )
public List< Account> findAll ( ) ;
@Insert ( "insert into account (name,money) values(#{account.name},#{account.money})" )
public void saveAccount ( Account account) ;
}
编写测试的方法
public class testMybatis {
@Test
public void run1 ( ) throws Exception{
InputStream in = Resources. getResourceAsStream ( "SqlMapConfig.xml" ) ;
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder ( ) . build ( in) ;
SqlSession session = sessionFactory. openSession ( ) ;
AccountDao dao = session. getMapper ( AccountDao. class ) ;
List< Account> list = dao. findAll ( ) ;
for ( Account account : list) {
System. out. println ( account) ;
}
session. close ( ) ;
in. close ( ) ;
}
@Test
public void run2 ( ) throws Exception{
Account account = new Account ( ) ;
account. setId ( 1 ) ;
account. setName ( "王五" ) ;
account. setMoney ( 122.0 ) ;
InputStream in = Resources. getResourceAsStream ( "SqlMapConfig.xml" ) ;
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder ( ) . build ( in) ;
SqlSession session = sessionFactory. openSession ( ) ;
AccountDao dao = session. getMapper ( AccountDao. class ) ;
dao. saveAccount ( account) ;
session. commit ( ) ;
session. close ( ) ;
in. close ( ) ;
}
}
2. Spring整合MyBatis框架
目的:把SqlMapConfig.xml配置文件中的内容配置到applicationContext.xml配置文件中
< bean id = " dataSource" class = " com.mchange.v2.c3p0.ComboPooledDataSource" >
< property name = " driverClass" value = " com.mysql.jdbc.Driver" />
< property name = " jdbcUrl" value = " jdbc:mysql://localhost:3306/ssm?characterEncoding=UTF-8" />
< property name = " user" value = " root" />
< property name = " password" value = " admin" />
</ bean>
< bean id = " sqlSessionFactoryBean" class = " org.mybatis.spring.SqlSessionFactoryBean" >
< property name = " dataSource" ref = " dataSource" />
</ bean>
< bean id = " mapperScanner" class = " org.mybatis.spring.mapper.MapperScannerConfigurer" >
< property name = " basePackage" value = " cn.itcast.dao" > </ property>
</ bean>
在AccountDao接口中添加@Repository注解
@Repository
public interface AccountDao {
@Select ( "select * from account" )
public List< Account> findAll ( ) ;
@Insert ( "insert into account (name,money) values(#{name},#{money})" )
public void saveAccount ( Account account) ;
}
在service中注入dao对象,进行测试
@Service ( "accountService" )
public class AccountServiceImpl implements AccountService {
@Autowired
private AccountDao dao;
@Override
public List< Account> findAll ( ) {
System. out. println ( "业务层: 查询所有" ) ;
List< Account> accounts = dao. findAll ( ) ;
return accounts;
}
@Override
public void saveAccount ( Account account) {
System. out. println ( "业务层:保存账户" ) ;
dao. saveAccount ( account) ;
}
}
配置Spring的声明式事务管理
< ! -- 配置Spring声明式事务管理-- >
< ! -- 配置事务管理器-- >
< 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" / >
< tx: method name= "*" read- only= "false" / >
< / tx: attributes>
< / tx: advice>
< ! -- 配置AOP增强-- >
< aop: config >
< aop: advisor advice- ref= "txAdvice" pointcut= "execution(* cn.itcast.service.impl..*(..))" / >
< / aop: config>
@RequestMapping ( "/saveAccount" )
public void saveAccount ( Account account,
HttpServletRequest request, HttpServletResponse response) throws Exception{
System. out. println ( "表现层:保存账户........" ) ;
as. saveAccount ( account) ;
response. sendRedirect ( request. getContextPath ( ) + "/account/findAll" ) ;
return ;
}