ibatis与spring整合

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

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

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

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

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

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

数据库脚本如下

[sql] view plain copy print ?
  1. create database ibatis;  
  2.   
  3. create table person(  
  4.   id int primary key,  
  5.   name varchar(10),  
  6.   sex int  
  7. );  
  8.    


 

一:要有一个PO类

   Person.java

[java] view plain copy print ?
  1. package po;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class Person implements Serializable{  
  6.     /** 
  7.      *  
  8.      */  
  9.     private static final long serialVersionUID = -517413165963030507L;  
  10.     /** 
  11.      *  
  12.      */  
  13.     private int id;  
  14.     private String name;  
  15.     private int sex;  
  16.       
  17.     public Person(){  
  18.           
  19.     }  
  20.     public Person(int id,String name,int sex){  
  21.         this.id = id;  
  22.         this.name = name;  
  23.         this.sex = sex;  
  24.     }  
  25.     public int getId() {  
  26.         return id;  
  27.     }  
  28.     public void setId(int id) {  
  29.         this.id = id;  
  30.     }  
  31.     public String getName() {  
  32.         return name;  
  33.     }  
  34.     public void setName(String name) {  
  35.         this.name = name;  
  36.     }  
  37.     public int getSex() {  
  38.         return sex;  
  39.     }  
  40.     public void setSex(int sex) {  
  41.         this.sex = sex;  
  42.     }  
  43.       
  44. }  


二:DAO接口类

    IAction.java

[java] view plain copy print ?
  1. package dao;  
  2.   
  3. import java.util.List;  
  4.   
  5. import po.Person;  
  6.   
  7. public interface IAction {  
  8.     public boolean insertPerson(Person person);   //添加   
  9.     public boolean deleteById(int id);            //删除   
  10.     public boolean updatePerson(Person person);    //修改   
  11.     public Person queryById(int id);              //根据ID查询   
  12.     public List<Person> queryAllPerson();         //查询全部   
  13. }  

 

三:DAO实现类
   

   ActionImpl.java 此类继承SqlMapClientSupport 实现IAction接口

