首页 > 学院 > 开发设计 > 正文

【SSM】Spring+SpringMVC+Mybatis整合

2019-11-06 06:43:13
字体:
来源:转载
供稿:网友

环境准备:

eclipse示例数据库三大框架所需jar包以及整合jar包Tomcat7.0

第一步:准备数据库(类别–商品示例),分析示例需求,这里就做一个简单的商品查询。以及商品插入: 字段示例如下(类别表): 类别表 商品表: 这里写图片描述

第二步:建立web项目,导入项目所需jar包。建立项目实体,包结构如下: 这里写图片描述

第三步:web.xml配置SPRing上下文监听器容器以及SpringMVC转发器: web.xml代码如下:

<?xml version="1.0" encoding="UTF-8"?><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" version="3.0"> <!-- 配置springmvc的转发器 --> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <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>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <!-- 配置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-app>

第四步:新建applicationContext.xml和spring-mvc.xml文件,对程序进行分包处理,建立mybatis-config.xml文件及配置,建立mapper包,配置项目需求的映射文件product-mapper.xml: product-mapper.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="product.ProductDao"> <!-- 查询所有商品操作 --> <select id="queryProducts" resultType="entity.Products"> select * from products </select> <!-- 插入一条商品操作 --> <insert id="insertProduct" parameterType="entity.Products"> insert into products(pname) values(#{pname}) </insert></mapper>

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> <!-- 这里只需要配置映射文件,数据源交给spring来配置 --> <mappers> <mapper resource="mapper/product-mapper.xml" /> </mappers></configuration>

第五步:建立此次业务包product并建立与mapper下的映射文件对应的dao接口,并对应mapper内的方法映射。 项目结构至此如下: 这里写图片描述

dao接口代码如下:

package product;import java.util.List;import entity.Products;public interface ProductDao { // 方法名要与xml对应的映射id相同 List<Products> queryProducts(); int insertProduct(Products pro);}

第六步:配置applicationContext.xml和spring-mvc.xml文件: 代码如下: spring-mvc.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:p="http://www.springframework.org/schema/p" xmlns:mvc="http://www.springframework.org/schema/mvc" 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/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"> <mvc:annotation-driven /> <!-- 包扫描,不扫描service注解的类,防止因为springMVC和spring的扫描产生事务提交回滚问题 --> <context:component-scan base-package="product"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service" /> </context:component-scan> <!-- 静态资源的过滤,防止被springMVC拦截,这里是不拦截js下的所有文件 --> <mvc:resources location="/js/" mapping="/js/**"></mvc:resources> <!-- 文件上传所需的多媒体处理器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean></beans>

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:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.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" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"> <!-- 包扫描,不扫描controller注解的类,防止因为springMVC和spring的扫描产生事务提交回滚问题 --> <context:component-scan base-package="product"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <!-- 数据源的配置,用来获取连接 --> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.MySQL.jdbc.Driver"></property> <property name="url" value="jdbc:mysql://localhost:3306/mall"></property> <property name="username" value="root"></property> <property name="passWord" value="123456"></property> </bean> <!-- sqlsession工厂类,用来创建用户会话 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 设置使用的数据源 --> <property name="dataSource" ref="dataSource"></property> <!-- 设置mybatis的配置文件地址 --> <property name="configLocation" value="classpath:mybatis-config.xml"></property> </bean> <!-- 配置用来扫描mybatis映射的接口的扫描器 --> <bean id="mapperScanner" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <!-- 设置扫描的包名,不同包用逗号隔开 --> <property name="basePackage" value="product"></property> <property name="sqlSessionFactory" ref="sqlSessionFactory"></property> </bean> <!-- 事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean> <!-- 事务注解驱动 --> <tx:annotation-driven transaction-manager="transactionManager" /></beans>

第七步:编写service业务代码(没有写页面代码,数据操作也都在程序内执行):

package product;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import entity.Products;/** * @author Administrator * 为Service添加Service注解及Transactional事务注解 */@Service@Transactionalpublic class ProductService { // 通过Autowired为Service注入dao,由注解驱动产生实现类的对象 @Autowired private ProductDao dao; // 查询 public List<Products> queryProduct() { return dao.queryProducts(); } // 添加 public void insertProduct() { Products pro1 = new Products("p1"); Products pro2 = new Products("p2"); dao.insertProduct(pro1); dao.insertProduct(pro2); }}

第八步:编写Controller层代码:

package product;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.bind.annotation.ResponseBody;import entity.Products;import net.sf.json.JSONArray;/** * @author StruggleYang * Controller注解以及RequestMapping的url映射注解 */@Controller@RequestMapping("product")public class ProductController { // 注解注入service @Autowired private ProductService service; // ResponseBody无返回值 @ResponseBody @RequestMapping(value = "queryProduct", produces = "application/json;charset=utf-8") public String queryProduct() { List<Products> list = service.queryProduct(); return JSONArray.fromObject(list).toString(); } @RequestMapping("insert") @ResponseBody public void insertProduct(){ service.insertProduct(); }}

第九步:测试 访问: http://localhost:8080/ssmTest/product/queryProduct 结果如下:

这里写图片描述

访问:http://localhost:8080/ssmTest/product/insert执行后再次查询结果:

这里写图片描述

注意:

测试中的业务无返回,在实际业务中将ResponseBody注解去掉,并返回具体的视图名称即可。本例中没有复杂的业务结构,没有对多对一,一对多,一对一关系进行阐述,只做了最基础的整合,实际中应对更加复杂的业务还需进行相应的变换。在配置applicationContext.xml和spring-mvc.xml中,有context:component-scan标签的处理context:exclude-filter指定的不扫描,context:include-filter指定的扫描。具体参考: http://blog.csdn.net/chunqiuwei/article/details/16115135

–【毕】


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表