当前位置:首页 > 图片 > 国际图片 > 正文
文章正文

ibatis动态sql

图片 > 国际图片 > :ibatis动态sql 是由美文导刊网(www.eorder.net.cn)为您精心收集,如果觉得好,请把这篇文章复制到您的博客或告诉您的朋友,以下是ibatis动态sql 的正文:


一.ibatis 动态sql if else标签怎么用

select id="findUser" resultClass="User">
SELECT * User
<dynamic 旦功测嘉爻黄诧萎超联prepend="WHERE ">
<isNull property="id">
id IS NULL
</isNull>
<isNotNull property="id">
id = #id#
</isNotNull>
</dynamic>
</select>

ibatis的动态标签分为一元条件元素标签和二元条件元素标签:

一元条件元素

<isPropertyAvailable>

检查是否存在该属性(存在parameter bean的属性)。

<isNotPropertyAvailable>

检查是否不存在该属性(不存在param


二.如何生成ibatis 动态sql

IBATIS:最大的优点是可以有效的控制sql发送的数目,提高数据层的执行效率!好象阿里巴巴现在就用的是IBATIS;它需要程序员自己去写sql 语句,不想hibernate那样是完全面向对象的,自动化的,ibatis是半自动化的,通过表和对象的映射以及手工书写的sql语句,能够实现比 hibernate等更高的查询效率。

给个文章你参考下:

1.优点

简单:
易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。

实用:
提供了数据映射功能,提供了对底层数据访问的封装(例如ado.net),提供了DAO框架,可以使我们更容易的开发和配置我们的DAL层。灵活:
通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。功能完整:
提供了连接管理,缓存支持,线程支持,(分布式)事物管理,通过配置作关系对象映射等数据访问层需要解决的问题。提碃锭百瓜知盖版睡保精供了DAO支持,并在DAO框架中封装了ADO.NET,NHibernate和DataMapper。增强系统的可维护性:
通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。
2.缺点

滞后性:
还没有明确对.NET2.0的支持。最新版本在2.0下编译可以,但有些单元测试不能通过。
不成熟,工程实践较少:
IbatisNet在实际项目中的使用较少。 只是理论上可行.
半ORM,工具支持较少:
需要我们自己写sql,并且.NET下还未发现可以自动生成业务层类和配置文件的工具,这点和NHibernate不一样,NHibernate会为我们的数据库直接产生sql,并有一些辅助工具。因此使用Ibatis比NHibernate要多做一些工作。
3.可行性

没有最好的框架,只有最适合的框架。存在的便是合理的,它存在就说明有它存在的道理。但它未必为我们存在。所以选择一个框架最主要的是看它对你有没有意义,意义有多大,是不是比其他框架带给你的好处要多。没有绝对的优点也没有绝对的缺点,重要的是看在什么情况下讨论。上面说了部分的Ibatis的优点和部分缺点。这些优点从理论上证明Ibatis对任何数据持久层都合适,但未必是最好的选择。下面对上面的优缺点分别从两方面讨论。简单:我们都喜欢简单,简单意味着学习成本低,使用中出错的可能性低。同时,简单的东西一般来说功能不够强大。反过来,复杂的东西学习成本高,用起来不方便,并且团队没有很强的技术实力,一般不要使用。实用:
解决了项目中需要解决的问题,这是任何实际工程中采用的框架和工具都应具有的性质,否则就不要拿到实际项目中来。灵活:灵活有两层意思,一种是简单易扩展,另一种是功能强大提供了很多选项。Ibatis属于前者,Hibernate属于后者。两者各有优缺点。功能完整: Ibatis的功能完整也是相对的,比我们自己开发的框架应该完整,但对比其他框架肯定也有一些解决不了的问题。增强系统的可维护性:利用Ibatis可以做到sql和代码分离,可以设计出一个清晰的数据访问层(DAL)。但项目架构是否科学合理,是否以维护,关键不在Ibatis,因为它只是一个数据层框架。但是我们也不得不清楚,要想发挥Ibatis的优势,我们需要做一些额外工作,比如最好设计DAO接口,需要将业务层实体和对实体的访问放在不同的工程中,同时需要维护xml配置文件。滞后性: Ibatis组现在还没有提到要支持.NET2.0,很多人在.NET2.0下使......余下全文>> (ibatis动态sql)


三.iBatis的SqlMap中,我写的这条动态SQL语句,将表名当做参数动态传递,报“表名无效”错误。

表名称需要使用“$”而不是“#”(ibatis动态sql)


四.ibatis可以动态注入sql吗

<typeAlias alias="author" type="com.ibatis.Author"/>

<resultMap id="authorResult" class="author">
<result property="id" column="ID"/>
<result property="name" column="NAME"/>
<result property="address" column="ADDRESS"/&g尝敞佰缎脂等拌劝饱滑t;
<result property="gender" column="GENDER"/>
<result property="age" column="AGE"/>
</resultMap>

<select id="getAllAuthor" resultMap="accountResult" >
select $fieldname$ from author
</select>

再检查com.ibatis.Author是否属性都对应上了。


五.ibatis动态传入SQL语句的问题

用ibatis的拦截器试试,在加载sqlxml时,处理掉自定义标识,再替换成他本身的#和$标识符



六.ibatis映射文件中的<dynamic>节点是作什么用的呀?

请参考下面的文章 比较全
参考资料:Tz_Sword  2011-8-16


七.如何使用ibatis实现where条件中字段的动态拼装

<select id="load" resultMap="table1Result">
SELECT $param1$,$param2$ FROM table1
</select>

Java代码
queryForList("load" , map);

然后通过map传进去,请参考<Ibatis in action> 123页
和 <Ibatis-SqlMaps-2_en > 27页

makeitjoy.iteye.com/blog发揣篡废诂肚磋莎单极/244225


八.iBATIS的动态SQL是否影响效率?

会, 但是微乎其微, 只是拼串和判断的时间而已


九.ibatis动态ispropertyavailable是什么意思(ibatis动态sql)

isPropertyAvailable和isNotEmpty 这个两个属性非常有用 isPropertyAvailable:入参有这个属担绩曹啃丨救查寻肠默性 isNotEmpty:入参的这个属性不为空 入参一般是一个封装了数据的DTO 如果希望一个属性无论为何值都符合条件则使用isPropertyAvailable

ibatis动态sql 由美文导刊网(www.eorder.net.cn)收集整理,转载请注明出处!原文地址http://www.eorder.net.cn/pic52328/

文章评论
Copyright © 2006 - 2016 www.eorder.net.cn All Rights Reserved
美文导刊网 版权所有