Spring+Mybatis+Spring MVC整合

1.Spring+MyBatis整合,和昨天的略有区别

1.1新建一个名为ssm的web工程

1.2导入相关jar文件

jar文件的百度云分享链接:http://pan.baidu.com/s/1bp3bZKN 密码:gtew

1.3新建数据库脚本

-- 删除数据库
drop database if exists mybatis;
-- 创建数据库
create database if not exists mybatis default character set utf8;
-- 使用数据库
use mybatis;
-- 删除数据表
drop table if exists emps;
-- 创建数据表
create table emps(
    eid int primary key,
    ename varchar(20),
    esal double(8,2),
    esex varchar(4)
);

1.4建立emps对应的实体类cn.vo.Emp类

package cn.vo;

import java.io.Serializable;

@SuppressWarnings("serial")
public class Emp implements Serializable {
    private Integer id;
    private String name;
    private Double sal;
    private String sex;
    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 getSal() {
        return sal;
    }
    public void setSal(Double sal) {
        this.sal = sal;
    }
    public String getSex() {
        return sex;
    }
    public void setSex(String sex) {
        this.sex = sex;
    }
    
}

1.5在cn.vo包下建立EmpMapper.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="cn.vo.Emp">
    <resultMap type="cn.vo.Emp" id="empMap">
        <id column="eid" property="id"/>
        <result column="ename" property="name"/>
        <result column="esex" property="sex"/>
        <result column="esal" property="sal"/>
    </resultMap>
    
    <insert id="add" parameterType="cn.vo.Emp">
        insert into emps(eid,ename,esex,esal) values(#{id},#{name},#{sex},#{sal})
    </insert>
</mapper>

1.6在src下新建mybatis.cfg.xml文件,但是因为我们现在是与Spring整合,所以在mybatis.cfg.xml文件中不需要配置数据库连接信息,而是让Spring通过c3p0来管理数据库连接。只需要将EmpMapper.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_developer">
        <environment id="mysql_developer">
            <transactionManager type="jdbc"/>
            <dataSource type="pooled">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://127.0.0.1:3306/mybatis"/>
                <property name="username" value="root"/>
                <property name="password" value="mysqladmin"/>
            </dataSource>
        </environment>
        <environment id="oracle_developer">
            <transactionManager type="jdbc"/>
            <dataSource type="pooled">
                <property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
                <property name="url" value="jdbc:oracle:thin:@127.0.0.1:1521:orcl"/>
                <property name="username" value="scott"/>
                <property name="password" value="tiger"/>
            </dataSource>
        </environment>
    </environments>  -->
    
    <!-- 加载映射文件 -->
    <mappers>
        <mapper resource="cn/vo/EmpMapper.xml"/>
    </mappers>
</configuration>

1.7在src目录下新建applicationContext.xml文件

1.7.1配置c3p0,用来管理数据库连接

<!-- 配置c3p0连接池,用来管理数据库连接 -->
      <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
          <property name="driverClass" value="com.mysql.jdbc.Driver"/>
          <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/mybatis"/>
          <property name="user" value="root"/>
          <property name="password" value="mysqladmin"></property>
      </bean>

1.7.2配置SqlSessionFactory来加载数据源和映射文件

 <!-- 
          Hibernate与Spring整合的时候,
          通过LocalSessionFactoryBean来管理Hibernate的相关配置文件
          
          那么MyBatis与Spring整合的时候,
          通过什么来管理Mybatis的相关配置文件呢?
      、     org.mybatis.spring.SqlSessionFactoryBean,
          用来替代原来的MyBatisUtil.java工具类的作用
      -->
      <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
              <property name="configLocation" value="classpath:mybatis.cfg.xml"/>
              <property name="dataSource" ref="dataSource"></property>
      </bean>

1.7.3配置MyBatis的事务管理器

<!--  配置MyBatis的事务管理器,
              即因为MyBatis底层用的是JDBC事务管理器
              所以这里依然配置JDBC事务管理器
       -->
      <bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
          <property name="dataSource" ref="dataSource"/>
      </bean>

1.7.4配置事务通知

<!-- 事务通知,即让那些方法需要事务支持 -->
      <tx:advice id="advice" transaction-manager="dataSourceTransactionManager">
              <tx:attributes>
                  <tx:method name="*" propagation="REQUIRED"/>
              </tx:attributes>
      </tx:advice>

1.7.5配置事务切入

<!-- 
          配置事务切入,即让那些包下的类中的方法需要事务支持 
          一般切入到业务层,这里为了方便就切入到持久层
      -->
      <aop:config>
          <aop:pointcut expression="execution(* cn.dao.*.*(..))" id="pointcut"/>
          <aop:advisor advice-ref="advice" pointcut-ref="pointcut"/>
      </aop:config>

1.7.6配置SqlSessionTemplate

<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
              <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
      </bean>

1.7.7注册EmpDAO

 <!-- 注册EmpDAO -->
      <bean id="empDAO" class="cn.dao.EmpDAO">
          <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
      </bean>

此时的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:context="http://www.springframework.org/schema/context"
      xmlns:aop="http://www.springframework.org/schema/aop"
      xmlns:tx="http://www.springframework.org/schema/tx"
      xmlns:mvc="http://www.springframework.org/schema/mvc"
      xsi:schemaLocation="
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.0.xsd
      http://www.springframework.org/schema/aop 
      http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
      http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
      
      <!-- 配置c3p0连接池,用来管理数据库连接 -->
      <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
          <property name="driverClass" value="com.mysql.jdbc.Driver"/>
          <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/mybatis"/>
          <property name="user" value="root"/>
          <property name="password" value="mysqladmin"></property>
      </bean>
      <!-- 
          Hibernate与Spring整合的时候,
          通过LocalSessionFactoryBean来管理Hibernate的相关配置文件
          
          那么MyBatis与Spring整合的时候,
          通过什么来管理Mybatis的相关配置文件呢?
      、     org.mybatis.spring.SqlSessionFactoryBean,
          用来替代原来的MyBatisUtil.java工具类的作用
      -->
      <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
              <property name="configLocation" value="classpath:mybatis.cfg.xml"/>
              <property name="dataSource" ref="dataSource"></property>
      </bean>
      
      <!--  配置MyBatis的事务管理器,
              即因为MyBatis底层用的是JDBC事务管理器
              所以这里依然配置JDBC事务管理器
       -->
      <bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
          <property name="dataSource" ref="dataSource"/>
      </bean>
      <!-- 事务通知,即让那些方法需要事务支持 -->
      <tx:advice id="advice" transaction-manager="dataSourceTransactionManager">
              <tx:attributes>
                  <tx:method name="*" propagation="REQUIRED"/>
              </tx:attributes>
      </tx:advice>
      <!-- 
          配置事务切入,即让那些包下的类中的方法需要事务支持 
          一般切入到业务层,这里为了方便就切入到持久层
      -->
      <aop:config>
          <aop:pointcut expression="execution(* cn.dao.*.*(..))" id="pointcut"/>
          <aop:advisor advice-ref="advice" pointcut-ref="pointcut"/>
      </aop:config>
      
      
      <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
              <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
      </bean>
      <!-- 注册EmpDAO -->
      <bean id="empDAO" class="cn.dao.EmpDAO">
          <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
      </bean>
      
</beans>

1.8在cn.dao包下创建EmpDAO.java类

package cn.dao;

import org.mybatis.spring.SqlSessionTemplate;

import cn.vo.Emp;

public class EmpDAO {
    private SqlSessionTemplate sqlSessionTemplate;
    public void setSqlSessionTemplate(SqlSessionTemplate sqlSessionTemplate) {
        this.sqlSessionTemplate = sqlSessionTemplate;
    }
//    private SqlSessionFactory sqlSessionFactory;
//    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
//        this.sqlSessionFactory = sqlSessionFactory;
//    }
    public void add(Emp vo) throws Exception{
//        SqlSession sqlSession = sqlSessionFactory.openSession();
        sqlSessionTemplate.insert(Emp.class.getName()+".add", vo);
    }
}

1.9测试代码

@Test
    public void testSpringMybatis() throws Exception{
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        EmpDAO dao = context.getBean("empDAO", EmpDAO.class);
        Emp vo = new Emp();
        vo.setId(4);
        vo.setName("嘻嘻");
        vo.setSal(6000.0);
        vo.setSex("男");
        dao.add(vo);
    }

2.SpringMVC+mybatis+Spring整合

在前面的基础之上,加入SpringMVC进行整合。

不需要导入jar包了,因为前面已经导入了

在web.xml文件下配置核心控制器DispatcherServlet和编码过滤器CharacterEncodingFilter。

<!-- 配置SpringMVC核心控制器 -->
  <servlet>
      <servlet-name>DispatcherServlet</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
          <param-name>contextConfigLocation</param-name>
          <param-value>classpath:applicationContext.xml</param-value>
      </init-param>
  </servlet>
  <servlet-mapping>
      <servlet-name>DispatcherServlet</servlet-name>
      <url-pattern>*.action</url-pattern>
  </servlet-mapping>
  
  <!-- 配置编码过滤器 -->
  <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>/*</url-pattern>
  </filter-mapping>

在src目录下新建cn.action.EmpAction.java类

package cn.action;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import cn.dao.EmpDAO;
import cn.vo.Emp;
/**
 * 控制器
 * @author Administrator
 *
 */
@Controller
@RequestMapping("/emp")
public class EmpAction {
    @Resource
    private EmpDAO empDAO;
    public void setDao(EmpDAO empDAO) {
        this.empDAO = empDAO;
    }
    /**
     * 注册员工
     */
    @RequestMapping("/register")
    public String register(Emp emp) throws Exception{
        //本次不写业务层,直接调用数据访问层,即持久层
        this.empDAO.add(emp);
        return "/jsp/success.jsp";
    }
    
}

在webRoot目录下新建jsp文件下,并在jsp文件夹下新建success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>成功页面</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    
    成功啦
    
    
  </body>
</html>

在webRoot下新建一个名为register.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>员工注册</title>
    
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

  </head>
  
  <body>
    <form action="emp/register.action" method="post">
        <table border="2" align="center">
            <tr>
                <td>编号</td>
                <td><input type="text" name="id" value="6"/></td>
            </tr>
            <tr>
                <td>姓名</td>
                <td><input type="text" name="name" value="笨笨"/></td>
            </tr>
            <tr>
                <td>性别</td>
                <td>
                    <input type="radio" name="sex" value="女"/>女
                    <input type="radio" name="sex" value="男" checked="checked"/>男
                </td>
            </tr>
            <tr>
                <td>工资</td>
                <td><input type="text" name="sal" value="6000.1"/></td>
            </tr>
            <tr>
                <td colspan="2">
                    <input type="submit" value="注册"/>
                </td>
            </tr>
        </table>
    </form>   
   
  </body>
</html>

在applicationContext.xml文件中配置组件扫描

 <!-- 注册EmpAction -->
      <context:component-scan base-package="cn"/>

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:context="http://www.springframework.org/schema/context"
      xmlns:aop="http://www.springframework.org/schema/aop"
      xmlns:tx="http://www.springframework.org/schema/tx"
      xmlns:mvc="http://www.springframework.org/schema/mvc"
      xsi:schemaLocation="
      http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
      http://www.springframework.org/schema/context
      http://www.springframework.org/schema/context/spring-context-3.0.xsd
      http://www.springframework.org/schema/aop 
      http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
      http://www.springframework.org/schema/tx
      http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
      http://www.springframework.org/schema/mvc
      http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
      
      <!-- 配置c3p0连接池,用来管理数据库连接 -->
      <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
          <property name="driverClass" value="com.mysql.jdbc.Driver"/>
          <property name="jdbcUrl" value="jdbc:mysql://127.0.0.1:3306/mybatis"/>
          <property name="user" value="root"/>
          <property name="password" value="mysqladmin"></property>
      </bean>
      <!-- 
          Hibernate与Spring整合的时候,
          通过LocalSessionFactoryBean来管理Hibernate的相关配置文件
          
          那么MyBatis与Spring整合的时候,
          通过什么来管理Mybatis的相关配置文件呢?
      、     org.mybatis.spring.SqlSessionFactoryBean,
          用来替代原来的MyBatisUtil.java工具类的作用
      -->
      <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
              <property name="configLocation" value="classpath:mybatis.cfg.xml"/>
              <property name="dataSource" ref="dataSource"></property>
      </bean>
      
      <!--  配置MyBatis的事务管理器,
              即因为MyBatis底层用的是JDBC事务管理器
              所以这里依然配置JDBC事务管理器
       -->
      <bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
          <property name="dataSource" ref="dataSource"/>
      </bean>
      <!-- 事务通知,即让那些方法需要事务支持 -->
      <tx:advice id="advice" transaction-manager="dataSourceTransactionManager">
              <tx:attributes>
                  <tx:method name="*" propagation="REQUIRED"/>
              </tx:attributes>
      </tx:advice>
      <!-- 
          配置事务切入,即让那些包下的类中的方法需要事务支持 
          一般切入到业务层,这里为了方便就切入到持久层
      -->
      <aop:config>
          <aop:pointcut expression="execution(* cn.dao.*.*(..))" id="pointcut"/>
          <aop:advisor advice-ref="advice" pointcut-ref="pointcut"/>
      </aop:config>
      
      
      <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
              <constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"/>
      </bean>
      <!-- 注册EmpDAO -->
      <bean id="empDAO" class="cn.dao.EmpDAO">
          <property name="sqlSessionTemplate" ref="sqlSessionTemplate"/>
      </bean>
      
      <!-- 注册EmpAction -->
      <context:component-scan base-package="cn"/>
      
</beans>
时间: 2024-11-13 11:23:01

Spring+Mybatis+Spring MVC整合的相关文章

mybatis学习笔记(六) -- maven+spring+mybatis从零开始搭建整合详细过程(下)

继续 mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(上) 五.使用监听器启动Spring容器 1.修改pom.xml文件,添加Spring-web 2.修改web.xml,配置启动Spring容器 3.新建BookServer 4.新建BookServlet 5.修改ApplicationContext.xml 6.测试 继续!!! 五.使用监听器启动Spring容器 1.修改pom.xml,添加Spring-web包(注:上一篇中的pom

SSM(spring mvc+spring+Mybatis)框架整合

最近用Idea开发,idea是一款综合的相对较新的Java IDE.Idea支持很多整合功能,我觉得挺好用的.Idea可以校正xml,支持jsp的调试.最让我喜欢的是,写spring配置文件的时候,写的一些路径都可以自己找到.classpath自己有代码的提示,超级的智能. 环境配置 在整合框架之前,先配置一下JER运行环境,配置maven仓库. 1.File--ProjectStructure--Project--New- 选择jdk的安装环境 2.File--Settings--Maven-

Spring+mybatis+struts框架整合的配置具体解释

学了非常久的spring+mybatis+struts.一直都是单个的用他们,或者是两两组合用过,今天总算整合到一起了,配置起来有点麻烦.可是配置完一次之后.就轻松多了,那么框架整合配置具体解释例如以下. 1.导入对应的jar包 由于我们建造的是maven的web项目,全部我们在pom.xml中须要导入这些包. pom.xml 具体凝视 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&q

mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(附demo和搭建过程遇到的问题解决方法)

文章介绍结构一览 一.使用maven创建web项目 1.新建maven项目 2.修改jre版本 3.修改Project Facts,生成WebContent文件夾 4.将WebContent下的两个文件复制到src/main/webapp下,删掉WebContent 5.修改Deployment Assembly 6.测试 二.mybatis访问mysql 1.数据库准备 2.修改pom.xml 3.创建实体类 4.创建访问接口 5.添加映射文件 6.添加MyBatisCfg.xml配置文件,注

Spring+Mybatis+Maven+web整合

<?xml version="1.0" encoding="UTF-8"?> <beans default-autowire="byName" xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation

Mybatis + String mvc 整合

一.整理所需要的架包 此次整合 只有Mybatis 和Spring mvc的架包  其他内容暂不讨论 二.使用 mybatis 自动生成工具  生成  interface(dao层文件) mapper(SQL文件)  model(实体类) service(逻辑) 文件 编写service 的实现类 三.编写 Spring 配置文件 Spring配置 1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans

spring + mybatis + 多数据源整合事务

1.核心思想,spring提供了一个DataSource的子类,该类支持多个数据源 org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource 该类的源码如下: org.springframework.jdbc.datasource.lookup; java.sql.Connection; java.sql.SQLException; java.util.HashMap; java.util.Iterator; jav

springmvc学习总结(二) -- maven+springmvc+spring+mybatis+mysql详细搭建整合过程讲解

@[email protected] 写在最前 之前分享过下面这几篇: mybatis学习笔记(五) -- maven+spring+mybatis从零开始搭建整合详细过程(上)(附demo和搭建过程遇到的问题解决方法) mybatis学习笔记(六) -- maven+spring+mybatis从零开始搭建整合详细过程(下) springmvc学习笔记(一) -- 从零搭建,基础入门 这一篇,在这些练习的基础上,将它们整合在一起! 搭建步骤如下 一.新建maven项目,配置环境,测试是否配置成

Spring+Mybatis+SpringMVC整合

这是来到博客园的第一篇文章,做java开发也好几年了,想从现在开始,在这里将自己会的.学到的做个系统的整理,便于自己掌握的更深.也便于以后复习.还便于给刚入门的攻城师们一点点参考(嘿嘿)--好了,废话不多说,第一篇文章就从最基本的javaWeb开发的三大框架整合开始. 至于为什么是从Spring+Mybatis+SpringMVC开始,而不是Spring+Struts+Hibernate,那是因为现在各个公司使用Spring+Mybatis+SpringMVC的越来越多,而Struts则是使用率