`
friendsys
  • 浏览: 352625 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

ibatis杂集

阅读更多
基础配置文件为SqlMapConfig.xml,其中和Spring整合后,部分配置可以由spring托管
主要可用的元素为:
1:typeAlias 别名,用于缩短后续xml中的配置的类名
<typeAlias alias="order" type="testdomain.Order"/>
2:sqlMap 用于配置所有的子xml映射文件
<sqlMap resource="examples/sqlmap/maps/Person.xml" />
3:properties元素 用于加载资源文件,类似spring,使用${driver}进行获取值,也可以使用url属性获取本地其他目录的xml文件
<properties resource=" examples/sqlmap/maps/SqlMapConfigExample.properties " />

sqlMap配置文件

主要配置是相关的parameterClass resultClass属性,或者对应的<parameterMap> <resultMap>,同样也可以使用<typeAlias alias>缩短使用
的类名,注意使用的id名称是全局唯一的
其他的还包括缓存配置

配置xml标签介绍
<statement>: 通用声明,使用任何CRUD类型的SQL语句 .其中主要的子标签如下<insert><update><delete><select>还包括动态的

<procedure>

最关键的还是sql语句,只要jdbc支持,并不依赖ibtais里面特殊的语法,这点区别于hibernate,在xml中进行编写时,也可以使用<![CDATA[]]>
进行特殊字符过滤

主键的生成,主要还是依赖数据库的不同,可以使用<selectKey>在Oracle中加载序列预生成,其中注意
<selectKey resultClass="int" keyProperty="id" > keyProperty为后续中所使用的变量名,在该标签中编写SQl语句
SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL

存储过程的调用,使用<procedure>元素,具体需要参考不同SQL的CallableStatement文档

<parameterMap id="swapParameters" class="map" >
<parameter property="email1" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
<parameter property="email2" jdbcType="VARCHAR" javaType="java.lang.String" mode="INOUT"/>
</parameterMap>
<procedure id="swapEmailAddresses" parameterMap="swapParameters" >
{call swap_email_address (?, ?)}
</procedure>

parameterClass属性与parameterMap作用基本一致,前者使用Java类型,后者使用xml中的<parameterMap>配置映射,需要注意指定java类型需

要有对用的get/set方法用于访问属性

resultClass属性与resultMap,类型上面的parameters,用于参数的返回封装,主要根据Sql结果集的列名进行转换,根据文档描述,使用

resultMap性能和可操作性会更好一些

resultClass="xml" xmlResultName=”person” 用于生成对应的xml文件 person为xml主节点,子标签根据sql的列名生成

详细介绍parameters和results
其中parameterMap并不常用,可以使用parameterClass
在Sql中,设置内嵌参数,其中-999999用于设置默认值,
(#id:NUMERIC:-999999#, #description:VARCHAR:NO_ENTRY#);

使用Java基本类型时,需要使用#value#获取值,如:
<statement id=”insertProduct” parameter=”java.lang.Integer”>
select * from PRODUCT where PRD_ID = #value#
</statement>
也可以使用int代替java.lang.Integer

Map类型的输入参数,可以用“map”来代替“java.util.Map" SQl中获取时,可以直接获取#key#

ResultMap. 使用ResultClass时,有可能性能会稍微差一些

使用基本类型的值获取: 也是依据别名,常用的value或val
<statement id=”getProductCount” resultClass=”java.lang.Integer”>
select count(1) as value from PRODUCT
</statement>

Map类型的Result,只要设置resultClass=”java.util.HashMap”
<statement id=”getProductCount” resultClass=”java.util.HashMap”>
select * from PRODUCT
</statement>


可以通过配置<resultMap>与statement中的resultMap属性,建立链式的Sql联合查询,....可能是2条Sql
<resultMap id=”get-product-result” class=”com.ibatis.example.Product”>
<result property=”category” column=”PRD_CAT_ID” select=”getCategory”/>
</resultMap>
<resultMap id=”get-category-result” class=”com.ibatis.example.Category”>
...
</resultMap>

<statement id=”getProduct” parameterClass=”int” resultMap=”get-product-result”>
select * from PRODUCT where PRD_ID = #value#
</statement>

<statement id=”getCategory” parameterClass=”int” resultMap=”get-category-result”>
select * from CATEGORY where CAT_ID = #value#
</statement>

id---resultMap--<result property="category" column=”PRD_CAT_ID” select=”getCategory”>-->id-->

这种方法都会执行2个SQL语句,容易发生N+1,最好使用SQL联合查询进行

查询的优化:
基本的原则是,如果您需要访问相关的对象,则使用联合查询。否则,使用延迟加载和字节码增强选项的子查询。

如果要缓存查询结果,则使用子查询(而不是联合查询)来缓存查询结果。

建议不要使用java.sql.Date,最好使用java.util.Date代替。

iBATIS是面向对象,所以基本类型并不能直接使用,需要使用对应的封装类

动态Mapped Statement 动态SQL配置

<isGreaterThan> 子标签: 进行条件判断,生成不同的SQL语句
<select id="dynamicGetAccountList" cacheModel="account-cache" resultMap="account-result" >
select * from ACCOUNT
<isGreaterThan prepend="and" property="id" compareValue="0">
where ACC_ID = #id#
</isGreaterThan>
order by ACC_LAST_NAME
</select>

如果传入的id>0 : select * from ACCOUNT where ACC_ID = ?
如果传入的id<0 : select * from ACCOUNT

<isNotNull> 子标签,判断非空情况
<isNotNull prepend="AND" property="firstName">
(ACC_FIRST_NAME = #firstName#
<isNotNull prepend="OR" property="lastName">
ACC_LAST_NAME = #lastName#
</isNotNull>
)
</isNotNull>

<dynamic prepend="where"> 用在上诉条件标签中,会自动判断添加不符合时,不进行条件
<statement id="someName" resultMap="account-result" >
select * from ACCOUNT
<dynamic prepend="where">
<isGreaterThan prepend="and" property="id" compareValue="0">
ACC_ID = #id#
</isGreaterThan>
<isNotNull prepend=”and" property="lastName">
ACC_LAST_NAME = #lastName#
</isNotNull>
</dynamic>
order by ACC_LAST_NAME
</statement>

常见的二元条件元素: 比将一个属性值和一个静态值或另一个属性值比较,如果条件为“真”,元素体的内容将被包括在查询SQL语句中
<isEqual><isNotEqual><isGreaterThan><isGreaterEqual><isLessThan><isLessEqual>

常见的一元条件元素:一元条件元素检查属性的状态是否符合特定的条件
<isPropertyAvailable><isNotPropertyAvailable><isNull><isNotNull><isEmpty><isNotEmpty>
Available: 为属性是否存在

其他元素:这些元素检查参数对象是否存在,区别上面,是判断对象是否存在,而不是对象的属性
<isParameterPresent><isNotParameterPresent>

Iterate 集合的遍历,常用于读取List集合中的元素
<iterate prepend=”AND” property=”userNameList” open=”(” close=”)” conjunction=”OR”>
username=#userNameList[]#
</iterate>
常见的属性
open - 整个遍历内容体开始的字符串,用于定义括号(可选)
close -整个遍历内容体结束的字符串,用于定义括号(可选)
conjunction - 每次遍历内容之间的字符串,用于定义AND或OR(可选)

使用的时候需要注意代表List参数的[] 是必须的,用于标识为List

简单的动态SQL元素: 使用$$进行SQL字符串拼接

对于 <insert> <update> <delete> 在调用方法时,会自动根据Jdbc返回影响的结果

可以使用RowHandler 对iBATIS每行查询的时候,对每个结果进行处理

queryForPaginatedList()方法常用于分页


可以使用sqlMapClient.startBatch(); 执行批处理指令,注意数据并不会被马上进行提交,
sqlMapClient.executeBatch();用于提交批处理,但是更推荐使用存储过程来代替

调用存储过程的语法
{ call max_in_example(?, ?) }
当然也可以直接简化成
max_in_example(?, ?)

注:这里的? 由ParameterMap配置的顺序而成

一些iBATIS使用技巧:

XML参数:
可以在iBATIS中直接传入xml文件:xml:<parameter><accountId>3</accountId></parameter>
<select id="getByXmlId" resultClass="Account" parameterClass="xml">...
引用参数一样可以使用##获取值

XML返回结果:
<select id="getByIdValueXml" resultClass="xml" xmlResultName="account">
这里的account将会生成为xml的root节点,返回的结果将会封装成对应的子节点

调用的时候使用sqlMap.queryForObject方法,结果集将会是一个字符串,如果返回多个结果,需要进行特殊的处理,可以交给其他的xml类库进

行处理

使用resultMap可以建立同时对一个对象的外键查询方式,不过很有可能造成N+1的情况,按照需求进行编写
<result property="orderList" select="Ch6.getOrderInfoList" column="accountId" />

RowHandler接口,可以用于大规模数据处理中,用于读取后,就销毁该对象
进行查询的时候,也要使用对应的方法sqlMapClient.queryWithRowHandler()方法


















































分享到:
评论

相关推荐

    ibatis总结 ibatis ibatis ibatis ibatis

    Ibatis 是一款轻量级的Java持久层框架,它允许开发者将SQL语句与Java代码分离,从而使得数据库访问更加灵活、易于维护。本篇文章将深入探讨Ibatis的核心概念、最佳实践以及与其他框架如Struts和Spring的整合。 1. ...

    ibatis demo,ibatis例子,ibatis示例

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将SQL语句与Java代码分离,从而更好地管理数据库操作。Ibatis的出现,解决了传统JDBC中手动编写SQL和结果集映射的繁琐工作,...

    ibatis源码,ibatis源码 ibatis源码 ibatis源码

    《深入解析iBatis源码》 iBatis,一个优秀的Java持久层框架,以其轻量级、灵活的特性在众多ORM(Object-Relational Mapping)框架中独树一帜。iBatis的核心在于它的SQL映射机制,它将数据库操作与业务逻辑解耦,...

    iBATIS-DAO-2.3.4.726.rar_com.ibatis.dao_iBATIS dao 2_iBatis DAO_

    iBATIS DAO是Java开发中的一个持久层框架,它提供了数据访问对象(DAO)的实现,使得数据库操作更加简单和灵活。在这个2.3.4.726版本的源码中,我们可以深入理解iBATIS DAO的工作原理,并通过添加注释来帮助我们更好...

    Ibatis入门例子,Ibatis教程

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,使得开发者能够将注意力集中在编写SQL语句上,而无需关注JDBC代码的编写。Ibatis消除了几乎所有的JDBC代码和手动设置参数以及获取结果集的...

    ibatis教程,ibatis帮助文档

    iBATIS是一个由Clinton Begin创建,目前由Apache基金会支持的持久化框架,它专注于数据库查询的简化,尤其在JDBC编程方面提供了极大的便利。相对于全自动化ORM解决方案如Hibernate,iBATIS被称为“半自动化”ORM实现...

    ibatis api,ibatis文档,ibatis说明文档

    Ibatis,全称为MyBatis,是一个优秀的Java持久层框架,它主要负责SQL映射,将数据库操作与业务逻辑解耦,使得开发者可以更专注于业务逻辑的实现,而无需关心繁琐的SQL语句编写。本篇文章将深入探讨Ibatis API、文档...

    Ibatis3手册 Ibatis3参考手册

    ### Ibatis3手册知识点概述 Ibatis3作为一款流行的持久层框架,在软件开发领域具有重要的地位。本篇文章基于“Ibatis3手册 Ibatis3参考手册”的标题及描述,深入解析Ibatis3的核心概念、架构特点以及如何进行实际...

    ibatis应对批量update

    ### ibatis应对批量update 在处理大量数据更新时,传统的for循环方式往往会导致效率低下。这是因为每一次循环都需要执行一次数据库连接操作,对于批量更新来说,这样的处理方式显然不够高效。为了解决这个问题,...

    Spring与iBATIS的集成

    Spring与iBATIS的集成 iBATIS似乎已远离众说纷纭的OR框架之列,通常人们对非常流行的Hibernate情有独钟。但正如Spring A Developer's Notebook作者Bruce Tate 和Justin Gehtland所说的那样,与其他的OR框架相比...

    ibatis api 帮助文档+IBATIS 开发文档

    **IBATIS API 帮助文档与IBATIS开发文档详解** IBATIS,一个由iBATIS公司开发的开源持久层框架,是Java世界中广泛使用的数据访问接口(DAO)工具。它允许开发者将SQL语句直接写在XML配置文件中,实现了SQL与Java...

    iBatis开发指南和一个iBatis实例

    iBatis是一个轻量级的Java持久层框架,它提供了SQL映射框架,将SQL语句与Java代码分离,使得数据库访问更为灵活和可控。在本压缩包中,你将找到一系列关于iBatis的学习资源,包括PDF文档、实例代码等,这些都是深入...

    iBATIS2.3.4 jar包及源码

    iBATIS 是一款著名的开源Java持久层框架,它在2005年由Clinton Begin创建,最初命名为Apache MyBatis,后来发展为独立的项目。在本主题中,我们关注的是iBATIS 2.3.4版本的jar包及其源码。 首先,`ibatis-2.3.4.jar...

    ibatis2指南及ibatis包

    ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南ibatis2指南

    Spring+ibatis 保留ibatis事务的配置

    根据提供的文件信息,本文将详细解析如何在Spring与ibatis框架整合时,通过特定配置来保留ibatis事务处理机制,并实现对事务的自定义控制。文章将围绕标题、描述及部分代码片段展开讨论。 ### Spring与ibatis整合...

    Ibatis 入门经典 实例

    《Ibatis 入门经典 实例》 Ibatis 是一款著名的轻量级 Java 持久层框架,它提供了一种映射 SQL 和 Java 对象的简单方式,从而减轻了开发人员在数据库操作中的工作负担。这篇实例教程将带你深入理解 Ibatis 的核心...

    ibatis乱码解决方法(ibatis独立)

    在IT行业中,数据库操作是必不可少的一部分,而Ibatis作为一款流行的Java持久层框架,它使得SQL与Java代码更好地结合,提供了灵活的数据库操作方式。然而,数据处理时遇到的编码问题,如乱码,常常会给开发者带来...

    C# IBatis IBatis基础 完整项目

    【标题】:“C# IBatis IBatis基础 完整项目” 【描述】中提到的是一个基于C#的IBatis学习项目,适用于初学者。IBatis是一个流行的数据访问层框架,它允许开发者将SQL语句与应用程序代码分离,提高了代码的可维护性...

    iBATIS实战.pdf

    《iBATIS实战》是讲述iBATIS框架的权威著作。书中既详实地介绍了iBATIS的设计理念和基础知识,也讨论了动态SQL、高速缓存、DAD框架等高级主题,还讲解了iBATIS在实际开发中的应用。《iBATIS实战》的最后给出了一个...

    ibatis教程 输入参数详解

    标题:ibatis教程 输入参数详解 描述:ibatis教程 输入参数详解 ibatis快速入门 标签:ibatis list 部分内容:这段部分提供了ibatis用户指南的警告,关于从文档复制代码的问题,以及ibatis的概述、如何开始使用...

Global site tag (gtag.js) - Google Analytics