SSM整合的简单实现
整合需要的jar包和源码将在文末给出
本文参考黑马程序员视频,由于视频用的环境和我使用的环境不同,建议使用我的环境及jar包(比较新)
一 整合思路
第一步 整合dao层
mybatis和spring整合,通过spring管理mapper接口:使用mapper扫描器自动扫描mapper接口在spring中进行注册
第二部 整合service层
通过spring管理service接口
使用配置方式将service接口配置在spring配置文件中。
实现事务控制
第三步:整合spring'mvc
由于springmvc是spring的模块,不需要整合。
二 准备环境:
java环境:
mysql 5.5
本文的例子只使用到了items表,故给出items字段,可根据一下查询结果建表和插入数据
所有jar包将在文末给出
工程结构:
三 程序编写
1 整合dao(持久层) mybatis和spring进行整合
mybatis全局配置文件 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> <!-- 配置mapper 由于使用spring和mybatis整合后使用mapper扫描这里不需要配置。 必须遵循:mapper.xml和maapper.java文件同名且在同一个目录 --> </configuration>
spring配置文件 applicationContext-dao.xml
配置:数据源,SqlSessionFactory mapper扫描器
<?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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> <!-- 加载db.properties文件 --> <context:property-placeholder location="classpath:db.properties"/> <!-- dbcp数据库连接池 --> <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${jdbc.driver}"/> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.username}"/> <property name="password" value="${jdbc.password}"/> <property name="maxActive" value="30"/> <property name="maxIdle" value="5"/> </bean> <!-- 让spring管理sqlsessionfactory 使用mybatis和spring整合包中的 --> <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <!-- 数据库连接池 --> <property name="dataSource" ref="dataSource" /> <!-- 加载mybatis的全局配置文件 --> <property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml" /> </bean> <!-- mapper扫描器 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="pers.czs.ssm.mapper"></property> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> </bean> </beans>
定义po类Items.clss,ItemsCustom.class,ItemsQueryVo.class,其中ItemsCustom.class和ItemsQueryVo.class是Items.clss的扩展类,用于后面编写mapper.xml文件中的输入和输出映射
package pers.czs.ssm.po; import java.util.Date; public class Items { private int id; private String name; private float price; private String detail; private String pic; private Date createtime; 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; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } public String getDetail() { return detail; } public void setDetail(String detail) { this.detail = detail; } public String getPic() { return pic; } public void setPic(String pic) { this.pic = pic; } public Date getCreatetime() { return createtime; } public void setCreatetime(Date createtime) { this.createtime = createtime; } }
package pers.czs.ssm.po; public class ItemsCustom extends Items{ }
package pers.czs.ssm.po; public class ItemsQueryVo { private Items items; private ItemsCustom itemsCustom; public Items getItems() { return items; } public void setItems(Items items) { this.items = items; } public ItemsCustom getItemsCustom() { return itemsCustom; } public void setItemsCustom(ItemsCustom itemsCustom) { this.itemsCustom = itemsCustom; } }
定义ItemsMapper.xml和ItemsMapper.java
<?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="pers.czs.ssm.mapper.ItemsMapper"> <!-- sql片段 --> <!-- 商品查询条件 --> <sql id="query_items_where"> <if test="itemsCustom!=null"> <if test="itemsCustom.name!=null and itemsCustom.name!=''"> and items.name like '%${itemsCustom.name}%' </if> </if> </sql> <!-- 查询商品信息 --> <select id="findItemsList" parameterType="pers.czs.ssm.po.ItemsQueryVo" resultType="pers.czs.ssm.po.ItemsCustom"> select * from items <where> <include refid="query_items_where"/> </where> </select> </mapper>
package pers.czs.ssm.mapper; import java.util.List; import pers.czs.ssm.po.ItemsCustom; import pers.czs.ssm.po.ItemsQueryVo; public interface ItemsMapper { public List<ItemsCustom> findItemsList (ItemsQueryVo itemsQueryVo)throws Exception; }
2 整合service(逻辑层) 让spring管理service接口
定义service接口ItemService 和接口实现类ItemServiceImpl
package pers.czs.ssm.service; import java.util.List; import pers.czs.ssm.po.ItemsCustom; import pers.czs.ssm.po.ItemsQueryVo; public interface ItemsService { public List<ItemsCustom> findItemsList (ItemsQueryVo itemsQueryVo)throws Exception; }
package pers.czs.ssm.service.impl; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import pers.czs.ssm.mapper.ItemsMapper; import pers.czs.ssm.po.ItemsCustom; import pers.czs.ssm.po.ItemsQueryVo; import pers.czs.ssm.service.ItemsService; public class ItemsServiceImpl implements ItemsService{ @Autowired private ItemsMapper itemsMapper; @Override public List<ItemsCustom> findItemsList(ItemsQueryVo itemsQueryVo) throws Exception { // 通过ItemsMapper查询数据库 return itemsMapper.findItemsList(itemsQueryVo); } }
在spring容器配置service(applicationContext-service.xml)
创建applicationContext-service.xml,文件中配置service。
<?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:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> <!-- 商品管理service --> <bean id="itemsService" class="pers.czs.ssm.service.impl.ItemsServiceImpl"></bean> </beans>
事务控制 (applicationContext-transaction.xml)
在applicationContext-transaction.xml中使用spring声明式事务控制方法。
<?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:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> <!-- 事务管理器 --> <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="save*" propagation="REQUIRED"/> <tx:method name="insert*" propagation="REQUIRED"/> <tx:method name="delete*" propagation="REQUIRED"/> <tx:method name="update*" propagation="REQUIRED"/> <tx:method name="find*" propagation="SUPPORTS" read-only="true"/> <tx:method name="get*" propagation="SUPPORTS" read-only="true"/> </tx:attributes> </tx:advice> <!-- 切面 --> <aop:config> <aop:advisor advice-ref="txAdvice" pointcut="execution(* pers.czs.ssm.service.impl.*.*(..))"/> </aop:config> </beans>
3 整合springmvc
创建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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd"> <!-- 扫描controller注解,多个包中间使用半角逗号分隔 --> <context:component-scan base-package="pers.czs.ssm.controller"/> <!--注解映射器 --> <!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> --> <!--注解适配器 --> <!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> --> <!-- 使用 mvc:annotation-driven代替上边注解映射器和注解适配器配置 mvc:annotation-driven默认加载很多的参数绑定方法, 比如json转换解析器就默认加载了,如果使用mvc:annotation-driven不用配置上边的RequestMappingHandlerMapping和RequestMappingHandlerAdapter 实际开发时使用mvc:annotation-driven --> <mvc:annotation-driven></mvc:annotation-driven> <!-- ViewResolver --> <bean class="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> </beans>
配置前端控制器以及加载spring容器(都是在web.xml内配置的,这里我直接给出web.xml文件代码)
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>springmvc_mybatis</display-name> <!-- 加载spring容器 --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/classes/spring/applicationContext-*.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <!-- springmvc的前端控制器 --> <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- contextConfigLocation不是必须的, 如果不配置contextConfigLocation, springmvc的配置文件默认在:WEB-INF/servlet的name+"-servlet.xml" --> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring/springmvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> </web-app>
编写ItemsController(就是Handler)
package pers.czs.ssm.controller; 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 pers.czs.ssm.po.ItemsCustom; import pers.czs.ssm.service.ItemsService; @Controller public class ItemsController { @Autowired private ItemsService itemsService; @RequestMapping("/queryItems") public ModelAndView queryItems() throws Exception { // 调用service查找 数据库,查询商品列表 List<ItemsCustom> itemsList = itemsService.findItemsList(null); //返回ModelAndView ModelAndView modelAndView = new ModelAndView(); //相当 于request的setAttribut,在jsp页面中通过itemsList取数据 modelAndView.addObject("itemsList",itemsList); //指定视图,没有配置前缀后缀 //modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp"); //指定视图,在视图解析器中配置了前缀后缀后可以省略一些东西 modelAndView.setViewName("items/itemsList"); return modelAndView; } }
编写itemsList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>查询商品列表</title> </head> <body> <form action="${pageContext.request.contextPath }/item/queryItem.action" method="post"> 查询条件: <table width="100%" border=1> <tr> <td><input type="submit" value="查询"/></td> </tr> </table> 商品列表: <table width="100%" border=1> <tr> <td>商品名称</td> <td>商品价格</td> <td>生产日期</td> <td>商品描述</td> <td>操作</td> </tr> <c:forEach items="${itemsList }" var="item"> <tr> <td>${item.name }</td> <td>${item.price }</td> <td><fmt:formatDate value="${item.createtime}" pattern="yyyy-MM-dd HH:mm:ss"/></td> <td>${item.detail }</td> <td><a href="${pageContext.request.contextPath }/item/editItem.action?id=${item.id}">修改</a></td> </tr> </c:forEach> </table> </form> </body> </html>
浏览器输入http://localhost:8080/springmvc_mybatis/queryItems.action访问
查询成功
四 jar包及源码
链接:https://pan.baidu.com/s/16yTiEsCj8ejmh0gm8KHn8A
提取码:hegb
最新文章
- ABP理论学习之工作单元(Unit of Work)
- 修改vim的主题风格
- UIPickerView理解
- JSPatch打补丁
- c# 如何隐藏TabControl控件的标签
- reverse-daily(1)-audio_visual_receiver_code
- Spring中bean的配置
- 在centos 64bit 系统中安装使用WPS office的方法
- Vim 程序编辑器 经常使用操作
- MD5的Hash长度扩展攻击
- cocos2d-x 那些常犯的错误
- Chapter 1 First Sight——10
- 【转】php缓冲 output_buffering和ob_start
- Android开发相关操作
- Caused by: java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration
- Kubenetes---Service
- VS Code 安装sass插件
- OSGI的WEB开发环境搭建
- JVM加载class文件的原理机制(转)
- idhttp与cookie