2.spring+mybatis整合步骤

2.spring+mybatis整合步骤

1.创建spring_mybatis_mysql这么一个javaweb或java工程

2.导入spring、mybatis、mysql、和mybatis提供的与spring整合的插件包

  mysql的jar:
mysql-connector-java-5.1.43-bin.jar
c3po连接池的jar:
c3p0-0.9.5.2.jar
mybatis的jar:
asm-3.3.1.jar(字节码)
cglib-2.2.2.jar(代理)
commons-logging-1.1.1.jar(日志)
log4j-1.2.17.jar(log4日志,可不要)
mybatis-3.2.7.jar(核心包)
mybatis与spring整合的jar:
mybatis-spring-1.1.1.jar
spring的ioc模块的jar:(asm包在3.2.2中已经整合到core中)
spring-beans-4.0.4.RELEASE.jar
spring-context-4.0.4.RELEASE.jar
spring-core-4.0.4.RELEASE.jar
spring-expression-4.0.4.RELEASE.jar
commons-logging-1.2.jar
spring的aop模块的jar:
aopalliance.jar(spring4中未见)
spring-aspects-4.0.4.RELEASE.jar
cglib-2.2.2.jar(未见)
spring-aop-4.0.4.RELEASE.jar
spring的transavion(事物模块)的jar:
spring-jdbc-4.0.4.RELEASE.jar
spring-orm-4.0.4.RELEASE.jar
org.springframework.transaction-4.0.4.RELEASE.jar(tx)
spring的web的jar(web工程中使用):
spring-web-4.0.4.RELEASE.jar
spring-webmvc-4.0.4.RELEASE.jar

2.1maven(pom.xml)的依赖配置

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>spring_mybatis_mysql</groupId>
    <artifactId>spring_mybatis_mysql</artifactId>
    <packaging>war</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>spring_mybatis_mysql Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <!--junit包-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <!--mysql包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.43</version>
        </dependency>
        <!--c3po连接池-->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>
        <!--mybatis的包-->
        <dependency>
            <groupId>asm</groupId>
            <artifactId>asm</artifactId>
            <version>3.3.1</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib</artifactId>
            <version>2.2.2</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.7</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.1.1</version>
        </dependency>
        <!--spring IOC部分-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.0.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.0.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>4.0.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>4.0.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>4.0.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.0.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>4.0.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.0.4.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>RELEASE</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>spring_mybatis_mysql</finalName>
    </build>
</project>


3.创建一个员工表
emp.sql

CREATE TABLE emps (
  eid INT (5) PRIMARY KEY ,
  ename VARCHAR (20),
  esal INT (8),
  esex VARCHAR (2)
);

4.创建对应的JavaBean

package nick.entity;

/**
 * Created by Administrator on 2017/8/9.
 */
public class Emp {
    private Integer eid;
    private String ename;
    private Integer esal;
    private String esex;

    public Emp() {
    }

    public Emp(Integer eid, String ename, Integer esal, String esex) {
        this.eid = eid;
        this.ename = ename;
        this.esal = esal;
        this.esex = esex;
    }

    public Integer getEid() {
        return eid;
    }

    public void setEid(Integer eid) {
        this.eid = eid;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public Integer getEsal() {
        return esal;
    }

    public void setEsal(Integer esal) {
        this.esal = esal;
    }

    public String getEsex() {
        return esex;
    }

    public void setEsex(String esex) {
        this.esex = esex;
    }
}


5.创建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="empNamespace">

   <resultMap type="nick.entity.Emp" id="empMap">

    <id column="id"  property="eid"/>
    <result column="name"  property="ename"/>
    <result column="sal"  property="esal"/>
    <result column="sex"  property="esex"/>
   </resultMap>

