在网上查了MyBatis+Spring的结合,真的是太多太多了,可是没有几个代码是完整的..这两项整合花了我两天时间,终于被我整合完成…其实也很简单,原因:
JAR包的问题
…
由于Ibatis被改名为MyBatis,所以,网上很多都是有关Ibatis而MyBatis却很少很少…
本文以
MyBatis3.0.6 + Spring3.0.6
为例结合(一定要这个版本才行):
定义一个实体类:
Emp.java
package
com.lixing.scm.entity;
       
        public
       
       
        class
       
       Emp {
       
       
        private
       
       String id;
       
       
        private
       
       String name;
       
       
        private
       
       String sex;
       
       
        private
       
       
        int
       
       age;
       
       
        private
       
       String phone;
       
       
        public
       
       String getId() {
       
       
        return
       
       id;
       
       }
       
       
        public
       
       
        void
       
       setId(String id) {
       
       
        this
       
       .id = id;
       
       }
       
       
        public
       
       String getName() {
       
       
        return
       
       name;
       
       }
       
       
        public
       
       
        void
       
       setName(String name) {
       
       
        this
       
       .name = name;
       
       }
       
       
        public
       
       String getSex() {
       
       
        return
       
       sex;
       
       }
       
       
        public
       
       
        void
       
       setSex(String sex) {
       
       
        this
       
       .sex = sex;
       
       }
       
       
        public
       
       
        int
       
       getAge() {
       
       
        return
       
       age;
       
       }
       
       
        public
       
       
        void
       
       setAge(
       
        int
       
       age) {
       
       
        this
       
       .age = age;
       
       }
       
       
        public
       
       String getPhone() {
       
       
        return
       
       phone;
       
       }
       
       
        public
       
       
        void
       
       setPhone(String phone) {
       
       
        this
       
       .phone = phone;
       
       }
       
       }
       
      
定义实体内操作接口:EmpMapper.java
package
com.lixing.scm.test.mapper;
       
        import
       
       java.util.List;
       
       
        import
       
       java.util.Map;
       
        import
       
       com.lixing.scm.entity.Emp;
       
        public
       
       
        interface
       
       EmpMapper {
       
       
        void
       
       insertEmp(Emp emp);
       
       List<Emp> getAllEmp();
       
       Emp getById(String id);
       
       
        void
       
       deleteEmp(String id);
       
       
        void
       
       updateEmp(Map<String,Object> map);
       
       }
       
      
定义实体类操作接口的映射文件: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
=”com.lixing.scm.test.mapper.EmpMapper”
>
<
parameterMap
type
=”com.lixing.scm.entity.Emp”
id
=”parameterMapEmp”
>
<
parameter
property
=”id”
/>
<
parameter
property
=”name”
/>
<
parameter
property
=”sex”
/>
<
parameter
property
=”age”
/>
<
parameter
property
=”phone”
/>
</
parameterMap
>
       
        <
       
       
        resultMap
       
       
        type
       
       
        =”com.lixing.scm.entity.Emp”
       
       
        id
       
       
        =”resultMapEmp”
       
       
        >
       
       
       
        <
       
       
        result
       
       
        property
       
       
        =”id”
       
       
        column
       
       
        =”id”
       
       
        />
       
       
       
        <
       
       
        result
       
       
        property
       
       
        =”name”
       
       
        column
       
       
        =”name”
       
       
        />
       
       
       
        <
       
       
        result
       
       
        property
       
       
        =”sex”
       
       
        column
       
       
        =”sex”
       
       
        />
       
       
       
        <
       
       
        result
       
       
        property
       
       
        =”age”
       
       
        column
       
       
        =”age”
       
       
        />
       
       
       
        <
       
       
        result
       
       
        property
       
       
        =”phone”
       
       
        column
       
       
        =”phone”
       
       
        />
       
       
       
        </
       
       
        resultMap
       
       
        >
       
       
        <
       
       
        insert
       
       
        id
       
       
        =”insertEmp”
       
       
        parameterMap
       
       
        =”parameterMapEmp”
       
       
        >
       
       
       INSERT INTO emp(id,name,sex,age,phone)
       
       VALUES(?,?,?,?,?)
       
       
        </
       
       
        insert
       
       
        >
       
       
       
        <
       
       
        select
       
       
        id
       
       
        =”getAllEmp”
       
       
        resultMap
       
       
        =”resultMapEmp”
       
       
        >
       
       
       SELECT * FROM emp
       
       
        </
       
       
        select
       
       
        >
       
       
       
        <
       
       
        select
       
       
        id
       
       
        =”getById”
       
       
        parameterType
       
       
        =”String”
       
       
        resultMap
       
       
        =”resultMapEmp”
       
       
        >
       
       
       SELECT * FROM emp
       
       WHERE id=#{value}
       
       
        </
       
       
        select
       
       
        >
       
       
       
        <
       
       
        delete
       
       
        id
       
       
        =”deleteEmp”
       
       
        parameterType
       
       
        =”String”
       
       
        >
       
       
       DELETE FROM emp
       
       WHERE id=#{value}
       
       
        </
       
       
        delete
       
       
        >
       
       
       
        <
       
       
        update
       
       
        id
       
       
        =”updateEmp”
       
       
        parameterType
       
       
        =”java.util.Map”
       
       
        >
       
       
       UPDATE emp
       
       SET name=#{name},sex=#{sex},age=#{age},phone=#{phone}
       
       WHERE id=#{id}
       
       
        </
       
       
        update
       
       
        >
       
       
       
        </
       
       
        mapper
       
       
        >
       
       
      
