基于Maven的SSM整合详解
来源:互联网 发布:翻墙软件大全 编辑:程序博客网 时间:2024/06/06 05:45
一、什么是SSM
提到SSM就不得不说到SSH,也就是Struts2+Spring+Hibernate。这是一个非常经典的MVC框架组合。也就是数据层由Hibernate负责,视图层由struts2负责,业务层由Spring负责。但是随着Spring家族的发展,现在另一个非常流行的MVC框架SSM即Spring+SpringMVC+Mybatis也受到越来越多人的重视。这里对这两种组合框架不做评价,只能说业务场景和处理方法都是大同小异。事实上,我们不用框架,用servlet+jsp+JDBC也能写出一个MVC的程序,但是我们追求的是优雅和高效。学习框架可以帮助我们更好的理解MVC的分层和业务逻辑,那么就开始吧。
Spring:很好很强大,常常有人说学完Spring家族就等于学习了整个网络WEB的流行技术。我们平时开发接触最多的估计就是Spring的IOC容器,它可以装载javabean,结合Sping的注解功能,编写的程序优雅至极。有了这个机制,我们就不用在每次使用这个类的时候为它初始化,很少看到关键字new。另外还有spring的aop也就是面向切面编程,Spring的事务管理等等都是我们经常用到的。
SpringMVC:它在SSM中用于web层,相当于controller(等价于传统的servlet和struts2中的action),用来处理用户请求。举个例子,用户在地址栏输入http://网站域名/login,那么springmvc就会拦截到这个请求,并且调用controller层中相应的方法,(中间可能包含验证用户名和密码的业务逻辑,以及查询数据库操作,但这些都不是springmvc的职责),最终把结果返回给用户,并且返回相应的页面(当然也可以只返回json/xml等格式数据)。springmvc与用户打交道!!
MyBatis:基于xml的数据持久层框架,和Hibernate起的作用相同,负责与数据库进行交互。但是Mybatis的查询语句需要自己进行编写,而Hibernate则是框架自己生成。Mybatis的使用更加灵活,可以结合实际场景进行不同的优化。
二、整合工具
IDE:Eclipse Java EE IDE for Web Developers Version: Neon Release (4.6.0)
JDK:1.8
maven:maven3.3.9
Tomcat:tomcat9
三、创建项目基本架构
使用eclipse创建一个maven web工程,创建如下包和目录
下面来一一介绍每一个包和目录的作用
1、dao(数据访问层)
负责与数据打交道,可以是数据库操作,也可以是文件读写操作,甚至是redis缓存操作,总之与数据操作有关的都放在这里。因为我们用的是mybatis,可以直接在配置文件中实现查询语句,所以没有daoImpl这个包。
2、entity(实体类层)
一般与数据库的表相对应,封装dao层取出来的数据为一个对象,也就是我们常说的pojo,所以也有许多人包这个包直接命名为pojo。一般只在dao层与service层之间来传输。
3、dto(数据传输层)
主要用于service层与web层之间传输。实际开发中,很多时候一个entity并不能满足我们的业务需求,可能呈现给用户的信息十分之多,这时候就有了dto,它可以把多个pojo整合起来。
4、service(业务逻辑抽象层)
主要编写我们的业务逻辑接口。
serviceImpl(业务逻辑实现层)
实现我们业务接口,是事务管理的主要部分。
5、web(控制器)
springmvc就是在这里发挥作用的,主要编写视图逻辑的相关代码。也有人将这个包命名为controller。
这五个包构成了MVC的基本分层。每一层负责不同的逻辑,从而写出非常优雅的代码。
这里还有两个额外的包:
1、enums:顾名思义,这个包里定义了一些枚举类。
2、exception:顾名思义,这个包里定义了一些自定义的异常。
下面来看其他的包和目录
1、mapper目录
存放dao中每个方法对应的sql的xml配置,编写后,无需写daoImpl。
2、spring目录
存放spring相关的配置文件,有dao service web三层。即spring整合Mybatis,Spring和SpringMVC三个配置文件。
3、test包:用来进行单元测试。
建立项目基本目录后,通过pom.xml来引入相关的jar包。这里不得不说,通过maven来配置依赖真是相当的方便啊。
pom.xml文件如下:
<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.kang</groupId>
<artifactId>SSM</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!-- 1.日志 -->
<!-- 实现slf4j接口并整合 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.1</version>
</dependency>
<!-- 2.数据库 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<!-- DAO: MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.3</version>
</dependency>
<!-- 3.Servlet web -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.4</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!-- 4.Spring -->
<!-- 1)Spring核心 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<!-- 2)Spring DAO层 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<!-- 3)Spring web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<!-- 4)Spring test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<!-- redis客户端:Jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>com.dyuproject.protostuff</groupId>
<artifactId>protostuff-core</artifactId>
<version>1.0.8</version>
</dependency>
<dependency>
<groupId>com.dyuproject.protostuff</groupId>
<artifactId>protostuff-runtime</artifactId>
<version>1.0.8</version>
</dependency>
<!-- Map工具类 -->
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2</version>
</dependency>
</dependencies>
</project>
保存后,maven会自动从仓库中下载jar包,完成后如图:
四、编写ssm整合的xml文件
1、首先编写外部属性文件来配置JDBC的基本参数
2、编写Mybatis的全局配置文件
在recources文件夹里新建mybatis-config.xml文件来配置Mybatis,主要包含以下配置:
1)使用自增主键。
2)使用列别名。
3)开启驼峰命名转换 create_time -> createTime。
mybatis-config.xml
3、编写spring整合Mybatis的xml文件。
在spring文件夹里新建spring-dao.xml文件来整合Mybatis,主要完成如下配置:
1)读入外部属性文件获取数据库连接相关参数。
2)配置数据连接池。包括配置连接属性,可以读配置项文件而不在这里写死,配置c3p0数据源。
3)配置SqlSessionFactory对象为mybatis相关。
4)扫描entity层和mapper目录下的xml文件。
5)扫描dao层接口,动态实现dao接口,也就是说不需要daoImpl,sql和参数都写在xml文件上。
spring-dao.xml
4、编写spring的事务管理配置文件
在spring文件夹里新建spring-service.xml文件来配置spring的事务,主要完成如下配置:
1)扫描service包中的所有注解 @Service。
2)配置事务管理器,把事务管理交由spring来完成。
3)配置基于注解的声明式事务,可以直接在方法上@Transaction。也可以使用基于xml的事务配置,可以根据实际情况而定。
spring-service.xml
5、编写springMVC的xml配置文件
在spring文件夹里新建spring-web.xml文件,主要完成如下配置:
1)开启SpringMVC注解模式,可以使用@RequestMapping,@PathVariable,@ResponseBody等。
2)对静态资源处理,如js,css,jpg等。
3)配置jsp 显示ViewResolver,例如在controller中某个方法返回一个string类型的”login”,实际上会返回”/WEB-INF/login.jsp”。
4)扫描web层 @Controller。
spring-web.xml
6、编写web.xml完成项目整体配置
web.xml
7、编写日志配置文件
logback.xml
五、应用示例
1、创建数据表,这里创建一个种类表category_
Category.java
3、编写dao层的代码
CategoryDao.java
4、编写dao层相应的Mybatis的xml文件
CategoryDao.xml
5、编写service层的代码
1)CategoryService,java
2)CategoryServiceImpl.java
7、在WEB-INF下创建一个jsp目录(SpringMVC的配置了所有结果转到该目录),在该目录下创建一个jsp页面来显示列表。在这个jsp文件中,通过forEach标签,遍历CategoryController传递过来的集合数据。
listCategory.jsp
9、小结
下面来看一下从浏览器发出请求到返回结果的详细过程。
1)首先浏览器上访问路径 /listCategory
2)tomcat根据web.xml上的配置信息,拦截到了/listCategory,并将其交由DispatcherServlet处理。
3)DispatcherServlet 根据springMVC的配置,将这次请求交由CategoryController类进行处理,所以需要进行这个类的实例化
4)在实例化CategoryController的时候,注入CategoryServiceImple
5)在实例化CategoryServiceImple的时候,又注入CategoryDao
6)根据spring-dao.xml中的配置信息,将CategoryDao和CategoryDao.xml关联起来了。
7)这样拿到了实例化好了的CategoryController,并调用listCategory方法
8)在listCategory方法中,访问CategoryService,并获取数据,并把数据放在"cs"上,接着服务端跳转到listCategory.jsp去。
9)最后在listCategory.jsp 中显示数据。
提到SSM就不得不说到SSH,也就是Struts2+Spring+Hibernate。这是一个非常经典的MVC框架组合。也就是数据层由Hibernate负责,视图层由struts2负责,业务层由Spring负责。但是随着Spring家族的发展,现在另一个非常流行的MVC框架SSM即Spring+SpringMVC+Mybatis也受到越来越多人的重视。这里对这两种组合框架不做评价,只能说业务场景和处理方法都是大同小异。事实上,我们不用框架,用servlet+jsp+JDBC也能写出一个MVC的程序,但是我们追求的是优雅和高效。学习框架可以帮助我们更好的理解MVC的分层和业务逻辑,那么就开始吧。
Spring:很好很强大,常常有人说学完Spring家族就等于学习了整个网络WEB的流行技术。我们平时开发接触最多的估计就是Spring的IOC容器,它可以装载javabean,结合Sping的注解功能,编写的程序优雅至极。有了这个机制,我们就不用在每次使用这个类的时候为它初始化,很少看到关键字new。另外还有spring的aop也就是面向切面编程,Spring的事务管理等等都是我们经常用到的。
SpringMVC:它在SSM中用于web层,相当于controller(等价于传统的servlet和struts2中的action),用来处理用户请求。举个例子,用户在地址栏输入http://网站域名/login,那么springmvc就会拦截到这个请求,并且调用controller层中相应的方法,(中间可能包含验证用户名和密码的业务逻辑,以及查询数据库操作,但这些都不是springmvc的职责),最终把结果返回给用户,并且返回相应的页面(当然也可以只返回json/xml等格式数据)。springmvc与用户打交道!!
MyBatis:基于xml的数据持久层框架,和Hibernate起的作用相同,负责与数据库进行交互。但是Mybatis的查询语句需要自己进行编写,而Hibernate则是框架自己生成。Mybatis的使用更加灵活,可以结合实际场景进行不同的优化。
二、整合工具
IDE:Eclipse Java EE IDE for Web Developers Version: Neon Release (4.6.0)
JDK:1.8
maven:maven3.3.9
Tomcat:tomcat9
三、创建项目基本架构
使用eclipse创建一个maven web工程,创建如下包和目录
下面来一一介绍每一个包和目录的作用
1、dao(数据访问层)
负责与数据打交道,可以是数据库操作,也可以是文件读写操作,甚至是redis缓存操作,总之与数据操作有关的都放在这里。因为我们用的是mybatis,可以直接在配置文件中实现查询语句,所以没有daoImpl这个包。
2、entity(实体类层)
一般与数据库的表相对应,封装dao层取出来的数据为一个对象,也就是我们常说的pojo,所以也有许多人包这个包直接命名为pojo。一般只在dao层与service层之间来传输。
3、dto(数据传输层)
主要用于service层与web层之间传输。实际开发中,很多时候一个entity并不能满足我们的业务需求,可能呈现给用户的信息十分之多,这时候就有了dto,它可以把多个pojo整合起来。
4、service(业务逻辑抽象层)
主要编写我们的业务逻辑接口。
serviceImpl(业务逻辑实现层)
实现我们业务接口,是事务管理的主要部分。
5、web(控制器)
springmvc就是在这里发挥作用的,主要编写视图逻辑的相关代码。也有人将这个包命名为controller。
这五个包构成了MVC的基本分层。每一层负责不同的逻辑,从而写出非常优雅的代码。
这里还有两个额外的包:
1、enums:顾名思义,这个包里定义了一些枚举类。
2、exception:顾名思义,这个包里定义了一些自定义的异常。
下面来看其他的包和目录
1、mapper目录
存放dao中每个方法对应的sql的xml配置,编写后,无需写daoImpl。
2、spring目录
存放spring相关的配置文件,有dao service web三层。即spring整合Mybatis,Spring和SpringMVC三个配置文件。
3、test包:用来进行单元测试。
建立项目基本目录后,通过pom.xml来引入相关的jar包。这里不得不说,通过maven来配置依赖真是相当的方便啊。
pom.xml文件如下:
<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.kang</groupId>
<artifactId>SSM</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!-- 1.日志 -->
<!-- 实现slf4j接口并整合 -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.1</version>
</dependency>
<!-- 2.数据库 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>c3p0</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.1.2</version>
</dependency>
<!-- DAO: MyBatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.3</version>
</dependency>
<!-- 3.Servlet web -->
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.4</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<!-- 4.Spring -->
<!-- 1)Spring核心 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<!-- 2)Spring DAO层 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<!-- 3)Spring web -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<!-- 4)Spring test -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<!-- redis客户端:Jedis -->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>2.7.3</version>
</dependency>
<dependency>
<groupId>com.dyuproject.protostuff</groupId>
<artifactId>protostuff-core</artifactId>
<version>1.0.8</version>
</dependency>
<dependency>
<groupId>com.dyuproject.protostuff</groupId>
<artifactId>protostuff-runtime</artifactId>
<version>1.0.8</version>
</dependency>
<!-- Map工具类 -->
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.2</version>
</dependency>
</dependencies>
</project>
保存后,maven会自动从仓库中下载jar包,完成后如图:
四、编写ssm整合的xml文件
1、首先编写外部属性文件来配置JDBC的基本参数
jdbc.propertiesjdbc.driver=com.mysql.jdbc.Driverjdbc.url=jdbc:mysql://127.0.0.1:3306/ssm?useUnicode=true&characterEncoding=utf8jdbc.username=rootjdbc.password=root这里需要注意:配置文件中的jdbc.username,如果写成username,可能会与系统环境中的username变量冲突,所以到时候真正连接数据库的时候,用户名就被替换成系统中的用户名(如可能是administrator),那肯定是连接不成功的。
2、编写Mybatis的全局配置文件
在recources文件夹里新建mybatis-config.xml文件来配置Mybatis,主要包含以下配置:
1)使用自增主键。
2)使用列别名。
3)开启驼峰命名转换 create_time -> createTime。
mybatis-config.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><!-- 配置全局属性 --><settings><!-- 使用jdbc的getGeneratedKeys获取数据库自增主键值 --><setting name="useGeneratedKeys" value="true" /><!-- 使用列别名替换列名 默认:true --><setting name="useColumnLabel" value="true" /><!-- 开启驼峰命名转换:Table{create_time} -> Entity{createTime} --><setting name="mapUnderscoreToCamelCase" value="true" /></settings></configuration>
3、编写spring整合Mybatis的xml文件。
在spring文件夹里新建spring-dao.xml文件来整合Mybatis,主要完成如下配置:
1)读入外部属性文件获取数据库连接相关参数。
2)配置数据连接池。包括配置连接属性,可以读配置项文件而不在这里写死,配置c3p0数据源。
3)配置SqlSessionFactory对象为mybatis相关。
4)扫描entity层和mapper目录下的xml文件。
5)扫描dao层接口,动态实现dao接口,也就是说不需要daoImpl,sql和参数都写在xml文件上。
spring-dao.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"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"><!-- 配置整合mybatis过程 --><!-- 1.读入外部属性文件:通过${key}来获取相关值 --><context:property-placeholder location="classpath:jdbc.properties" /><!-- 2.数据库连接池 --><bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"><!-- 配置连接池属性 --><property name="driverClass" value="${jdbc.driver}" /><property name="jdbcUrl" value="${jdbc.url}" /><property name="user" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /> <!-- c3p0的数据也可以放到外部属性文件中,用property-placeholder加载后, 通过"${xxx}"的方式来加载数据 --><!-- c3p0连接池的私有属性 --><property name="maxPoolSize" value="30" /><property name="minPoolSize" value="10" /><!-- 关闭连接后不自动commit --><property name="autoCommitOnClose" value="false" /><!-- 获取连接超时时间 --><property name="checkoutTimeout" value="10000" /><!-- 当获取连接失败重试次数 --><property name="acquireRetryAttempts" value="2" /></bean><!-- 3.配置SqlSessionFactory对象为Mybatis相关 --><bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 注入数据库连接池 --><property name="dataSource" ref="dataSource" /><!-- 指定MyBaties全局配置文件:mybatis-config.xml --><property name="configLocation" value="classpath:mybatis-config.xml" /><!-- 扫描entity包 使用别名 --><property name="typeAliasesPackage" value="com.kang.ssm.entity" /><!-- 扫描sql配置文件:mapper需要的xml文件 --><property name="mapperLocations" value="classpath:mapper/*.xml" /></bean><!-- 4.配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 注入sqlSessionFactory --><property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" /><!-- 给出需要扫描Dao接口包 --><property name="basePackage" value="com.kang.ssm.dao" /></bean></beans>
4、编写spring的事务管理配置文件
在spring文件夹里新建spring-service.xml文件来配置spring的事务,主要完成如下配置:
1)扫描service包中的所有注解 @Service。
2)配置事务管理器,把事务管理交由spring来完成。
3)配置基于注解的声明式事务,可以直接在方法上@Transaction。也可以使用基于xml的事务配置,可以根据实际情况而定。
spring-service.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: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/tx http://www.springframework.org/schema/tx/spring-tx.xsd"><!-- 扫描service包下所有使用注解的类型 --><context:component-scan base-package="com.kang.ssm.service" /><!-- 配置事务管理器 --><bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!-- 注入数据库连接池 --><property name="dataSource" ref="dataSource" /></bean><!-- 配置基于注解的声明式事务 --><tx:annotation-driven transaction-manager="transactionManager"/></beans>
5、编写springMVC的xml配置文件
在spring文件夹里新建spring-web.xml文件,主要完成如下配置:
1)开启SpringMVC注解模式,可以使用@RequestMapping,@PathVariable,@ResponseBody等。
2)对静态资源处理,如js,css,jpg等。
3)配置jsp 显示ViewResolver,例如在controller中某个方法返回一个string类型的”login”,实际上会返回”/WEB-INF/login.jsp”。
4)扫描web层 @Controller。
spring-web.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/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsdhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"><!-- 配置SpringMVC --><!-- 1.开启SpringMVC注解模式 --><mvc:annotation-driven /><!-- 2.静态资源默认servlet配置 (1)加入对静态资源的处理:js,gif,png (2)允许使用"/"做整体映射 --><mvc:default-servlet-handler /><!-- 3.配置jsp 显示ViewResolver --><beanclass="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="viewClass"value="org.springframework.web.servlet.view.JstlView" /><property name="prefix" value="/WEB-INF/jsp/" /><property name="suffix" value=".jsp" /></bean><!-- 4.扫描web相关的bean --><context:component-scan base-package="com.kang.ssm.web" /></beans>
6、编写web.xml完成项目整体配置
web.xml
<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_3_1.xsd"version="3.1" metadata-complete="true"><!-- 如果是用mvn命令生成的xml,需要修改servlet版本为3.1 --><!-- 配置DispatcherServlet --> <!-- spring的配置文件--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- spring mvc核心:分发servlet --> <servlet> <servlet-name>mvc-dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- spring mvc的配置文件 --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/spring-web.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>mvc-dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping></web-app>
7、编写日志配置文件
logback.xml
<?xml version="1.0" encoding="UTF-8"?><configuration debug="true"><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><!-- encoders are by default assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder --><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><root level="debug"><appender-ref ref="STDOUT" /></root></configuration>至此,我们就完成了基于maven的SSM的项目的基本配置。
五、应用示例
1、创建数据表,这里创建一个种类表category_
CREATE TABLE `category_` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8向表中插入一些数据,因为设置了主键自增,所以插入数据时可以不指定主键值。
insert into category_ values(null,"category1");insert into category_ values(null,"category2");insert into category_ values(null,"category3");insert into category_ values(null,"category4");insert into category_ values(null,"category5");2、创建entity层的代码
Category.java
package com.kang.ssm.entity;public class Category {private int id;//对应种类idprivate String name;//对应种类名public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "Category [id=" + id + ", name=" + name + "]";}}
3、编写dao层的代码
CategoryDao.java
package com.kang.ssm.dao;import java.util.List;import com.kang.ssm.entity.Category;public interface CategoryDao { public int add(Category category); public void delete(int id); public Category get(int id); public int update(Category category); public List<Category> list(); public int count(); }
4、编写dao层相应的Mybatis的xml文件
CategoryDao.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="com.kang.ssm.dao.CategoryDao"> <insert id="add" parameterType="Category" > insert into category_ ( name ) values (#{name}) </insert> <delete id="delete" parameterType="Category" > delete from category_ where id= #{id} </delete> <select id="get" parameterType="_int" resultType="Category"> select * from category_ where id= #{id} </select> <update id="update" parameterType="Category" > update category_ set name=#{name} where id=#{id} </update> <select id="list" resultType="Category"> select * from category_ </select> </mapper>
5、编写service层的代码
1)CategoryService,java
package com.kang.ssm.service;import java.util.List;import com.kang.ssm.entity.Category;public interface CategoryService { //这里只实现了查询所有种类的服务 List<Category> list(); }
2)CategoryServiceImpl.java
package com.kang.ssm.service.impl;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import com.kang.ssm.dao.CategoryDao;import com.kang.ssm.entity.Category;import com.kang.ssm.service.CategoryService;@Servicepublic class CategoryServiceImpl implements CategoryService{ @Autowired CategoryDao categoryDao; public List<Category> list(){ return categoryDao.list(); } }
6、编写web层的代码
CategoryController.javapackage com.kang.ssm.web;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;import com.kang.ssm.entity.Category;import com.kang.ssm.service.CategoryService;//告诉spring mvc这是一个控制器类@Controller@RequestMapping("")public class CategoryController { @Autowired CategoryService categoryService; @RequestMapping("listCategory") public ModelAndView listCategory(){ ModelAndView mav = new ModelAndView(); List<Category> cs= categoryService.list(); // 放入转发参数 mav.addObject("cs", cs); // 放入jsp路径 mav.setViewName("listCategory"); return mav; }}
7、在WEB-INF下创建一个jsp目录(SpringMVC的配置了所有结果转到该目录),在该目录下创建一个jsp页面来显示列表。在这个jsp文件中,通过forEach标签,遍历CategoryController传递过来的集合数据。
listCategory.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.util.*"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%><table align='center' border='1' cellspacing='0'><tr><td>id</td><td>name</td></tr><c:forEach items="${cs}" var="c" varStatus="st"><tr><td>${c.id}</td><td>${c.name}</td></tr></c:forEach></table>8、将项目部署到tomcat中进行测试,输入http://localhost:8081/SSM/listCategory结果如下:
9、小结
下面来看一下从浏览器发出请求到返回结果的详细过程。
1)首先浏览器上访问路径 /listCategory
2)tomcat根据web.xml上的配置信息,拦截到了/listCategory,并将其交由DispatcherServlet处理。
3)DispatcherServlet 根据springMVC的配置,将这次请求交由CategoryController类进行处理,所以需要进行这个类的实例化
4)在实例化CategoryController的时候,注入CategoryServiceImple
5)在实例化CategoryServiceImple的时候,又注入CategoryDao
6)根据spring-dao.xml中的配置信息,将CategoryDao和CategoryDao.xml关联起来了。
7)这样拿到了实例化好了的CategoryController,并调用listCategory方法
8)在listCategory方法中,访问CategoryService,并获取数据,并把数据放在"cs"上,接着服务端跳转到listCategory.jsp去。
9)最后在listCategory.jsp 中显示数据。
附github源码地址:github源码
0 0
- 基于Maven的SSM整合详解
- 基于maven整合SSM
- 基于Maven的SSM框架整合(Spring+SpringMVC+MyBatis)
- 基于 maven 的 ssm 项目搭建三:整合 spring mvc
- 基于 maven 的 ssm 项目搭建四:整合 log4j
- 基于 maven 的 ssm 项目搭建五:整合 spring
- idea中搭建基于maven的ssm整合框架
- 基于ssm框架的个人博客(2)--基于maven的ssm框架的整合
- idea环境基于maven整合ssm
- 基于maven进行ssm框架整合
- maven关于ssm的整合
- 基于SSM整合的分页
- Ecliple+SSM+Maven 完美整合+图片详解
- SSM整合的配置文件详解
- 最基础的-----基于maven进行的SSM框架的整合的全部配置文件.
- 基于MAVEN的SSM(SPRING,SPRINGMVC,MYBATIS)整合的WEB工程
- 基于maven搭建ssm开发框架(1) mybatis和spring的整合
- 基于maven搭建ssm开发框架(1) SpringMVC和spring的整合
- 160. Intersection of Two Linked Lists
- 牛客网-明明的随机数
- 8、理解进程调度时机跟踪分析进程调度与进程切换的过程
- 关于《OPENCL异构并行计算》中工作组间同步的分析
- 正则表达式的使用
- 基于Maven的SSM整合详解
- MySQL (6) innoDB 和 MyISAM
- Linux基本命令:文件操作
- maven管理的项目配置找不到jar包中的类
- Java反射机制的一些总结
- 排序算法
- matplotlib学习
- 字符串 POJ-1007
- Android中的ContentProvider中的重要点