`

Ibatis学习三. Spring整合Ibatis

阅读更多
一.Spring整合iBatis原理
Apache iBatis是当前IT项目中使用很广泛的一个半自动ORM框架,区别于Hibernate之类的全自动框架,iBatis对数据库的操作拥有更加灵活的控制,对于那些经常需要调用本地数据库函数自定义SQL语句,或是喜欢自己优化SQL执行效率的开发者来说,iBatis是一个非常不错的选择。而得到广泛应用的开源企业架构SpringFramework,也很好的将其进行了集成,使得iBatis在 SpringFramework中的使用更加便利、快捷。
开发者所要做的就是继承SpringFramework中提供的 SqlMapClientDaoSupport类即可。

1SqlMapClientFactoryBean 的装配

    SqlMapClientFactoryBeanSqlMapClientTemplate使用的基础,如果在SpringFramework应用中没有装配SqlMapClientFactoryBean,那么SqlMapClientTemplate将不可用,报空指针错误

  

<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">

    <property name="configLocation" value="/WEB-INF/sqlmap-config.xml"/>      
    <!-- iBatis sqlmap config 文件位置 -->

    <property name="dataSource" ref="dataSource"/> 
    <!-- 在SpringFramework配置文件中使用的数据源 -->

    <property name="lobHandler" ref="oracleLobHandler"/> 
    <!-- 如果需要读写Lob字段,需要注入在SpringFramework配置文件中配置好的Handler,-->
    <!-- 这里是Oracle的数据库 -->

</bean>

 

2、继承使用SqlMapClientDaoSupport

声明Java类:

......

    import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;

    ......

    public class ReportDAOImpl extends SqlMapClientDaoSupport {

        ......

    }

 

 

SpringFramework配置文件中装配Java类:

<bean id="reportDao" class="com.test.dao.ReportDAOImpl">

    <property name="sqlMapClient" ref="sqlMapClient"/> 
    <!-- 装配SqlMapClientFactoryBean -->

</bean>

 

 

3、使用SqlMapClientTemplate查询

 

    当执行没有参数的查询时:

List result = getSqlMapClientTemplate().queryForList("TestSpace.qryTest");
//"TestSpace"为iBatis SqlMap文件的命名空间;"qryTest"为iBatis SqlMap的查询方法id

 

    当按照主键获取某条记录信息时:

Long id = new Long("2");
Object resultObj = getSqlMapClientTemplate().queryForObject("TestSpace.getTest", id);

 

    当按照某些条件查询时:

ObjectA objA = new ObjectA();

objA.setParam1("test1");

objA.setParam2("test2");

    ......

List result = getSqlMapClientTemplate().queryForList("TestSpace.qryTestByParam", objA);

如果需要取4~40条数据:

List result = getSqlMapClientTemplate().queryForList("TestSpace.qryTestByParam", objA, 4, 40);

也可以返回Map

Map result = getSqlMapClientTemplate().queryForMap("TestSpace.qryTestByParam", objA, "MapKey");

 

 

4、使用SqlMapClientTemplate添加数据

 

    ObjectA objA = new ObjectA();

    objA.setParam1("test1");

    objA.setParam2("test2");

    ......

    getSqlMapClientTemplate().insert("TestSpace.insertTest", objA);

 

5、使用SqlMapClientTemplate更新数据

 

    ObjectA objA = new ObjectA();

    objA.setParam1("test1");

    objA.setParam2("test2");

    ......

    getSqlMapClientTemplate().update("TestSpace.updateTest", objA);

    更新前20条记录:

    getSqlMapClientTemplate().update("TestSpace.updateTest", objA, 20);

 

6、使用SqlMapClientTemplate删除数据

 

    Long id = new Long("2");

    getSqlMapClientTemplate().delete("TestSpace.deleteTest", id);

 

二.实例分析

 1.Pom文件

 

<?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.0</modelVersion>

    <groupId>Ibatis</groupId>
    <artifactId>Ibatis</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <spring-version>3.0.6.RELEASE</spring-version>
    </properties>

    <dependencies>
        <!--Junti-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!--Spring-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring-version}</version>
        </dependency>
        <!--Ibatis-->
        <dependency>
            <groupId>org.apache.ibatis</groupId>
            <artifactId>ibatis-sqlmap</artifactId>
            <version>2.3.4.726</version>
        </dependency>
        <!--dbcp-->
        <dependency>
            <groupId>c3p0</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.1.2</version>
        </dependency>
        <dependency>
            <groupId>commons-dbcp</groupId>
            <artifactId>commons-dbcp</artifactId>
            <version>1.4</version>
        </dependency>
        <!--mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.27</version>
        </dependency>
        <!--log4j-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.5</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.5</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

 

2.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">

    <import resource="spring-ibatis.xml"/>

</beans>

 

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

    <!-- spring 读取配置文件 -->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations" value="jdbc.properties" />
    </bean>

    <!--设置BasicDataSource连接池,须导入commons-dbcp包-->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="${db.driver}" />
        <property name="url" value="${db.url}" />
        <property name="username" value="${db.username}" />
        <property name="password" value="${db.password}" />
        <property name="initialSize" value="${db.initialPoolSize}" />
        <property name="maxActive" value="${db.maxPoolSize}" />
        <property name="maxWait" value="${db.maxIdleTime}" />
    </bean>

    <!--配置c3p0连接池,须导入c3p0包-->
    <bean id="dataSource_c3p0" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
        <property name="driverClass" value="${db.driver}"/>
        <property name="jdbcUrl" value="${db.url}"/>
        <property name="user" value="${db.username}"/>
        <property name="password" value="${db.password}"/>
        <property name="initialPoolSize" value="${db.initialPoolSize}"/>
        <property name="minPoolSize" value="${db.minPoolSize}"/>
        <property name="maxPoolSize" value="${db.maxPoolSize}"/>
        <property name="maxIdleTime" value="${db.maxIdleTime}"/>
    </bean>

    <!-- 此处应注入ibatis配置文件,而非sqlMap文件,否则会出现“there is no statement.....异常” -->
    <!-- 在此处引入数据库连接池的关联 -->
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocation" value="sqlMapConfig.xml" />
        <property name="dataSource" ref="dataSource" />
    </bean>

    <bean id="studentDao" class="com.suishou.ibatis1.dao.StudentDaoImpl">
        <property name="sqlMapClient" ref="sqlMapClient" />
    </bean>

</beans>

 

4.jdbc.properties

 

db.driver=com.mysql.jdbc.Driver
db.url=jdbc:mysql://localhost:3306/ibatis?useUnicode=true&amp;characterEncoding=UTF-8
db.username=root
db.password=111111
db.initialPoolSize=10
db.minPoolSize=10
db.maxPoolSize=20
db.maxIdleTime=60

 

5.Student.xml

 

<?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 type="com.suishou.ibatis1.entity.Student" alias="student"/>
    <!--<resultMap id="ibatisTest" class="student" >
        <result column="id" property="id" jdbcType="VARCHAR" />
        <result column="name" property="name" jdbcType="VARCHAR" />
    </resultMap>-->

    <!-- 获得全查询列表 -->
    <select id="getAllStudents" resultClass="student">
    select * from student
  </select>

    <!-- 根据用户名获得用户对象 -->
    <select id="getStudentByName" resultClass="student">
     select * from student where name=#value#
  </select>

    <!-- 根据id获得用户对象 -->
    <select id="getStudentById" resultClass="student">
     select * from student where id=#value#
  </select>

    <!-- 新增用户对象 -->
    <insert id="insertStudent" parameterClass="student">
      insert into student (id,name) values (#id#,#name#)
   </insert>

    <!-- 删除用户对象 -->
    <delete id="deleteStudent">
     delete from student where id=#value#
   </delete>

    <!-- 更新用户对象 -->
    <delete id="updateStudent" parameterClass="student">
      update student set name=#name# where id=#id#
   </delete>
</sqlMap>

 

6.log4j.properties

 

#定义根目录的输出级别和目的地
log4j.rootLogger=INFO, stdout1,stdout2

#设置输出目的地和输出样式
log4j.appender.stdout1=org.apache.log4j.ConsoleAppender
log4j.appender.stdout1.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout1.layout.ConversionPattern=%d %-5p %C.%M(%L) - %m%n

log4j.appender.stdout2=org.apache.log4j.FileAppender
log4j.appender.stdout2.File=d:/log00.html
log4j.appender.stdout2.layout=org.apache.log4j.HTMLLayout

#设置每个包的输出级别
#log4j.logger.com.ibatis=debug
#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
#log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
#log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
#log4j.logger.java.sql.Connection=debug
##log4j.logger.java.sql.Statement=debug
#log4j.logger.java.sql.PreparedStatement=debug

 

7.Student实体类

 

public class Student {
    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

 

8.IStudentDao

 

public interface IStudentDao {
    void insert(Student student);   //增
    void delete(int id);            //删
    void update(Student student);   //改
    Student select(int id);         //查
    List<Student> selectAll();      //查询全部
}

 

9.StudentDaoImpl

 

public class StudentDaoImpl extends SqlMapClientDaoSupport implements IStudentDao {

    @Override
    public void insert(Student student) {
        getSqlMapClientTemplate().insert("insertStudent",student);
    }

    @Override
    public void delete(int id) {
        getSqlMapClientTemplate().delete("deleteStudent",id);
    }

    @Override
    public void update(Student student) {
        getSqlMapClientTemplate().update("updateStudent",student);
    }

    @Override
    public Student select(int id) {
        return (Student) getSqlMapClientTemplate().queryForObject("getStudentById",id);
    }

    @Override
    public List<Student> selectAll() {
        return getSqlMapClientTemplate().queryForList("getAllStudents");
    }
}

 

10.StudentService

 

public class StudentService {

    private static Logger logger = LoggerFactory.getLogger(StudentService.class);

    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        IStudentDao studentDao = (IStudentDao) ctx.getBean("studentDao");

        Student student = studentDao.select(6);
        logger.info("The Student is {}", student);
    }
}

 

 

分享到:
评论

相关推荐

    Spring3 整合MyBatis3 配置多数据源动态选择SqlSessionFactory详细教程

    Spring3 整合 MyBatis3 配置多数据源动态选择 ...通过本教程,我们可以学习如何实现 Spring 整合 MyBatis,动态选择 SqlSessionFactory,並且可以了解到 MyBatis 官方提供的一些整合 Spring 的相关代码。

    iBatis和Spring整合

    iBatis和Spring整合 iBatis和Spring整合

    ibatis与spring整合

    DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd"&gt; &lt;property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/&gt; ...

    ibatis-2.3.0.677.jar.zip

    在实际应用中,开发者可以通过Spring框架与iBatis进行整合,实现依赖注入,简化配置,提升开发效率。iBatis 2.3.0.677版本的兼容性和稳定性都得到了良好的验证,它能够在各种项目环境中稳定运行,满足不同规模应用的...

    Spring+iBatis整合详解

    &lt;bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"&gt; &lt;value&gt;classpath:sqlMapConfig.xml ``` 其中`sqlMapConfig.xml`是iBatis的核心配置文件,包含数据库连接信息、...

    Spring对IBatis的整合

    import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport; import org.springframework.samples.jpetstore.dao.ProductDao; import org.springframework.samples.jpetstore.domain.Product; public ...

    spring ibatis整合所需jar包

    8. 整合测试:编写测试类,通过@Autowired注解注入DAO接口,进行数据库操作的测试,确保Spring和iBatis的整合成功。 通过以上步骤,Spring和iBatis的整合就完成了。这种整合方式允许开发者充分利用Spring的高级特性...

    spring与ibatis整合集成实例

    在整合 Spring 和 iBATIS 进行项目开发时,主要涉及以下几个关键知识点: 1. **依赖注入 (Dependency Injection, DI)**:Spring 的核心特性之一,通过 DI 可以使代码更松耦合,易于测试和维护。在整合 iBATIS 时,...

    ibatis与spring的整合

    在整合iBATIS和Spring的过程中,主要目标是利用Spring的IOC(Inversion of Control)容器来管理和协调数据访问层(DAO)以及事务处理,同时利用iBATIS作为SQL映射框架,提供灵活的数据库操作。以下将详细阐述整合的...

    Struts2+Spring+Ibatis环境配置.doc

    Struts2+Spring+Ibatis 是一种常见的Java企业级应用开发框架组合,它们各自负责不同的职责,协同工作以实现高效、灵活的后端系统。Struts2作为MVC框架负责控制流程,Spring 提供依赖注入和事务管理等功能,而Ibatis...

    struts2 + spring2.5 + ibatis2.3.4整合包文件

    5. 整合过程:通常,整合这三大框架需要配置Struts2的struts.xml、Spring的applicationContext.xml以及iBatis的sqlMapConfig.xml等文件。还需要在Struts2的Action类中注入Spring管理的bean,以便于调用业务服务。...

    jar 源码(spring+ibatis+..)

    MyBatis与Spring整合后,可以通过Spring的事务管理进行控制,同时也可以实现DAO接口的自动代理,提高开发效率。 **OSCache**是开源的缓存解决方案,用于提高Web应用程序的性能。它能够在内存中存储对象,避免重复...

    2011最新ibatis+Mybatis+Spring整合文档全集以及案例

    《2011最新ibatis+Mybatis+Spring整合文档全集以及案例》是一份珍贵的资源,包含了关于这三个著名Java技术的详细信息和实践案例。这篇文章将深入探讨ibatis、Mybatis和Spring框架的整合,以及它们在实际开发中的应用...

    ibatis2.rar

    《iBATIS与Spring集成及环境搭建 - 振华 - ITeye技术网站.htm》这篇文档可能详细介绍了如何在项目中整合iBATIS和Spring框架。iBATIS和Spring的集成是企业级应用开发中常见的组合,因为Spring提供了全面的依赖注入和...

    spring3.2与Ibatis整合

    Spring 3.2 与 iBatis 的整合是Java企业级开发中常见的一种技术组合,它结合了Spring的依赖注入和事务管理能力以及iBatis的SQL映射框架的灵活性。这种整合允许开发者将业务逻辑与数据访问层解耦,提高了代码的可维护...

    spring-ibatis

    spring-ibatis 整合 springmvc 配置: &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc=...

    ibatis spring struts 整合案例

    在这个特定的案例中,我们关注的是"Ibatis Spring Struts"的整合。这三个框架分别是:Ibatis(一个轻量级的持久层框架),Spring(一个全面的企业级应用开发框架),以及Struts(一个用于构建MVC(Model-View-...

    Eclipse Spring3.x集成ibatis2.x开发案例

    标题 "Eclipse Spring3.x集成ibatis2.x开发案例" 提供了我们即将探讨的核心内容:如何在Eclipse环境中利用Spring3.x版本与iBatis2.x版本进行整合开发。这个主题涵盖了Java企业级开发中的两个重要框架,Spring作为...

    ibatis 与spring3整合

    整合Ibatis 和 Spring 的主要目标是利用Spring的管理能力,将Ibatis的SqlSessionFactory和SqlSessionTemplate等组件纳入到Spring的上下文中,实现事务管理和对象的生命周期管理。以下是一些关键步骤: 1. **添加...

    Ibatis和Spring整合例子,实现增删改查功能

    Ibatis和Spring整合例子,实现增删改查功能.

Global site tag (gtag.js) - Google Analytics