Spring3.0.6定义:
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”
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/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd”
>
       <!–
       
       
       –>
       
       
        <
       
       
        context:annotation-config
       
       
        />
       
       
       
        <
       
       
        context:component-scan
       
       
        base-package
       
       
        =”com.lixing.scm.test.*”
       
       
        />
       
       <!–
       
        jdbc.propertis Directory
       
       –>
       
       
        <
       
       
        bean
       
       
       
        class
       
       
        =”org.springframework.beans.factory.config.PropertyPlaceholderConfigurer”
       
       
        >
       
       
       
        <
       
       
        property
       
       
        name
       
       
        =”locations”
       
       
        value
       
       
        =”classpath:jdbc.properties”
       
       
        />
       
       
       
        </
       
       
        bean
       
       
        >
       
       
        <
       
       
        bean
       
       
        id
       
       
        =”MyDataSource”
       
       
        destroy-method
       
       
        =”close”
       
       
       
        class
       
       
        =”org.apache.commons.dbcp.BasicDataSource”
       
       
        >
       
       
       
        <
       
       
        property
       
       
        name
       
       
        =”driverClassName”
       
       
        value
       
       
        =”${jdbc.driverClassName}”
       
       
        />
       
       
       
        <
       
       
        property
       
       
        name
       
       
        =”url”
       
       
        value
       
       
        =”${jdbc.url}”
       
       
        />
       
       
       
        <
       
       
        property
       
       
        name
       
       
        =”username”
       
       
        value
       
       
        =”${jdbc.username}”
       
       
        />
       
       
       
        <
       
       
        property
       
       
        name
       
       
        =”password”
       
       
        value
       
       
        =”${jdbc.password}”
       
       
        />
       
       
       
        </
       
       
        bean
       
       
        >
       
       <!–
       
        SqlSessionFactory
       
       –>
       
       
        <
       
       
        bean
       
       
        id
       
       
        =”sqlSessionFactory”
       
       
        class
       
       
        =”org.mybatis.spring.SqlSessionFactoryBean”
       
       
        >
       
       
       
        <
       
       
        property
       
       
        name
       
       
        =”dataSource”
       
       
        ref
       
       
        =”MyDataSource”
       
       
        />
       
       
       
        </
       
       
        bean
       
       
        >
       
       
       <!–
       
        ScanMapperFiles
       
       –>
       
       
        <
       
       
        bean
       
       
        class
       
       
        =”org.mybatis.spring.mapper.MapperScannerConfigurer”
       
       
        >
       
       
       
        <
       
       
        property
       
       
        name
       
       
        =”basePackage”
       
       
        value
       
       
        =”com.lixing.scm.test.mapper”
       
       
        />
       
       
       
        </
       
       
        bean
       
       
        >
       
       <!–
       
        ================================事务相关控制=================================================
       
       –>
       
       
        <
       
       
        bean
       
       
        name
       
       
        =”transactionManager”
       
       
        class
       
       
        =”org.springframework.jdbc.datasource.DataSourceTransactionManager”
       
       
        >
       
       
       
        <
       
       
        property
       
       
        name
       
       
        =”dataSource”
       
       
        ref
       
       
        =”MyDataSource”
       
       
        >
       
       
        </
       
       
        property
       
       
        >
       
       
       
        </
       
       
        bean
       
       
        >
       
       
        <
       
       
        tx:advice
       
       
        id
       
       
        =”userTxAdvice”
       
       
        transaction-manager
       
       
        =”transactionManager”
       
       
        >
       
       
       
        <
       
       
        tx:attributes
       
       
        >
       
       
       
        <
       
       
        tx:method
       
       
        name
       
       
        =”delete*”
       
       
        propagation
       
       
        =”REQUIRED”
       
       
        read-only
       
       
        =”false”
       
       
       
        rollback-for
       
       
        =”java.lang.Exception”
       
       
        no-rollback-for
       
       
        =”java.lang.RuntimeException”
       
       
        />
       
       
       
        <
       
       
        tx:method
       
       
        name
       
       
        =”insert*”
       
       
        propagation
       
       
        =”REQUIRED”
       
       
        read-only
       
       
        =”false”
       
       
       
        rollback-for
       
       
        =”java.lang.RuntimeException”
       
       
        />
       
       
       
        <
       
       
        tx:method
       
       
        name
       
       
        =”update*”
       
       
        propagation
       
       
        =”REQUIRED”
       
       
        read-only
       
       
        =”false”
       
       
       
        rollback-for
       
       
        =”java.lang.Exception”
       
       
        />
       
       
        <
       
       
        tx:method
       
       
        name
       
       
        =”find*”
       
       
        propagation
       
       
        =”SUPPORTS”
       
       
        />
       
       
       
        <
       
       
        tx:method
       
       
        name
       
       
        =”get*”
       
       
        propagation
       
       
        =”SUPPORTS”
       
       
        />
       
       
       
        <
       
       
        tx:method
       
       
        name
       
       
        =”select*”
       
       
        propagation
       
       
        =”SUPPORTS”
       
       
        />
       
       
       
        </
       
       
        tx:attributes
       
       
        >
       
       
       
        </
       
       
        tx:advice
       
       
        >
       
       
        <
       
       
        aop:config
       
       
        >
       
       
       
        <
       
       
        aop:pointcut
       
       
        id
       
       
        =”pc”
       
       
        expression
       
       
        =”execution(public * com.lixing.scm.test.service.*.*(..))”
       
       
        /> <!–把事务控制在Service层–>
       
       
       
        <
       
       
        aop:advisor
       
       
        pointcut-ref
       
       
        =”pc”
       
       
        advice-ref
       
       
        =”userTxAdvice”
       
       
        />
       
       
       
        </
       
       
        aop:config
       
       
        >
       
       <!–
       
        以下为自定义Bean
       
       –>
       
       
        <
       
       
        bean
       
       
        id
       
       
        =”empDao”
       
       
        class
       
       
        =”com.lixing.scm.test.dao.impl.EmpDaoImpl”
       
       
       
        autowire
       
       
        =”byName”
       
       
        />
       
       
       
        <
       
       
        bean
       
       
        id
       
       
        =”empService”
       
       
        class
       
       
        =”com.lixing.scm.test.service.impl.EmpServiceImpl”
       
       
        autowire
       
       
        =”byName”
       
       
        />
       
       
       
        </
       
       
        beans
       
       
        >
       
      
