整合需要的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.xmlItemsMapper.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

最新文章

  1. ABP理论学习之工作单元(Unit of Work)
  2. 修改vim的主题风格
  3. UIPickerView理解
  4. JSPatch打补丁
  5. c# 如何隐藏TabControl控件的标签
  6. reverse-daily(1)-audio_visual_receiver_code
  7. Spring中bean的配置
  8. 在centos 64bit 系统中安装使用WPS office的方法
  9. Vim 程序编辑器 经常使用操作
  10. MD5的Hash长度扩展攻击
  11. cocos2d-x 那些常犯的错误
  12. Chapter 1 First Sight——10
  13. 【转】php缓冲 output_buffering和ob_start
  14. Android开发相关操作
  15. Caused by: java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration
  16. Kubenetes---Service
  17. VS Code 安装sass插件
  18. OSGI的WEB开发环境搭建
  19. JVM加载class文件的原理机制(转)
  20. idhttp与cookie

热门文章

  1. 【原创】SpringMVC同一RequestMapping返回不同的类型
  2. JavaScript 调用 Windows 的打印 代码
  3. Oracle权限关于with admin option和with grant option的用法
  4. 【实战】Oracle注入总结
  5. Android应用捕获全局异常自定义处理
  6. select 点击的时候获取 value值
  7. (转)通过shell脚本实现批量添加用户和设置随机密码以及生产环境如何批量添加
  8. JAVA 中 if和while的区别
  9. Java中的时间处理
  10. .NET平台常用框架整理