Spring+MyBatis整合

1.创建一个web工程。工程名为ssm

2.导入Spring,MyBatis,Oracle和MySQL以及MyBatis提供的与Spring整合的插件包

mysql的jar文件:mysql-connector-java-5.1.7-bin.jar

oracle的jar文件:ojdbc5.jar

c3p0的jar文件:c3p0-0.9.1.2.jar

mybatis的jar文件:

asm-3.3.1.jar

cglib-2.2.2.jar

commons-logging-1.1.1.jar

log4j-1.2.16.jar

mybatis-3.1.1.jar

mybatis提供的与Spring整合的jar文件:mybatis-spring-1.1.1.jar

Spring core的jar文件:

org.springframework.asm-3.0.5.RELEASE.jar

org.springframework.beans-3.0.5.RELEASE.jar

org.springframework.context-3.0.5.RELEASE.jar

org.springframework.core-3.0.5.RELEASE.jar

org.springframework.expression-3.0.5.RELEASE.jar

Spring AOP的jar文件:

aopalliance.jar

aspectjweaver.jar

cglib-2.2.2.jar

org.springframework.aop-3.0.5.RELEASE.jar

Spring traction的jar文件:

org.springframework.jdbc-3.0.5.RELEASE.jar

org.springframework.orm-3.0.5.RELEASE.jar

org.springframework.transaction-3.0.5.RELEASE.jar

百度云链接:http://pan.baidu.com/s/1bp3bZKN 密码:gtew

3.创建一个emps的员工表

-- 删除数据库
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)
);

4.创建Emp.java实体类

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;
    }
    
}

创建MyBatisUtil.java工具类

package util;
 
import java.io.IOException;
import java.io.Reader;
import java.sql.Connection;
 
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
 
public class MyBatisUtil {
     private static ThreadLocal<SqlSession> threadLocal = new ThreadLocal<SqlSession>();
        public static SqlSessionFactory sqlSessionFactory ;
        //私有化构造方法
        private MyBatisUtil(){}
        //加载位于src/Mybatis.cfg.xml
        static{
            try {
                Reader reader = Resources.getResourceAsReader("mybatis.cfg.xml");
                sqlSessionFactory=new SqlSessionFactoryBuilder().build(reader);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } 
        /**
         * 获取SQLSession
         * @return
         */
        public static SqlSession getSqlSession(){
            //从当前线程中获取SqlSession对象
            SqlSession sqlSession = threadLocal.get();
            if(sqlSession == null){
                if(sqlSessionFactory != null){
                    sqlSession = sqlSessionFactory.openSession();
                    //讲sqlSession与当前线程绑定在一起
                    threadLocal.set(sqlSession);
                }
            }
            return sqlSession;
        }
        /**
         * 关闭SqlSession 并与当前线程分开
         */
        public static void closeSqlSession(){
            //从当前线程中获取SqlSession对象
            SqlSession sqlSession = threadLocal.get();
            //如果SqlSession对象非空
            if(sqlSession != null){
                //关闭SqlSession对象
                sqlSession.close();
                //分离当前线程与SqlSession的关系
                threadLocal.remove();
            }
        }
        //测试
        public static void main(String[] args) {
            SqlSession sqlSession = MyBatisUtil.getSqlSession();
            Connection conn= sqlSession.getConnection();
            System.out.println(conn != null ?"连接成功":"连接失败");
        }  
}

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>

6.在src目录下创建mybatis.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">
        <!-- 连接MySQL环境信息 -->
        <environment id="mysql_developer">
            <!-- MyBatis使用jdbc事务管理器 -->
            <transactionManager type="jdbc"/>
            <!-- MyBatis使用连接池方式来获取连接对象 -->
            <dataSource type="pooled">
                <!-- 配置与数据库交互的4个必要属性 -->
                <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>
        <!-- 连接Oracle环境信息 -->
        <environment id="oracle_developer">
            <!-- MyBatis使用jdbc事务管理器 -->
            <transactionManager type="jdbc"/>
            <!-- MyBatis使用连接池方式来获取连接对象 -->
            <dataSource type="pooled">
                <!-- 配置与数据库交互的4个必要属性 -->
                <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>

7.在cn.dao包创建EmpDAO.java类

package cn.dao;

import org.apache.ibatis.session.SqlSession;

import util.MyBatisUtil;
import cn.vo.Emp;

public class EmpDAO {
    
    public void add(Emp vo) throws Exception{
        SqlSession sqlSession = null;
        try {
            sqlSession = MyBatisUtil.getSqlSession();
            
            sqlSession.insert(Emp.class.getName()+".add", vo);
            sqlSession.commit();
        } catch (Exception e) {
            e.printStackTrace();
            sqlSession.rollback();
            throw e;
        }finally{
            MyBatisUtil.closeSqlSession();
        }
    }
}

8.在cn.test包下新建EmpDAOTest.java的单元测试类

package test;

import org.junit.Test;

import cn.dao.EmpDAO;
import cn.vo.Emp;
/**
 * 单元测试
 * @author Administrator
 *
 */
public class EmpDAOTest {

    @Test
    public void test() throws Exception{
        EmpDAO dao = new EmpDAO();
        Emp vo = new Emp();
        vo.setId(1);
        vo.setName("哈哈");
        vo.setSal(7000.0);
        vo.setSex("男");
        dao.add(vo);
    }

}

上述是MyBatis的独立运行

下面是与Spring的整合

回顾Hibernate与Spring的整合

c3p0连接池,用来管理连接

LocalSessionFactoryBean,用来管理hibernate相关配置文件

Hibernate事务管理器 HibernateTransactionManager

事务通知,即通知Spring容器那些方法需要事务支持。<tx:advice>

事务切入,即通知Spring容器事务切入到那些包下的那些类中的那些方法

注册EmpDAO

注册EmpService

注册EmpAction

那么MyBatis与Spring整合很相似

那就是在src目录下新建一个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>
        
      
    
</beans>

既然Spring通过c3p0来管理连接,那么mybatis.cfg.xml文件中就不需要配置连接信息了,此时的mybatis.cfg.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>

配置SqlSessionFactoryBean,用来管理MyBatis相关配置文件

