`
zxw882011_98
  • 浏览: 10405 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

ibatis-Spring 整合

阅读更多
郑重声明,该内容是复制自该网址http://www.blogjava.net/baizhihui19870626/articles/378330.html因为是对我自己很有用的,怕时间久了该网址不能访问,所以特此做了保存,以便日后学习

这两天一直在研究ibatis与spring的整合 一个小小的demo搞的我头晕目眩的,但程序一旦跑起来了,突然有一种豁然开朗,重见天日,感觉生活很美好的感觉!,也许,这就是那一行行的代码带给我们的不同享受吧。呵呵,废话就不多说了。

在此先引用几句别人的资料。。。

Spring通过DAO模式,提供了对iBATIS的良好支持。SqlMapClient对象是iBATIS中的主要对象,我们可以通过配置让spring来管理SqlMapClient对象的创建。

与hibernate类似,Spring提供了SqlMapClientDaoSupport对象,我们的DAO可以继承这个类,通过它所提供的SqlMapClientTemplate对象来操纵数据库。看起来这些概念都与hibernate类似。

通过SqlMapClientTemplate来操纵数据库的CRUD是没有问题的。此篇文章没有进行事务处理。

本文采用ibatis+spring+mysql 进行编写

数据库脚本如下
[sql] view plaincopy

    create database ibatis; 
     
    create table person( 
      id int primary key, 
      name varchar(10), 
      sex int 
    ); 
      




一:要有一个PO类

   Person.java
[java] view plaincopy

    package po; 
     
    import java.io.Serializable; 
     
    public class Person implements Serializable{ 
        /**
         * 
         */ 
        private static final long serialVersionUID = -517413165963030507L; 
        /**
         * 
         */ 
        private int id; 
        private String name; 
        private int sex; 
         
        public Person(){ 
             
        } 
        public Person(int id,String name,int sex){ 
            this.id = id; 
            this.name = name; 
            this.sex = sex; 
        } 
        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 getSex() { 
            return sex; 
        } 
        public void setSex(int sex) { 
            this.sex = sex; 
        } 
         
    } 


二:DAO接口类

    IAction.java
[java] view plaincopy

    package dao; 
     
    import java.util.List; 
     
    import po.Person; 
     
    public interface IAction { 
        public boolean insertPerson(Person person);   //添加 
        public boolean deleteById(int id);            //删除 
        public boolean updatePerson(Person person);    //修改 
        public Person queryById(int id);              //根据ID查询 
        public List<Person> queryAllPerson();         //查询全部 
    } 



三:DAO实现类
  

   ActionImpl.java 此类继承SqlMapClientSupport 实现IAction接口
[java] view plaincopy

    package dao.impl; 
     
    import java.io.IOException; 
    import java.io.Reader; 
    import java.sql.SQLException; 
    import java.util.List; 
     
    import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport; 
     
    import com.ibatis.common.resources.Resources; 
    import com.ibatis.sqlmap.client.SqlMapClient; 
    import com.ibatis.sqlmap.client.SqlMapClientBuilder; 
    import com.ibatis.sqlmap.client.SqlMapSession; 
     
    import po.Person; 
    import dao.IAction; 
     
    public class ActionImpl extends SqlMapClientDaoSupport implements IAction { 
     
        //添加操作 
        @Override 
        public boolean insertPerson(Person person) { 
            // TODO Auto-generated method stub 
            getSqlMapClientTemplate().insert("insertPerson",person); 
            return false; 
        } 
         
        //删除操作 
        @Override 
        public boolean deleteById(int id) { 
            // TODO Auto-generated method stub 
            getSqlMapClientTemplate().delete("deleteById", id); 
            return false; 
        } 
     
         
     
        //查询全部 
        @Override 
        public List<Person> queryAllPerson() { 
            // TODO Auto-generated method stub 
            List<Person> persons = getSqlMapClientTemplate().queryForList("queryAllPerson"); 
            return persons; 
        } 
     
        @Override 
        public Person queryById(int id) { 
            // TODO Auto-generated method stub 

[java] view plaincopy

                        //自己添加实现代码 
        return null; 
    } 
     
    @Override 
    public boolean updatePerson(Person person) { 
        // TODO Auto-generated method stub 

[java] view plaincopy

                        //自己添加实现代码 
        return false; 
    } 

四:既然是ibatis spring整合 那就必须要有ibatis的配置文件

  SqlMapConfig.xml


[html] view plaincopy

    <?xml version="1.0" encoding="UTF-8" ?> 
    <!DOCTYPE sqlMapConfig 
    PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" 
    "http://www.ibatis.com/dtd/sql-map-config-2.dtd">  
    <sqlMapConfig> 

[html] view plaincopy

              <!--此处一定不能有<settings/> 标签--> 
        <!--  <settings   cacheModelsEnabled="true" 
                     enhancementEnabled="true" 
                     lazyLoadingEnabled="true" 
                     errorTracingEnabled="true"  
                     maxRequests="32" 
                     maxSessions="10" 
                     maxTransactions="5" 
                     useStatementNamespaces="false" />  --> 
             
        <sqlMap resource="po/Person.xml" /> 
         
    </sqlMapConfig> 

SqlMapClient.xml里本应该有数据源的配置的 使用spring之后数据源的配置移植到了spring上



五:Person.xml

   里面配置了一下对数据的增删改查操作
[html] view plaincopy

    <?xml version="1.0" encoding="UTF-8"?> 
    <!DOCTYPE sqlMap 
    PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN" 
    "http://www.ibatis.com/dtd/sql-map-2.dtd">  
    <sqlMap> 
        <typeAlias alias="person" type="po.Person" /> 
         
        <insert id="insertPerson" parameterClass="po.Person"> 
           <![CDATA[
               insert into person values (#id#,#name#,#sex#)
           ]]> 
        </insert> 
         
        <delete id="deleteById" parameterClass="int"> 
            <![CDATA[
               delete from person where id=#id#
            ]]> 
        </delete> 
         
        <update id="updatePerson" parameterClass="po.Person"> 
             <![CDATA[
                   update person set name=#name#,sex=#sex# where id=#id#
             ]]> 
        </update> 
         
        <select id="queryById" parameterClass="int" resultClass="po.Person"> 
             <![CDATA[
                  select * from person where id=#id#
             ]]> 
        </select> 
         
        <select id="queryAllPerson" cacheModel="personCache" resultClass="po.Person"> 
             <![CDATA[
                   select * from person
             ]]> 
        </select> 
    </sqlMap> 



六:下面最重要的也就是配置applicationContext.xml了

  
[html] view plaincopy

    <?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" 
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 
     
        <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
            <property name="driverClassName" value="com.mysql.jdbc.Driver" /> 
            <property name="url" value="jdbc:mysql://localhost:3306/ibatis" /> 
            <property name="username" value="root" /> 
            <property name="password" value="1" /> 
        </bean> 
     
        <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"> 
            <property name="configLocation">  <!-- name 为configLocation或s  不可为其他 --> 
                <value>SqlMapConfig.xml</value> <!-- 不区分大小写,路径前可加'/' --> 
            </property> 
             
            <!-- dataSource不是必需 --> 
            <property name="dataSource"> 
                <ref local="dataSource" /> 
            </property> 
        </bean> 
     
        <bean id="personDAO" class="dao.impl.ActionImpl"> 
            <!-- dataSource不是必需 --> 
            <property name="dataSource"> 
                <ref local="dataSource" /> 
            </property> 
             
            <!-- sqlMapClient必需 --> 
            <property name="sqlMapClient"> 
                <ref local="sqlMapClient"/> 
            </property>    
        </bean> 
     
        <!-- transactionManager不是必需  --> 
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
            <property name="dataSource"> 
                <ref local="dataSource" /> 
            </property> 
        </bean> 
    </beans> 


注释里面的必需或不是必需都是本人多次试验的,至于为什么是必需不必需 其中的原理我也不是能太讲清楚,在此先是这些写罢了。

里面的每一个节点,属性,如果不太理解,可以上网查一些其他资料。



七:编写测试类

   此类利用junit进行测试。只测试了部分功能。

 
[html] view plaincopy

    package dao.impl; 
     
    import java.util.Iterator; 
    import java.util.List; 
     
    import org.junit.Test; 
    import org.springframework.context.ApplicationContext; 
    import org.springframework.context.support.ClassPathXmlApplicationContext; 
     
    import po.Person; 
     
     
    public class ActionImplTest { 
        private static ApplicationContext applicationContext = null;   //提供静态ApplicationContext 
        static{ 
            applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); //实例化 
        } 
        //添加操作 
        @Test 
        public void testInsertPerson(){ 
            ActionImpl s = (ActionImpl)applicationContext.getBean("personDAO"); 
            s.insertPerson(new Person(1,"zhangsan",2)); 
        } 
         
        //删除操作 
        @Test 
        public void testDeletePerson(){ 
            ActionImpl s = (ActionImpl)applicationContext.getBean("personDAO"); 
            s.deleteById(1); 
        } 
         
        //查询全部 
        @Test 
        public void testQueryAllPerson(){ 
            ActionImpl s = (ActionImpl)applicationContext.getBean("personDAO"); 
            List<Person> persons = s.queryAllPerson(); 
            //System.out.println(persons.size()); 
            Iterator<Person> ite = persons.iterator(); 
            while(ite.hasNext()){ 
                Person person = ite.next(); 
                System.out.print("ID: "+person.getId()); 
                System.out.print(" Name: "+person.getName()); 
                System.out.print(" Sex: "+person.getSex()); 
                System.out.println(); 
            } 
        } 
    } 

八:如需记录日志 则要log4j.properties

  
[html] view plaincopy

    #log4j.rootLogger=DEBUG, stdout 
    #log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
    #log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
    #log4j.appender.stdout.layout.ConversionPattern=%c{1} - %m%n 
    #log4j.logger.java.sql.PreparedStatement=DEBUG 
    log4j.rootLogger=DEBUG, stdout, fileout     
    #log4j.logger.test=info    
    #log4j.logger.org.apache.jasper = DEBUG    
    #log4j.logger.org.apache.catalina.startup.TldConfig = DEBUG    
    #log4j.logger.org.apache.catalina.session.ManagerBase = DEBUG    
       
    log4j.logger.com.fiscal = DEBUG    
    log4j.logger.com.system = DEBUG    
       
    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, fileout     
    log4j.logger.java.sql.ResultSet = DEBUG    
       
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender      
       
    log4j.appender.fileout=org.apache.log4j.RollingFileAppender     
    log4j.appender.fileout.File=C\:\\ibatis.log      
    log4j.appender.fileout.MaxFileSize=10000KB      
       
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout      
    log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} \:%m%n      
    log4j.appender.fileout.layout=org.apache.log4j.PatternLayout      
    log4j.appender.fileout.layout.ConversionPattern=[%-5p]_%d{yyyy-MM-dd HH\:mm\:ss} \:%m%n     
       
    #log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout      
       
    # log4j.logger.org=info    




九:已经到最后了,我觉得这最后的才是最最重要的,就是一下jar包问题

   我调试了很长时间  一大部分时间是jar问题

   在此列出一下我认为能够跑起来这个小程序所需的一下jar包

   如没有,可网上下载。

 
[sql] view plaincopy

    ibaits-2.3.4.jar 
    spring.jar 
    mysql-connector-java-bin.jar 
    commons-dbcp-1.4.jar 
    commons-pool-1.5.6.jar 
    spring-orm-2.5.6.jar //已集成到spring.jar里 
    //记录日志所需 
     log4j-1.2.15.jar 
    commons-logging.jar 




下面是本人的目录结构图




结束语:此文没有过多的讲些原理性的问题,比如为何这样写,又为何这样配置,只是给出了一个搭建框架的架子而已。

        因为我也是一个菜鸟,至于如何,我想,等我们有经验了,会慢慢都懂得。

        还希望大家共同努力,实现自己的梦想。

        希望能与各位共勉!


小白
分享到:
评论

相关推荐

    jbpm4.4 ibatis-spring 整合

    jbpm4.4 ibatis-spring 整合

    ibatis-spring学习

    在iBatis-Spring整合中,Spring可以管理SqlSessionFactory和SqlSessionTemplate,这样我们无需手动创建和关闭SqlSession,降低了资源泄露的风险。同时,Spring的事务管理功能可确保数据操作的原子性和一致性。 整合...

    mybaits-spring(ibatis-spring)-1.0.2-bundle

    《MyBatis-Spring整合详解及1.0.2版本剖析》 MyBatis-Spring是MyBatis和Spring框架的集成库,旨在简化在Spring应用中使用MyBatis的过程,实现两者的无缝连接。本篇文章将深入探讨MyBatis-Spring的核心功能,以及...

    ibatis_spring整合(所需jar包)

    包含ibatsi spring进行整合所需的全部jar包 包括ibatis-xx.jar spring.jar commous-dbcp-1.4.jar commons-pool-2.5.6.jar log4j-xx.jar等等

    iBatis和Spring整合

    iBatis和Spring整合 iBatis和Spring整合

    ibatis与spring整合

    ### ibatis与Spring框架整合详解 #### 一、ibatis简介 ibatis是一个开源的、基于Java的持久层框架,它提供了SQL映射的方式来进行数据库访问。与Hibernate等其他ORM框架相比,ibatis更加轻量级,对于那些只需要简单...

    iBATIS-SqlMaps-2_cn.rar_ibatis/spring

    文档还会深入讲解iBATIS与Spring框架的整合。Spring是一个全面的企业级应用开发框架,它提供了依赖注入(Dependency Injection,DI)和面向切面编程(Aspect-Oriented Programming,AOP)等特性,有助于降低软件组件...

    ibatis-spring

    整合iBATIS与Spring的主要目的是利用Spring的管理能力,如bean的生命周期管理和事务管理,以及其与其他组件(如Spring MVC)的无缝集成,简化应用开发并提高可维护性。 在实际的项目中,Spring与iBATIS的整合通常...

    ibatis_spring源代码

    当我们谈到`iBatis` 和 `Spring` 的整合时,意味着我们可以利用两者的优点,构建一个高效、灵活且易于维护的系统。 整合`iBatis` 和 `Spring` 主要涉及以下几个关键知识点: 1. **数据源配置**:在整合过程中,...

    struts2+ibatis-2.3+spring2.5整合实例

    在"Struts2+ibatis-2.3+spring2.5整合实例"中,我们首先需要设置项目的环境,包括JDK、Maven或Gradle等构建工具,以及Tomcat服务器。然后,创建一个新的Maven或Gradle项目,并在`pom.xml`或`build.gradle`文件中添加...

    Spring-Struts-IBatis-AOP-Transaction

    Struts 2 与 Spring 的整合提供了更强大的功能,例如利用 Spring 的 DI 来管理 Struts 2 的动作类,以及事务管理。 **IBatis 框架** IBatis 是一个持久层框架,它将 SQL 查询与 Java 代码分离,允许开发者编写 SQL...

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

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

    ibatis spring struts 整合案例

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

    Struts2+iBATIS+Spring整合

    Struts2+iBATIS+Spring整合是Java Web开发中一种常见的技术栈组合,这三种框架协同工作,可以构建出高效、灵活的企业级应用。Struts2作为MVC(Model-View-Controller)架构的一部分,主要负责处理HTTP请求,管理前端...

    Struts1+Spring+iBatis-jar包

    Struts1、Spring和iBatis是Java Web开发中经典的三大框架,它们分别负责MVC模式中的控制器、业务逻辑管理和服务层数据访问。这个"Struts1+Spring+iBatis-jar包"集合了这三个框架的核心组件,为开发者提供了一个快速...

    ibatis与spring的整合

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

    flex 整合 spring+struts2+ibatis - 乐的日志 - 网易博客.htm

    flex 整合 spring+struts2+ibatis - 乐的日志 - 网易博客.htm flex 整合 spring+struts2+ibatis - 乐的日志 - 网易博客.htm

    ibatis+spring整合

    "Ibatis+Spring整合"是指将这两个框架集成到同一个项目中,以利用它们的优势互补,实现更高效、更灵活的数据访问层。下面我们将详细探讨这个整合过程中的关键知识点。 首先,集成Ibatis和Spring的第一步是引入相关...

    mybatis-spring-1.0.0中文参考手册

    - 在开始使用MyBatis-Spring整合之前,用户需要具备Spring和MyBatis框架的基本知识以及相关的术语理解。本手册假定读者已经掌握了这两个框架的基本安装和配置方法。 - MyBatis-Spring与MyBatis和Spring 3.0一样,...

    struts和ibatis和spring整合按列

    - Spring可以管理SqlSessionTemplate或SqlSessionDaoSupport,它们是iBatis与Spring整合的关键类,提供数据库操作的方法。 - 将iBatis的Mapper接口定义为Spring的Bean,通过@Autowired注解自动注入到需要的地方。 ...

Global site tag (gtag.js) - Google Analytics