SSM 整合
01,搭建整合环境
1.1,创建数据库和表结构
create database ssm;
create table account ( id int primary key auto_increment, name varchar ( 20 ) , money double ) ;
1.2,创建 Maven 工程
1.3,导入坐标并建立依赖
< properties>
< project. build. sourceEncoding> UTF- 8 < / project. build. sourceEncoding>
< maven. compiler. source> 1.8 < / maven. compiler. source>
< maven. compiler. target> 1.8 < / maven. compiler. target>
< ! -- 版本锁定:-- >
< spring. version> 5.0 .2 . RELEASE< / spring. version>
< slf4j. version> 1.6 .6 < / slf4j. version>
< log4j. version> 1.2 .12 < / log4j. version>
< shiro. version> 1.2 .3 < / shiro. version>
< mysql. version> 5.1 .6 < / mysql. version>
< mybatis. version> 3.4 .5 < / mybatis. version>
< / properties>
< dependencies>
< dependency>
< groupId> junit< / groupId>
< artifactId> junit< / artifactId>
< version> 4.11 < / version>
< scope> test< / scope>
< / dependency>
< ! -- spring -- >
< 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- context- support< / 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- orm< / 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- core< / 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- webmvc< / artifactId>
< version> ${ spring. version} < / version>
< / dependency>
< dependency>
< groupId> org. springframework< / groupId>
< artifactId> spring- tx< / artifactId>
< version> ${ spring. version} < / version>
< / dependency>
< ! -- mysql-- >
< dependency>
< groupId> mysql< / groupId>
< artifactId> mysql- connector- java< / artifactId>
< version> ${ mysql. version} < / version>
< / dependency>
< ! -- servlet-- >
< 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>
< ! -- log -- >
< 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>
< ! -- mybatis-- >
< 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>
1.4,编写实体类
public class Account implements Serializable {
private Integer id;
private String name;
private double 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;
}
@Override
public String toString ( ) {
return "Account{" +
"id=" + id +
", name='" + name + '\'' +
", money=" + money +
'}' ;
}
}
1.5,编写业务层接口和其接口的实现类
业务层接口包下新建AccountService接口
public interface AccountService {
public List< Account> findAll ( ) ;
public void saveAccount ( Account account) ;
}
在业务层接口包下新建impl文件夹,在此文件夹下创建业务层接口的实现类AccountServiceImpl
@Service ( "accountService" )
public class AccountServiceImpl implements AccountService {
@Override
public List< Account> findAll ( ) {
System. out. println ( "业务层查询所账户。。。。" ) ;
return null;
}
@Override
public void saveAccount ( Account account) {
System. out. println ( "业务层保存账户信息。。。。" ) ;
}
}
1.6,编写持久层接口
public interface AccountDao {
public List< Account> findAll ( ) ;
public void saveAccount ( Account account) ;
}
1.7,编写控制类
在控制类包中新建AccountController控制类
@Controller
@RequestMapping ( "/account" )
public class AccountController {
@RequestMapping ( "/findAll" )
public String findAll ( ) {
System. out. println ( "表现层:查询所有账户..." ) ;
return "success" ;
}
}
02,Spring框架代码的编写
搭建和测试Spring的开发环境
在resource文件夹
下创建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: tx= "http://www.springframework.org/schema/tx"
xmlns: context= "http://www.springframework.org/schema/context"
xsi: schemaLocation= "http: / / www. springframework. org/ schema/ beans
http: / / www. springframework. org/ schema/ beans/ spring- beans. 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
http: / / www. springframework. org/ schema/ context
http: / / www. springframework. org/ schema/ context/ spring- context. xsd">
< ! -- 配置 spring 创建容器时要扫描的包 -- >
< ! -- 开启注解扫描,要扫描的是service和dao层的注解,要忽略web层注解,因为web层让SpringMVC框架去管理 -- >
< context: component- scan base- package = "com.aismall" >
< ! -- 不扫描控制类中的Controller注解-- >
< context: exclude- filter type= "annotation" expression= "org.springframework.stereotype.Controller" / >
< / context: component- scan
< / beans>
public class TestSpring {
@Test
public void testSpring01 ( ) {
ApplicationContext ac= new ClassPathXmlApplicationContext ( "classpath:applicationContext.xml" ) ;
AccountService as= ( AccountService) ac. getBean ( "accountService" ) ;
as. findAll ( ) ;
}
}
业务层查询所账户。。。。
03,Spring框架整合SpringMVC框架
3.1,搭建和测试SpringMVC的开发环境
3.1.1,在web.xml中配置DispatcherServlet前端控制器
注意:只有在web.xml中配置了,才会去加载springmvc.xml配置文件
< ! -- 配置前端控制器-- >
< servlet>
< servlet- name> dispatcherController< / 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> dispatcherController< / servlet- name>
< url- pattern> / < / url- pattern>
< / servlet- mapping>
3.1.2,在web.xml中配置过滤器解决中文乱码问题,
< ! -- 配置过滤器解决中文乱码-- >
< 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>
3.1.3,在resource文件夹下创建springmvc.xml配置文件,
< ? xml version= "1.0" encoding= "UTF-8" ? >
< beans xmlns= "http://www.springframework.org/schema/beans"
xmlns: mvc= "http://www.springframework.org/schema/mvc"
xmlns: context= "http://www.springframework.org/schema/context"
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/ mvc
http: / / www. springframework. org/ schema/ mvc/ spring- mvc. xsd
http: / / www. springframework. org/ schema/ context
http: / / www. springframework. org/ schema/ context/ spring- context. xsd">
< ! -- 扫描controller的注解,别的不扫描 -- >
< context: component- scan base- package = "com.aismall" >
< context: include- filter type= "annotation" expression= "org.springframework.stereotype.Controller" / >
< / context: component- scan>
< ! -- 配置视图解析器 -- >
< bean id= "viewResolver" class = "org.springframework.web.servlet.view.InternalResourceViewResolver" >
< ! -- JSP文件所在的目录 -- >
< property name= "prefix" value= "/WEB-INF/pages/" / >
< ! -- 文件的后缀名 -- >
< property name= "suffix" value= ".jsp" / >
< / bean>
< ! -- 设置静态资源不过滤 -- >
< mvc: resources location= "/css/" mapping= "/css/**" / >
< mvc: resources location= "/images/" mapping= "/images/**" / >
< mvc: resources location= "/js/" mapping= "/js/**" / >
< ! -- 开启对SpringMVC注解的支持 -- >
< mvc: annotation- driven / >
< / beans>
3.1.4,测试框架是否搭建成功
< % @ page contentType= "text/html;charset=UTF-8" language= "java" % >
< html>
< head>
< title> index< / title>
< / head>
< body>
< h3> Hello AISMALL< / h3>
< a href= "account/findAll" > 戳一下进行查询< / a>
< / body>
< / html>
在WEB-INF下创建pages文件夹,在文件夹下编写success.jsp
< % @ page contentType= "text/html;charset=UTF-8" language= "java" % >
< html>
< head>
< title> success< / title>
< / head>
< body>
< h3> 账户查询成功。。。。< / h3>
< / body>
< / html>
控制台输出结果:
表现层:查询所有账户. . .
success. jsp页面显示结果:
账户查询成功。。。。
3.2,Spring框架整合SpringMVC框架
3.2.1,整合的目的
在controller中能成功的调用service对象中的方法。
3.2.2,如何实现
在web.xml中配置一下applicationContext.xml
配置文件,使项目在启动后就会加载关于spring配置的applicationContext.xml
配置文件 在web.xml
中配置spring的监听器即可 注意一下:项目启动后只会自动加载WEB-INF问价夹下的web.xml配置文件,要想把resource文件夹下的springmvc.xml和spring.xml配置文件同时加载就要配置一下
< ! -- 配置Spring的监听器 -- >
< 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>
此监听器默认
只会加载WEB-INF文件夹下的配置文件,要想加载别的文件夹下的配置文件需要配置加载路径
3.2.3,修改Controller类
在controller中注入service对象
调用service对象的方法进行测试
@Controller
@RequestMapping ( "/account" )
public class AccountController {
@Autowired
private AccountService accoutService;
@RequestMapping ( "/findAll" )
public String findAll ( ) {
System. out. println ( "表现层:查询所有账户..." ) ;
accoutService. findAll ( ) ;
return "success" ;
}
}
3.2.4,测试
控制台输出结果:
表现层:查询所有账户. . .
业务层查询所账户。。。。
success. jsp页面显示结果:
账户查询成功。。。。
04,Spring框架整合MyBatis框架
4.1,搭建和测试Mybatis的开发环境
4.1.1,在resource文件夹创建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:///ssm" / >
< property name= "username" value= "root" / >
< property name= "password" value= "12345678" / >
< / dataSource>
< / environment>
< / environments>
< ! -- 使用的是注解 -- >
< mappers>
< ! -- < mapper class = "com.aismall.dao.AccountDao" / > -- >
< ! -- 该包下所有的dao接口都可以使用 -- >
< package name= "com.aismall.dao" / >
< / mappers>
< / configuration>
4.1.2,修改AccountDao接口
public interface AccountDao {
@Select ( "select * from account" )
public List< Account> findAll ( ) ;
@Insert ( value= "insert into account (name,money) values (#{name},#{money})" )
public void saveAccount ( Account account) ;
}
4.1.3,测试框架是否搭建成功
public class TestMybatis {
@Test
public void run1 ( ) throws Exception {
InputStream inputStream = Resources. getResourceAsStream ( "sqlMapConfig.xml" ) ;
SqlSessionFactory factory = new SqlSessionFactoryBuilder ( ) . build ( inputStream) ;
SqlSession session = factory. openSession ( ) ;
AccountDao dao = session. getMapper ( AccountDao. class ) ;
List< Account> list = dao. findAll ( ) ;
for ( Account account : list) {
System. out. println ( account) ;
}
session. close ( ) ;
inputStream. close ( ) ;
}
@Test
public void run2 ( ) throws Exception {
Account account = new Account ( ) ;
account. setName ( "AISMALL" ) ;
account. setMoney ( 10000d ) ;
InputStream inputStream = Resources. getResourceAsStream ( "sqlMapConfig.xml" ) ;
SqlSessionFactory factory = new SqlSessionFactoryBuilder ( ) . build ( inputStream) ;
SqlSession session = factory. openSession ( ) ;
AccountDao dao = session. getMapper ( AccountDao. class ) ;
dao. saveAccount ( account) ;
session. commit ( ) ;
session. close ( ) ;
inputStream. close ( ) ;
}
}
Account{ id= 1 , name= 'AISMALL' , money= 10000.0 }
4.2,Spring框架整合MyBatis框架
4.2.1,整合的目的
service能成功的调用dao的对象,对数据库进行查询 生成AccountDao接口的代理对象,存到springIOC容器中,然后在使用的时候将对象进行注入
4.2.2,如何实现
把sqlMapConfig.xml配置文件中的内容配置到applicationContext.xml配置文件中
! -- spring整合Mybatis框架-- >
< ! -- 配置C3P0的连接池对象 -- >
< bean id= "dataSource" class = "com.mchange.v2.c3p0.ComboPooledDataSource" >
< property name= "driverClass" value= "com.mysql.jdbc.Driver" / >
< property name= "jdbcUrl" value= "jdbc:mysql:///ssm" / >
< property name= "user" value= "root" / >
< property name= "password" value= "12345678" / >
< / bean>
< ! -- 配置SqlSessionFactory的工厂 -- >
< bean id= "sqlSessionFactory" class = "org.mybatis.spring.SqlSessionFactoryBean" >
< property name= "dataSource" ref= "dataSource" / >
< / bean>
< ! -- 配置扫描dao的包 -- >
< bean id= "mapperScanner" class = "org.mybatis.spring.mapper.MapperScannerConfigurer" >
< property name= "basePackage" value= "com.aismall.dao" / >
< / bean>
在applicationContext.xml中配置事务的通知
< ! -- 配置spring框架声明式事务管理-- >
< ! -- 配置事务管理器-- >
< bean id= "transactionManager" class = "org.springframework.jdbc.datasource.DataSourceTransactionManager" >
< property name= "dataSource" ref= "dataSource" > < / property>
< / bean>
< ! -- 配置事务通知-- >
< tx: advice id= "txAdvice" transaction- manager= "transactionManager" >
< tx: attributes>
< tx: method name= "find*" read- only= "true" / >
< tx: method name= "*" isolation= "DEFAULT" / >
< / tx: attributes>
< / tx: advice>
< ! -- 配置AOP增强-- >
< aop: config>
< aop: advisor advice- ref= "txAdvice" pointcut= "execution(* com.aismall.service.impl.AccountServiceImpl.*(..))" / >
< / aop: config>
4.2.3,修改AccountDao接口
@Repository
public interface AccountDao {
@Select ( "select * from account" )
public List< Account> findAll ( ) ;
@Insert ( value= "insert into account (name,money) values (#{name},#{money})" )
public void saveAccount ( Account account) ;
}
4.2.4,修改业务层接口的实现类
@Service ( "accountService" )
public class AccountServiceImpl implements AccountService {
private AccountDao accountDao;
@Override
public List< Account> findAll ( ) {
System. out. println ( "业务层查询所账户。。。。" ) ;
return accountDao. findAll ( ) ;
}
@Override
public void saveAccount ( Account account) {
System. out. println ( "业务层保存账户信息。。。。" ) ;
accountDao. saveAccount ( account) ;
}
}
4.2.5,修改控制类
@Controller
@RequestMapping ( "/account" )
public class AccountController {
@Autowired
private AccountService accoutService;
@RequestMapping ( "/findAll" )
public String findAll ( Model model) {
System. out. println ( "控制类查询所有账户..." ) ;
List< Account> list= accoutService. findAll ( ) ;
for ( Account account : list) {
System. out. println ( account) ;
}
model. addAttribute ( "list" , list) ;
return "success" ;
}
@RequestMapping ( "/saveAccount" )
public String saveAccount ( Account account) {
System. out. println ( "控制类保存执行了,,,," ) ;
accoutService. saveAccount ( account) ;
return "success" ;
}
}
4.2.6,修改index.jsp和success.jsp
< % @ page contentType= "text/html;charset=UTF-8" language= "java" % >
< html>
< head>
< title> index< / title>
< / head>
< body>
< h3> Hello AISMALL< / h3>
< a href= "account/findAll" > 戳一下进行查询< / a>
< form action= "account/saveAccount" method= "post" >
姓名:< input type= "text" name= "name" / > < br/ >
金额:< input type= "text" name= "money" / > < br>
< input type= "submit" value= "保存账户" >
< / form>
< / body>
< / html>
< % @ page contentType= "text/html;charset=UTF-8" language= "java" isELIgnored= "false" % >
< html>
< head>
< title> success< / title>
< / head>
< body>
< h3> 账户查询成功。。。。< / h3>
${ list}
< / body>
< / html>
4.2.7,启动服务器运行测试
完整代码地址:https://github.com/alsmall/java_note.git