DAO接口:EmpDAO.java
package
com.lixing.scm.test.dao;
       
        import
       
       java.util.List;
       
       
        import
       
       java.util.Map;
       
        import
       
       com.lixing.scm.entity.Emp;
       
        public
       
       
        interface
       
       EmpDao {
       
       
        void
       
       insertEmp(Emp emp);
       
       List<Emp> getAllEmp();
       
       Emp getById(String id);
       
       
        void
       
       deleteEmp(String id);
       
       
        void
       
       updateEmp(Map<String, Object> map);
       
       }
       
      
DAO接口实现类:EmpDaoImpl.java
package
com.lixing.scm.test.dao.impl;
        
         import
        
        java.util.List;
        
        
         import
        
        java.util.Map;
        
         import
        
        com.lixing.scm.entity.Emp;
        
        
         import
        
        com.lixing.scm.test.dao.EmpDao;
        
        
         import
        
        com.lixing.scm.test.mapper.EmpMapper;
        
         public
        
        
         class
        
        EmpDaoImpl
        
         implements
        
        EmpDao {
        
        
        
         private
        
        EmpMapper empMapper;
       
//在此处注入一个empMapper
//这个empMapper由 Spring自动生成
//不需要我们自己手工去定义
@Override
public
void
insertEmp(Emp emp) {
this
.empMapper.insertEmp(emp);
throw
new
RuntimeException(
“Error”
);
//测试抛出RuntimeException
//异常查看数据库是否存在记录
}
       @Override
       
       
        public
       
       
        void
       
       deleteEmp(String id) {
       
       
        this
       
       .empMapper.deleteEmp(id);
       
       }
       @Override
       
       
        public
       
       List<Emp> getAllEmp() {
       
       
        return
       
       
        this
       
       .empMapper.getAllEmp();
       
       }
       @Override
       
       
        public
       
       Emp getById(String id) {
       
       
        return
       
       
        this
       
       .empMapper.getById(id);
       
       }
       @Override
       
       
        public
       
       
        void
       
       updateEmp(Map<String, Object> map) {
       
       
        this
       
       .empMapper.updateEmp(map);
       
       }
       
        public
       
       EmpMapper getEmpMapper() {
       
       
        return
       
       empMapper;
       
       }
       
        public
       
       
        void
       
       setEmpMapper(EmpMapper empMapper) {
       
       
        this
       
       .empMapper = empMapper;
       
       }
       
       }
       
      