           <!-- 
          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的事务管理器,
              即因为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>

事务切入,即通知Spring容器事务切入到那些包下的那些类中的那些方法

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

注册EmpDAO.java类

  <!-- 注册EmpDAO -->
      <bean id="empDAO" class="cn.dao.EmpDAO">
          <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
      </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>
      
      <!-- 注册EmpDAO -->
      <bean id="empDAO" class="cn.dao.EmpDAO">
          <property name="sqlSessionFactory" ref="sqlSessionFactory"/>
      </bean>
      
</beans>

那么此时需要修改持久层EmpDAO.java类

package cn.dao;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import cn.vo.Emp;

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

测试代码

@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(2);
        vo.setName("呵呵");
        vo.setSal(6000.0);
        vo.setSex("女");
        dao.add(vo);
    }
时间: 2024-10-05 04:58:53

Spring+MyBatis整合的相关文章

SpringMVC+Spring+Mybatis整合,使用druid连接池,声明式事务,maven配置

一直对springmvc和mybatis挺怀念的,最近想自己再搭建下框架,然后写点什么. 暂时没有整合缓存,druid也没有做ip地址的过滤.Spring的AOP简单配置了下,也还没具体弄,不知道能不能用,log也不知道能不能用,`(*∩_∩*)′哈哈,有点不负责任...... 直接上代码: 使用的eclipse和eclipse自带的maven,参考了网上的资料,有些代码是拷贝的,不过都自己测试过了.嗯,可以跑起来... 先上项目结构: 新建maven项目,选择web,然后配置pom: <pro

spring mybatis整合配置文件

spring mybatis整合所需要的配置文件和jar包

springmvc+spring+mybatis 整合

1.其实我也是菜鸟一枚,以前ssm不会,所以花了一段时间,学习了mybatis spring又进行了整合,后来又学习springmvc算是都看了看,今天就把整个搭建好的框架整理一下,和大家分享,如果错误希望指正…… 2.整个项目的目录结构: 3.有了整体结构之后我们一步一步整合来实现,整合步骤: (1).配置前端控制器,web.xml配置 (2).创建处理映射器 springmvc-server.xml 配置 (3).创建控制层 (4).业务逻辑层 (5).dao层 (6).sqlmapper

SSM(springmvc+spring+mybatis)整合过程

问题?SSM(springmvc+spring+mybatis)整合过程 一.SSM框架比较S2SH框架的优缺点比较 站在个人使用这两个框架的观点儿上来说的话,我觉得这个不能定死的说,常用的S2SH,SpringMVC等,还可以考虑jFinal. 首先说S2SH,这个是用的比较多的,特别是在中小型项目中,针对大型项目就不行了,是Struts和hibernate过于庞大,过于重量级,项目大了之后配置文件多的也是麻烦事,配置文件多了之后一方面不好操作,另外比较蛋疼的是没法断点调试,特别是对底层数据库

ztree使用系列三(ztree与springmvc+spring+mybatis整合实现增删改查)

在springmvc+spring+mybatis里整合ztree实现增删改查,上一篇已经写了demo,下面就只贴出各层实现功能的代码: Jsp页面实现功能的js代码如下: <script> //用于捕获分类编辑按钮的 click 事件,并且根据返回值确定是否允许进入名称编辑状态 function beforeEditName(treeId, treeNode) { var zTree = $.fn.zTree.getZTreeObj("treeDemo"); zTree.

SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发。

SSM 即所谓的 Spring MVC + Spring + MyBatis 整合开发.是目前企业开发比较流行的架构.代替了之前的SSH(Struts + Spring + Hibernate) 计划的架构组合 Sping MVC + Spring + MyBatis(非Ajax版) Sping MVC + Spring + MyBatis(Ajax版) Sping MVC + Spring + MyBatis(Ajax版 + JavaConfig) Spring Boot + MyBatis

spring+mybatis整合,org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class &#39;${jdbc.driverClassName}

在使用spring+mybatis时会出现Cannot load JDBC driver class ${jdbc.driverClassName}之类的出错. 原因是在spring里使用org.mybatis.spring.mapper.MapperScannerConfigurer 进行自动扫描的时候,设置了sqlSessionFactory 的话,可能会导致PropertyPlaceholderConfigurer失效,也就是用${jdbc.username}这样之类的表达式,将无法获取到

ssm: struts+ spring + mybatis 整合

其中: mybatis作为持久层操作: struts 作MVC框架: spring 管理组件的一个框架,跟mybatis的一个整合,管理数据源.事务等. 开发步骤:-----------------------------------------后端后端: spring+mybatis, 持久到数据库中,单元测试1.创建web系统,导入jar包: spring的jar包: mybatis的jar包: 数据库的jar包: 数据连接池的jar包:(dbcp,pool): 日志jar包: junit单

Spring MVC Spring MyBatis 整合 - 快速上手

我个人比较喜欢写注释,在工作中对注释的重要性看的也比较高,所以大部分文字都在注释中,代码外的文字会写的偏少,关键能懂就行 先看一下整合后的工程目录(单工程,多工程以后会采用maven) 5个package分别对应 action, entity, mapper(也就是DAO,采用动态代理), service, service 实现类 resources 下 相关资源文件: db.properties: 数据库连接参数 log4j.properties: 日志 applicationContext-