Ibatis使用

article/2025/9/13 5:30:57

部分参考:https://blog.csdn.net/shixiaoguo90/article/details/49949445

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

 

使用Ibatis的步骤:

1、Dao层(实现层)继承SqlMapClientDaoSupport

Dao层(实现层)继承SpringFramework中提供的 SqlMapClientDaoSupport

// 其中TestDAO是自己业务中定义的接口
public class IbatisTestDAO extends SqlMapClientDaoSupport implements TestDAO @Overridepublic List<TestDO> getList(TestDO testDO) {return getSqlMapClientTemplate().queryForList("testsss.select",testDO);}.....
}

 

2、Dao层定义成bean

将上​面的Dao层方法定义成bean

 <bean id="xxxxxDAO"class="com.alipay.xxxxx.common.dal.xxxx.order.ibatis.IbatisScenicTicketDAO"parent="orderBaseDao"/>

其中parent是数据库连接的通用配置,从代码复用性的角度考虑,将通用的部分写成独立的一块。下面是和parent先关:

3、数据库连接配置(SqlMapClientFactoryBean 的装配)

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

  <!-- 订单datasource --><bean id="orderDataSource" class="com.alipay.zdal.client.jdbc.ZdalDataSource"init-method="init" destroy-method="close"><property name="appName" value="bstsoldb"/><property name="appDataSourceName" value="bstsoldb_order"/><property name="version" value="${config_version}"/></bean><!--指定xml文件的位置--><bean id="orderSqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"><property name="dataSource" ref="orderDataSource"/><property name="configLocations"><list><value>classpath:sqlmap/xxxxx/order/*.xml</value></list></property></bean><bean id="orderBaseDao" abstract="true"><property name="dataSource" ref="orderDataSource"/><property name="sqlMapClient" ref="orderSqlMapClient"/></bean>

如何没有提炼出parent, 书写风格如下:

 <bean id="xxxxxDAO"class="com.alipay.xxxxx.common.dal.xxxxx.order.ibatis.IbatisScenicTicketDAO"><!-- iBatis sqlmap config 文件位置 --><property name="configLocation" value="classpath:sqlmap/xxxxx/order/*.xml"/><!-- 在SpringFramework配置文件中使用的数据源 --><property name="dataSource" ref="orderDataSource"/>
</bean>

 

4、SqlMapClientTemplate API

getSqlMapClientTemplate()的主要API:

image.png

 

4.1 使用SqlMapClientTemplate查询

重要:如果查询的结果是List, 不能使用queryForObject在把结果转回List

 

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

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.2 使用SqlMapClientTemplate添加数据

Java代码:

ObjectA objA = new ObjectA();

objA.setParam1("test1");

objA.setParam2("test2");

......

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

 

4.3 使用SqlMapClientTemplate更新数据

Java代码:

ObjectA objA = new ObjectA();

objA.setParam1("test1");

objA.setParam2("test2");

......

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

更新前20条记录:

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

 

4.4 使用SqlMapClientTemplate删除数据

Java代码:

Long id = new Long("2");

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

 

5、数据库事务实现

事务模板需要配置到某个具体的数据库上,如果一个系统中涉及多个数据库,要特别注意事务模板是否和需要的数据库是对应的。

  <!--事务模板 --><bean id="bsTransactionTemplate" class="com.alipay.xxxx.common.dal.common.transaction.BsTransactionTemplateImpl"><property name="innerTransactionTemplate"><bean class="org.springframework.transaction.support.TransactionTemplate"><property name="transactionManager"><bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><!--对应配置的dataSource--><property name="dataSource" ref="orderDataSource"/></bean></property></bean></property></bean><!--将自己配置的bean发布为服务--><sofa:service ref="bsTransactionTemplate" interface="com.alipay.xxxx.common.dal.common.transaction.BsTransactionTemplate" />
public class BsTransactionTemplateImpl implements BsTransactionTemplate {// 内部使用的事务模板private TransactionOperations innerTransactionTemplate;@Overridepublic <T> T execute(TransactionCallback<T> action) throws TransactionException {return innerTransactionTemplate.execute(action);}/*** Setter method for property <tt>innerTransactionTemplate</tt>.** @param innerTransactionTemplate value to be assigned to property innerTransactionTemplate*/public void setInnerTransactionTemplate(TransactionOperations innerTransactionTemplate) {this.innerTransactionTemplate = innerTransactionTemplate;}
}------------------
import org.springframework.transaction.support.TransactionOperations;    
public interface BsTransactionTemplate extends TransactionOperations {}

 

在需要使用事务的类中,引入发布的服务 bsTransactionTemplate 就可以了。

 

 


http://chatgpt.dhexx.cn/article/6r0IY7uf.shtml

相关文章

iBatis-iBatis配置环境(eclipse+mysql)

在使用JAVA框架前要配置其环境&#xff0c;比如使用Hibernate、Struts等都需要对其环境进行配置&#xff0c;当然使用iBatis开发之前&#xff0c;也需要配置iBatis环境。 一、iBatis环境的配置只需三步 1.引入jar包 2.配置sqlMapConfig.xml文件 3.配置SqlMap.xml文件 二、概览i…

什么是IBatis

什么是IBatis 我一直想写一篇关于持久化数据访问的文章&#xff0c;可是我不知道怎么开始介绍&#xff0c;前两天晚上睡觉的时候突然有了一些开始写的想法&#xff0c;所以我决定今天动手开始写一点东西。头一次写这样的文章&#xff0c;希望大家不要见怪。 现在网上很多人学习…

ibatis-Spring 整合

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

ibatis与spring整合

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

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…