Service层接口:EmpService.java
package
com.lixing.scm.test.service;
       
        import
       
       com.lixing.scm.entity.Emp;
       
        public
       
       
        interface
       
       EmpService {
       
       
        void
       
       insertEmp(Emp emp);
       
       }
       
      
Service层接口实现类:EmpServiceImpl.java
package
com.lixing.scm.test.service.impl;
       
        import
       
       com.lixing.scm.entity.Emp;
       
       
        import
       
       com.lixing.scm.test.dao.EmpDao;
       
       
        import
       
       com.lixing.scm.test.service.EmpService;
       
        public
       
       
        class
       
       EmpServiceImpl
       
        implements
       
       EmpService {
       
       
        private
       
       EmpDao empDao;
       @Override
       
       
        public
       
       
        void
       
       insertEmp(Emp emp) {
       
       empDao.insertEmp(emp);
}
       
        public
       
       EmpDao getEmpDao() {
       
       
        return
       
       empDao;
       
       }
       
        public
       
       
        void
       
       setEmpDao(EmpDao empDao) {
       
       
        this
       
       .empDao = empDao;
       
       }
       
       }
       
      
测试类:TestEmpService.java
import
org.junit.Test;
import
org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
       
        import
       
       com.lixing.scm.entity.Emp;
       
       
        import
       
       com.lixing.scm.test.service.EmpService;
       
        public
       
       
        class
       
       TestEmpService {
       
       @Test
       
       
        public
       
       
        void
       
       testTrasaction(){
       
       Emp emp=
       
        new
       
       Emp();
       
       emp.setId(
       
        “00000003”
       
       );
       
       emp.setName(
       
        “某某某”
       
       );
       
       emp.setAge(50);
       
       emp.setSex(
       
        “男”
       
       );
       
       emp.setPhone(
       
        “566666”
       
       );
       ApplicationContext ctx=
       
        new
       
       ClassPathXmlApplicationContext(
       
        “classpath:applicationContext.xml”
       
       );
       
       EmpService service=ctx.getBean(EmpService.
       
        class
       
       );
       
       service.insertEmp(emp);
       
       }
       
       }
      
     本文出自 “
     
      李新博客
     
     ” 博客,请务必保留此出处
     
      http://kinglixing.blog.51cto.com/3421535/723870
     
    
 