[java] view plain copy print ?
  1. package dao.impl;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.Reader;  
  5. import java.sql.SQLException;  
  6. import java.util.List;  
  7.   
  8. import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;  
  9.   
  10. import com.ibatis.common.resources.Resources;  
  11. import com.ibatis.sqlmap.client.SqlMapClient;  
  12. import com.ibatis.sqlmap.client.SqlMapClientBuilder;  
  13. import com.ibatis.sqlmap.client.SqlMapSession;  
  14.   
  15. import po.Person;  
  16. import dao.IAction;  
  17.   
  18. public class ActionImpl extends SqlMapClientDaoSupport implements IAction {  
  19.   
  20.     //添加操作   
  21.     @Override  
  22.     public boolean insertPerson(Person person) {  
  23.         // TODO Auto-generated method stub   
  24.         getSqlMapClientTemplate().insert("insertPerson",person);  
  25.         return false;  
  26.     }  
  27.       
  28.     //删除操作   
  29.     @Override  
  30.     public boolean deleteById(int id) {  
  31.         // TODO Auto-generated method stub   
  32.         getSqlMapClientTemplate().delete("deleteById", id);  
  33.         return false;  
  34.     }  
  35.   
  36.       
  37.   
  38.     //查询全部   
  39.     @Override  
  40.     public List<Person> queryAllPerson() {  
  41.         // TODO Auto-generated method stub   
  42.         List<Person> persons = getSqlMapClientTemplate().queryForList("queryAllPerson");  
  43.         return persons;  
  44.     }  
  45.   
  46.     @Override  
  47.     public Person queryById(int id) {  
  48.         // TODO Auto-generated method stub  
[java] view plain copy print ?
  1.                     //自己添加实现代码   
  2.     return null;  
  3. }  
  4.   
  5. @Override  
  6. public boolean updatePerson(Person person) {  
  7.     // TODO Auto-generated method stub  
[java] view plain copy print ?
  1.                     //自己添加实现代码   
  2.     return false;  
  3. }  

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

  SqlMapConfig.xml

 

[html] view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE sqlMapConfig  
  3. PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"  
  4. "http://www.ibatis.com/dtd/sql-map-config-2.dtd">   
  5. <sqlMapConfig>  
[html] view plain copy print ?
  1.           <!--此处一定不能有<settings/> 标签-->  
  2.     <!--  <settings   cacheModelsEnabled="true"  
  3.                  enhancementEnabled="true"  
  4.                  lazyLoadingEnabled="true"  
  5.                  errorTracingEnabled="true"   
  6.                  maxRequests="32"  
  7.                  maxSessions="10"  
  8.                  maxTransactions="5"  
  9.                  useStatementNamespaces="false" />  -->  
  10.           
  11.     <sqlMap resource="po/Person.xml" />  
  12.       
  13. </sqlMapConfig>  

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

 

五:Person.xml

   里面配置了一下对数据的增删改查操作

[html] view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE sqlMap  
  3. PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"  
  4. "http://www.ibatis.com/dtd/sql-map-2.dtd">   
  5. <sqlMap>  
  6.     <typeAlias alias="person" type="po.Person" />  
  7.       
  8.     <insert id="insertPerson" parameterClass="po.Person">  
  9.        <![CDATA[ 
  10.            insert into person values (#id#,#name#,#sex#) 
  11.        ]]>  
  12.     </insert>  
  13.       
  14.     <delete id="deleteById" parameterClass="int">  
  15.         <![CDATA[ 
  16.            delete from person where id=#id# 
  17.         ]]>  
  18.     </delete>  
  19.       
  20.     <update id="updatePerson" parameterClass="po.Person">  
  21.          <![CDATA[ 
  22.                update person set name=#name#,sex=#sex# where id=#id# 
  23.          ]]>  
  24.     </update>  
  25.       
  26.     <select id="queryById" parameterClass="int" resultClass="po.Person">  
  27.          <![CDATA[ 
  28.               select * from person where id=#id# 
  29.          ]]>  
  30.     </select>  
  31.       
  32.     <select id="queryAllPerson" cacheModel="personCache" resultClass="po.Person">  
  33.          <![CDATA[ 
  34.                select * from person 
  35.          ]]>  
  36.     </select>  
  37. </sqlMap>  



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

   

[html] view plain copy print ?
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
  4.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">  
  5.   
  6.     <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">  
  7.         <property name="driverClassName" value="com.mysql.jdbc.Driver" />  
  8.         <property name="url" value="jdbc:mysql://localhost:3306/ibatis" />  
  9.         <property name="username" value="root" />  
  10.         <property name="password" value="1" />  
  11.     </bean>  
  12.   
  13.     <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">  
  14.         <property name="configLocation">  <!-- name 为configLocation或s  不可为其他 -->  
  15.             <value>SqlMapConfig.xml</value> <!-- 不区分大小写,路径前可加'/' -->  
  16.         </property>  
  17.           
  18.         <!-- dataSource不是必需 -->  
  19.         <property name="dataSource">  
  20.             <ref local="dataSource" />  
  21.         </property>  
  22.     </bean>  
  23.   
  24.     <bean id="personDAO" class="dao.impl.ActionImpl">  
  25.         <!-- dataSource不是必需 -->  
  26.         <property name="dataSource">  
  27.             <ref local="dataSource" />  
  28.         </property>  
  29.           
  30.         <!-- sqlMapClient必需 -->  
  31.         <property name="sqlMapClient">  
  32.             <ref local="sqlMapClient"/>  
  33.         </property>     
  34.     </bean>  
  35.   
  36.     <!-- transactionManager不是必需  -->  
  37.     <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
  38.         <property name="dataSource">  
  39.             <ref local="dataSource" />  
  40.         </property>  
  41.     </bean>  
  42. </beans>  


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

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

 

七:编写测试类

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

  

[html] view plain copy print ?
  1. package dao.impl;  
  2.   
  3. import java.util.Iterator;  
  4. import java.util.List;  
  5.   
  6. import org.junit.Test;  
  7. import org.springframework.context.ApplicationContext;  
  8. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  9.   
  10. import po.Person;  
  11.   
  12.   
  13. public class ActionImplTest {  
  14.     private static ApplicationContext applicationContext = null;   //提供静态ApplicationContext  
  15.     static{  
  16.         applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml"); //实例化  
  17.     }  
  18.     //添加操作  
  19.     @Test  
  20.     public void testInsertPerson(){  
  21.         ActionImpl s = (ActionImpl)applicationContext.getBean("personDAO");  
  22.         s.insertPerson(new Person(1,"zhangsan",2));  
  23.     }  
  24.       
  25.     //删除操作  
  26.     @Test  
  27.     public void testDeletePerson(){  
  28.         ActionImpl s = (ActionImpl)applicationContext.getBean("personDAO");  
  29.         s.deleteById(1);  
  30.     }  
  31.       
  32.     //查询全部  
  33.     @Test  
  34.     public void testQueryAllPerson(){  
  35.         ActionImpl s = (ActionImpl)applicationContext.getBean("personDAO");  
  36.         List<Person> persons = s.queryAllPerson();  
  37.         //System.out.println(persons.size());  
  38.         Iterator<Person> ite = persons.iterator();  
  39.         while(ite.hasNext()){  
  40.             Person person = ite.next();  
  41.             System.out.print("ID: "+person.getId());  
  42.             System.out.print(" Name: "+person.getName());  
  43.             System.out.print(" Sex: "+person.getSex());  
  44.             System.out.println();  
  45.         }  
  46.     }  
  47. }  

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

   

[html] view plain copy print ?
  1. #log4j.rootLogger=DEBUG, stdout  
  2. #log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
  3. #log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
  4. #log4j.appender.stdout.layout.ConversionPattern=%c{1} - %m%n  
  5. #log4j.logger.java.sql.PreparedStatement=DEBUG  
  6. log4j.rootLogger=DEBUG, stdout, fileout      
  7. #log4j.logger.test=info     
  8. #log4j.logger.org.apache.jasper = DEBUG     
  9. #log4j.logger.org.apache.catalina.startup.TldConfig = DEBUG     
  10. #log4j.logger.org.apache.catalina.session.ManagerBase = DEBUG     
  11.     
  12. log4j.logger.com.fiscal = DEBUG     
  13. log4j.logger.com.system = DEBUG     
  14.     
  15. log4j.logger.com.ibatis = DEBUG     
  16. log4j.logger.com.ibatis.common.jdbc.SimpleDataSource = DEBUG     
  17. log4j.logger.com.ibatis.common.jdbc.ScriptRunner = DEBUG     
  18. log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate = DEBUG     
  19. log4j.logger.java.sql.Connection = DEBUG     
  20. log4j.logger.java.sql.Statement = DEBUG     
  21. log4j.logger.java.sql.PreparedStatement = DEBUG, fileout      
  22. log4j.logger.java.sql.ResultSet = DEBUG     
  23.     
  24. log4j.appender.stdout=org.apache.log4j.ConsoleAppender       
  25.     
  26. log4j.appender.fileout=org.apache.log4j.RollingFileAppender      
  27. log4j.appender.fileout.File=C\:\\ibatis.log       
  28. log4j.appender.fileout.MaxFileSize=10000KB       
  29.     
  30. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout       
  31. log4j.appender.stdout.layout.ConversionPattern=[%-5p] %d{yyyy-MM-dd HH\:mm\:ss} \:%m%n       
  32. log4j.appender.fileout.layout=org.apache.log4j.PatternLayout       
  33. log4j.appender.fileout.layout.ConversionPattern=[%-5p]_%d{yyyy-MM-dd HH\:mm\:ss} \:%m%n      
  34.     
  35. #log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout       
  36.     
  37. log4j.logger.org=info     


 

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

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

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

   如没有,可网上下载。

  

[sql] view plain copy print ?
  1. ibaits-2.3.4.jar  
  2. spring.jar  
  3. mysql-connector-java-bin.jar  
  4. commons-dbcp-1.4.jar  
  5. commons-pool-1.5.6.jar  
  6. spring-orm-2.5.6.jar //已集成到spring.jar里  
  7. //记录日志所需  
  8.  log4j-1.2.15.jar  
  9. commons-logging.jar  




下面是本人的目录结构图

 


http://chatgpt.dhexx.cn/article/M50UDm81.shtml

相关文章

iBatis--iBatis 是什么?

一.为啥使用iBatis&#xff1f; 在 Hibernate、JPA 这样的一站式对象 / 关系映射&#xff08;O/R Mapping&#xff09;解决方案盛行之前&#xff0c;iBaits 基本是持久层框架的不二选择。即使在持久层框架层出不穷的今天&#xff0c;iBatis 凭借着易学易用、轻巧灵活等特点&am…

iBatis-iBatis基本操作(增删改查)

在上一篇iBatis博客中已介绍了如何配置iBatis环境&#xff0c;这篇博客主要进行介绍一些iBatis的基本操作实现。iBatis的增删改操作都需要操作SqlMap,DAO层Manger,POJO 这几个类来实现。下面分别介绍一下iBatis基本操作的实现: 一.iBatis的添加数据方式 这里介绍两种iBatis添加…

Ibatis与Mybatis的区别—侧重于Ibatis

目录 一、什么是Ibatis&#xff1f; 1、iBatis是一款轻量级的持久化框架 2、iBatis最大的特点是将SQL语句与Java代码分离 3、iBatis具有以下几个关键组成部分&#xff1a; 二、Ibatis与Mybatis的区别 1、基本信息不同 2、开发时间不同 3、配置方法不同 三、Ibatis与My…

ibatis使用方法

转载。怕原地址丢失&#xff0c;备份。。 http://lyb520320.iteye.com/blog/586628 http://lyb520320.iteye.com/blog/586800 iBATIS3.0学习&#xff08;一&#xff09;使用iBATIS3.0完成增删改查 博客分类&#xff1a; iBATIS3 iBATIS Apache Spring SQL JDBC 使用iBATIS3.0完…

IBatis使用浅析

ibatis 历史 Eight years ago in 2002, I created the iBATIS Data Mapper and introduced SQL Mapping as an approach to persistence layer development. Shortly thereafter, I donated the iBATIS name and code to the Apache Software Foundation. The ASF has been th…

IBatis的使用

IBatis的使用 1、IBatis是什么 回顾之前前端访问后端的整个流程&#xff1a; View ------ >Controller --------> Service ---------> DAO ------> 数据库 View :前端jsp/HTML Controller&#xff1a;Servlet/SpringMVC Service &#xff1a;Spring DAO&…

IBatis——初步总结

IBatis是持久层的框架&#xff0c;也就是我们说的Dao层框架&#xff0c;关注数据库操作以及和Java对象之间的关联&#xff0c;我们将这样的框架也称之为ORM&#xff08;Object/Relaction Mapping&#xff09;框架.而这里映射的主要是我们的表和实体&#xff08;bean&#xff09…

XMind导入Markdown(利用Typora导出opml)

安装Xmind XMind 是一款非常实用的商业思维导图软件 首先&#xff0c;安装Xmind并打开。通过"帮助"——>“关于Xmind”&#xff0c;可以获取到当前的版本号为 XMind 8 Update 9 在"文件"——>“导入”&#xff0c;可以看到Xmind支持的导入格式仅有…

推荐一款高效Cpp解析xml工具--RapidXml

解析效率比Xerces DOM 快50-100倍&#xff0c;tinyxml快30-60 &#xff0c;作者自己牛逼哄哄的说这是他所知道的最快的xml解析库了~~ 作者介绍说&#xff1a;" The table below compares speed of RapidXml to some other parsers, and to strlen() function executed on…

C++中rapidxml用法及例子

rapidxml是一个快速的xml库&#xff0c;比tinyxml快了50-100倍。本文给出创建、读取、写入xml的源码。 由于新浪博客不支持文本文件上传&#xff0c;在使用下面代码需要先下载 rapidxml&#xff0c;关于这个库的下载地址为&#xff1a; 官方网站&#xff1a; http://rapidxml.…

C++ Xml解析的效率比较(Qt/TinyXml2/RapidXml/PugiXml)

C Xml解析的效率比较&#xff08;Qt/TinyXml2/RapidXml/PugiXml&#xff09; C Xml解析的效率比较QtTinyXml2RapidXmlPugiXml 问题背景测试环境Qt - QDomDocumentTinyXml-2RapidXmlPugiXml总结 通常我们在一些软件的初始化或者保存配置时都会遇到对XML文件的操作&#xff0c;包…

SlimXml和TinyXml,RapidXml的性能对比

July 18th, 2010 zero Leave a comment Go to comments 前两天有朋友问&#xff0c;我的SlimXml有没有和RapidXml对比过效率&#xff1f;我是第一次听说这个库&#xff0c;更不用说对比效率了&#xff0c;于是上他们网站看了下。 好家伙&#xff0c;居然号称比TinyXml快30&…

RapidXml使用

vs2017 rapidxml-1.13 1 RapidXml使用 1.1 创建xml #include <iostream> #include "rapidxml/rapidxml.hpp" #include "rapidxml/rapidxml_utils.hpp" #include "rapidxml/rapidxml_print.hpp"using namespace rapidxml;void crateXml(…

使用rapidxml解析xml

rapidxml是一个由C模板实现的高效率xml解析库&#xff0c;号称解析速度比tinyxml快50倍&#xff08;忽悠&#xff09;&#xff0c;并作为boost::property的内置解析库&#xff1a; 其独立版本的官网&#xff1a;http://rapidxml.sourceforge.net/ 使用rapidxml的方法tinyxml极其…

RapidXml读取并修改XML文件

RapidXml读取并修改XML文件 RapidXml介绍RapidXml读取与修改xml文件 RapidXml介绍 RapidXml尝试创建最快的XML解析器&#xff0c;同时保留可用性&#xff0c;可移植性和合理的W3C兼容性。它是一个用现代C 编写的原位解析器&#xff0c;解析速度接近strlen在同一数据上执行的函数…

c++开源库rapidxml介绍与示例

官方地址&#xff1a;http://rapidxml.sourceforge.net/ 官方手册&#xff1a;http://rapidxml.sourceforge.net/manual.html 也可以在github上下载到别人上传的rapidxml:https://github.com/dwd/rapidxml 1.头文件 一般我们用到的头文件只有这三个 #include "rapidx…

Ubuntu 18.04 LDAP认证

将ubuntu配置为通过ldap认证&#xff0c;使其成为ldap client&#xff0c;系统版本ubuntu 18.04。 一 软件安装 apt-get install ldap-utils libpam-ldap libnss-ldap nslcd配置1 配置2 配置3 配置4 配置5 配置6 配置7 配置8 配置8 二 认证方式中添加Ldap #auth-client-conf…

LDAP认证服务器

1.要准备的环境与软件(这里测试环境是Centos6.0-64位系统) alfresco-community-4.2.c-installer-linux-x64.bin (注: alfresco是一个免费开源系统&#xff0c;可以自己去下载) apache-tomcat-7.0.42.tar db-4.5.20.tar jdk-6u45-linux-x64.bin openldap-stable-20100219.tar ph…

Jumpserver部署+Ldap认证

内容导航 &#xff08;一&#xff09;jumpserver快速部署1&#xff0c;部署内容2&#xff0c;附上安装脚本3&#xff0c;解决github无法连接4&#xff0c;修改配置 &#xff08;二&#xff09;使用jumpserver1&#xff0c;登录信息2&#xff0c;添加主机3&#xff0c;web终端登…

SVN使用LDAP认证

前言 SVN架构 用户访问SVN服务器分为两个部分&#xff1a;认证与授权。 SVN内置了有认证与授权机制&#xff0c;其认证是通过SVN仓库内的passwd文件提供&#xff0c;但它是明文、静态的&#xff0c;不方便且安全性低。 SVN还支持外部的认证&#xff0c;比如SASL&#xff0c;…