Spring 整合 ibatis

是的,真的是那个不好用的ibatis,不是好用的mybatis。

由于工作需要用到ibatis需要自己搭建环境,遇到了不少的坑,做一下记录。

一、环境配置

  • Maven 
  • JDK1.6 (非常重要,使用SimpleDataSource作为数据源会在JDK1.8 会触发 not suitable driver found 异常,具体原因另外博文进行解析)
  • MySQL 5.6

二、Maven依赖配置

   1.引入ibatis-sqlmap

        <dependency>
            <groupId>org.apache.ibatisgroupId>
            <artifactId>ibatis-sqlmapartifactId>
            <version>2.3.4.726version>
        dependency>

   2.引入spring (spring-orm 是spring集成ibatis的关键所在)

        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-ormartifactId>
            <version>3.0.5.RELEASEversion>
        dependency>

  3.引入spring aop以对事务进行管理

        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-aopartifactId>
            <version>3.0.5.RELEASEversion>
        dependency>

        <dependency>
            <groupId>org.aspectjgroupId>
            <artifactId>aspectjrtartifactId>
            <version>1.5.4version>
        dependency>

        <dependency>
            <groupId>org.aspectjgroupId>
            <artifactId>aspectjweaverartifactId>
            <version>1.5.4version>
        dependency>

  完整的pom.xml文件

xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>

    <groupId>com.kwjgroupId>
    <artifactId>firstibatisartifactId>
    <version>1.0-SNAPSHOTversion>

    <dependencies>
        <dependency>
            <groupId>org.apache.ibatisgroupId>
            <artifactId>ibatis-sqlmapartifactId>
            <version>2.3.4.726version>
        dependency>

        <dependency>
            <groupId>mysqlgroupId>
            <artifactId>mysql-connector-javaartifactId>
            <version>5.1.14version>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-ormartifactId>
            <version>3.0.5.RELEASEversion>
        dependency>
        <dependency>
            <groupId>org.springframeworkgroupId>
            <artifactId>spring-aopartifactId>
            <version>3.0.5.RELEASEversion>
        dependency>

        <dependency>
            <groupId>org.aspectjgroupId>
            <artifactId>aspectjrtartifactId>
            <version>1.5.4version>
        dependency>

        <dependency>
            <groupId>org.aspectjgroupId>
            <artifactId>aspectjweaverartifactId>
            <version>1.5.4version>
        dependency>

    dependencies>
project>

 

三.Spring 配置

application.xml 文件,注意SqlMapClient以及SqlMapClientTemplate

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

    
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
        <property name="url" value="jdbc:mysql://localhost:3306/test"/>
    bean>

    
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/> 
    bean>

    
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation" value="classpath:SqlMapConfig.xml"/> 
        <property name="dataSource" ref="dataSource"/> 
    

    
    <bean id="sqlMapClientTemplate" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
        <constructor-arg ref="sqlMapClient" />
    bean>

    
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="get*" read-only="true"/>
            <tx:method name="delete*" rollback-for="Exception"
                       propagation="REQUIRED" isolation="READ_COMMITTED" />
            <tx:method name="update*" rollback-for="Exception"
                       propagation="REQUIRED" isolation="READ_COMMITTED"/>
            <tx:method name="remove*" rollback-for="Exception" isolation="READ_COMMITTED"/>
            <tx:method name="count*" read-only="true"/>
        tx:attributes>
    tx:advice>

    <aop:config>
        
        
        <aop:pointcut id="daoMethod" expression="execution(public * service.*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="daoMethod"/>
    aop:config>

    
    <context:component-scan base-package="service.impl;dao"/>
beans>

 

四.ibatis 配置

SqlMapConfig.xml 文件

xml version="1.0" encoding="UTF-8" ?>
DOCTYPE sqlMapConfig
        PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN"
        "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
    
    <sqlMap resource="mapper/User.xml" />
sqlMapConfig>

 

mapper/User.xml 文件 (users表的中就id和name字段,其中id为自增长字段)

xml version="1.0" encoding="UTF-8" ?>
DOCTYPE sqlMap
        PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN"
        "http://ibatis.apache.org/dtd/sql-map-2.dtd">
<sqlMap>
    <typeAlias alias="bean.User" type="bean.User" />
    <select id="getAllUsers" resultClass="bean.User">
        select * from users
    select>

    <select id="getUserListById" parameterClass="bean.User" resultClass="bean.User">
        select * from users
    select>

    <update id="updateUser" parameterClass="bean.User">
        update users set `name` = #name# where id = #id#
    update>

    <insert id="insertUser" parameterClass="bean.User">
        insert users(name) values(#name#)
    insert>
sqlMap>

 

五、代码

bean.User

package bean;

public class User {
    private Integer id;
    private String name;

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

    @Override
    public String toString() {
        return "[id:"+id+",name:"+name+"]";
    }
}
View Code

 

UserDaoImpl  (接口就不放了)

package dao.impl;

import bean.User;
import dao.UserDAO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ibatis.SqlMapClientTemplate;
import org.springframework.stereotype.Component;

@Component
public class UserDAOImpl implements UserDAO {

    @Autowired
    private SqlMapClientTemplate sqlMapClientTemplate;

    public int updateUser(User user){
        return sqlMapClientTemplate.update("updateUser",user);
    }

}
View Code

 

UserServiceImpl (接口自行定义,该类的代码主要对Spring的事务回滚机制进行测试)

package service.impl;
import bean.User;
import dao.UserDAO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import service.UserService;

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserDAO userDAO;

    public int updateUser(User user){
        if(user == null){
            return 0;
        }
        return userDAO.updateUser(user);
    }

    public int updateUser(User user, boolean triggerException) {
        if(user == null){
            return 0;
        }
        int result = userDAO.updateUser(user);
        if(triggerException){
            throw new RuntimeException("触发异常,检查是否回滚");
        }
        return result;
    }
}
View Code

Main

import bean.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import service.UserService;

public class SpringMain {

    public static void main(String[] args){
        ApplicationContext context =
                new ClassPathXmlApplicationContext("classpath:application.xml");
        UserService userService = (UserService) context.getBean(UserService.class);
        User user = new User();
        user.setId(1);
        String newName = "NewData:"+System.currentTimeMillis();
        user.setName(newName);
        userService.updateUser(user);
    }
}
View Code

 

 

你可能感兴趣的:(Spring 整合 ibatis)