    <!--增加员工-->
    <insert id="add" parameterType="nick.entity.Emp" >
        INSERT INTO emps(eid,ename,esal,esex) VALUES (#{eid},#{ename},#{esal},#{esex})
    </insert>
</mapper>


6.创建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>
    <settings>
        <setting name="useGeneratedKeys" value="false"/>
        <setting name="useColumnLabel" value="true"/>
    </settings>

    <!-- 配置映射类xml文件的路径 -->
    <mappers>
        <mapper resource="mapper/EmpMapper.xml"/>
    </mappers>

</configuration>


7.创建EmpDao.java类

package nick.dao;

import nick.entity.Emp;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

/**
 * Created by Administrator on 2017/8/9.
 * 持久层Dao
 */
public class EmpDao {
    private SqlSessionFactory sqlSessionFactory;

    public void setSqlSessionFactory(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    /**
     * 增加员工
     *
     * @param emp
     * @return
     * @throws Exception
     */
    public boolean add(Emp emp) throws Exception {
        SqlSession sqlSession = sqlSessionFactory.openSession();
        sqlSession.insert("empNamespace.add",emp);
        sqlSession.close();
        return true;
    }
}


8.配置spring.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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
           http://www.springframework.org/schema/beans
           http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
           http://www.springframework.org/schema/tx
           http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
           http://www.springframework.org/schema/aop
           http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-4.0.xsd">

    <!--1.配置c3p0连接池,目的:管理数据库连接-->
    <bean id="comboPooledDataSourceID" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"></property>
        <property name="jdbcUrl"
                  value="jdbc:mysql://127.0.0.1:3306/mybatis?characterEncoding=UTF-8&amp;autoReconnect=true"></property>
        <property name="user" value="root"></property>
        <property name="password" value="123456"></property>
    </bean>

    <!--2.配置org.mybatis.spring.SqlSessionFactoryBean,目的:加载mybatis配置文件和映射文件,即替代原mybatis工具类的作用-->
    <bean id="sqlSessionFactoryBeanID" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="configLocation" value="classpath:mybatis.xml"></property>
        <!--因为数据库连接已经由c3p0管理,所以mybatis.xml数据连接需要依赖c3p0的数据库连接配置-->
        <property name="dataSource" ref="comboPooledDataSourceID"></property>
    </bean>

    <!--3.配置mybatis事物管理器,即因为mybatis底层用的是jdbc的事物管理器,所以在这里依然配置jdbc事物管理器:spring中已经集成-->
    <bean id="dataSourceTransactionManagerID" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <!--同样是依赖于连接池-->
        <property name="dataSource" ref="comboPooledDataSourceID"></property>
    </bean>

    <!--4.配置事物通知,即:让哪些方法需要事物支持-->
    <tx:advice id="tx" transaction-manager="dataSourceTransactionManagerID">
        <tx:attributes>
            <tx:method name="add*" propagation="REQUIRED"/>
            <tx:method name="delete*" propagation="REQUIRED"/>
            <tx:method name="update*" propagation="REQUIRED"/>
            <tx:method name="*" propagation="SUPPORTS"/><!--在代码中手动配置是否支持事物-->
        </tx:attributes>
    </tx:advice>

    <!--5.配置事物切面,即:让哪些包下的类需要事物,正式项目中事物的包要集成在serrvice中-->
    <aop:config>
        <aop:pointcut id="pointcut" expression="execution(* nick.dao.*.*(..))"></aop:pointcut>
        <aop:advisor advice-ref="tx" pointcut-ref="pointcut"/>
    </aop:config>

    <!--6.注册empDao-->
    <bean id="empDaoID" class="nick.dao.EmpDao">
        <property name="sqlSessionFactory" ref="sqlSessionFactoryBeanID"/>
    </bean>
</beans>

9.测试(使用test2测试)

package nick.test;

import nick.dao.EmpDao;
import nick.entity.Emp;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * Created by Administrator on 2017/8/9.
 * 单元测试
 */
public class test {
    @Test
    public void test () {
        //单独测试mybatis
        EmpDao empDao = new EmpDao();
        try {
            empDao.add(new Emp(3,"笨笨",6000,"男"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //测试spring整合mybatis
    @Test
    public void test2 () throws Exception{
        ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"spring.xml"});
        EmpDao empDao = (EmpDao) ac.getBean("empDaoID");
        empDao.add(new Emp(6,"嘻嘻",9000,"女"));
    }
}


原文地址:https://www.cnblogs.com/Nick-Hu/p/7325748.html