最近项目中用到了ibatis,由于之前也没用过,因此也遇见不少问题,现决定把遇见的问题及解决方法列出来(ibatis2)。
1. 显示sql调试信息:
引用
#显示ibatis底层sql语句
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=debug
2.关于resultMap的问题。
<typeAlias alias="user" type="com.User"/>
<resultMap id="userResult" class="user" >
<result column="USER_NAME" property="userName" jdbcType="VARCHAR" />
.............
............
</resultMap>
typeAlias与resultMap不能与其它的sqlmap.xml共享,有时候为了简单,可以这样写:
<!-- 查询 -->
<select id="org_getUser"
resultMap="userResult"
parameterClass="string">
<![CDATA[
select
u.*
from User u where u.USER_ID=#userId#
]]>
</select>
但是这个要求userResult与select查询出来的数据能对应起来,如果select只查询部分字段,就不能再用reulstMap,而要用resultClass="user"。当然也可以用resultMap="hashmap",这个方式的话,要注意map的访问方式,虽然与对象的访问方式一样,如:
<select id="org_getUser"
resultMap="userResult"
parameterClass="string">
<![CDATA[
select
u.USERNAME as UserName,u.USERID as userId
from User u where u.USER_ID=#userId#
]]>
</select>
但实际上存入map的是别名的大写形式,所以在外面访问的时候还是要用:
<c:forEach items="${users}" var="user">
<option value="${user.USERID}" >${user.USERNAME}</option>
</c:forEach>
也就是说,对于map来说,as别名没什么作用,至少在2.3.0.66是这样的。不过在家里面又试了下,结果map里面装的key值就是UserName,而不是USERNAME,还真是有些奇怪,可能小版本间的差异吧。
3.如果查询出来的字段数据需要替换,则先要在先在实体对象中多定义个属性,如gender,在数据库存为1或0,1表示男,0表示女,为了在外面显示男女,需要在User类中定义个genderName,再定义个resultMap,不然其它select * 查数据时也要查出genderName才行。
User类:
private String genderName;
<resultMap id="userResultGenderName" class="org" extends="userResult">
<!-- 下面的列用于显示数字或字母对应显示值,表中并不存在此这些列-->
<result column="GENDERNAME" jdbcType="VARCHAR" property="genderName" />
</resultMap>
<!-- 查询 -->
<select id="org_getUser"
resultMap="userResult"
parameterClass="string">
<![CDATA[
select
u.*,
(case
when ORG_NATURE ='0' then '女'
when ORG_NATURE ='1' then '男'
end) as genderName
from User u where u.USER_ID=#userId#
]]>
</select>
虽然也可以在页面进行判断替换,但那样如果每个页面都需要替换,然后会用jstl判断替换,也比较麻烦。
4.更新的时候最好使用dynamic来设置需要更新的字段:
<update id="updateOrgType" parameterClass="orgType" >
update ORG_TYPE
<dynamic prepend="set" >
<isNotNull prepend="," property="orgTypeCode" >
ORG_TYPE_CODE = #orgTypeCode:VARCHAR#
</isNotNull>
<isNotNull prepend="," property="orgTypeName" >
ORG_TYPE_NAME = #orgTypeName:VARCHAR#
</isNotNull>
</dynamic>
where ORG_TYPE_ID = #orgTypeId:DECIMAL#
</update>
这样如果字段内容为空就不会再更新此字段。
5.关于service、dao层的抽象。crud操作最好是单独提取出来,可以建立四个类,分别是BaseService,BaseServiceImpl,BaseDao,BaseDaoImpl这几个类,有个缺点就是定义的方法要抽象一些,但是这个代价并不大,可以接受。具体细节下次讲。
6.增加数据时最好将ID取出来再赋值,而不是直接使用自动增加的值。在oracle中,可以使用如select sequence from dual,在mysql中使用select last_insert_id()都是可行的,这点很重要,很多时候插入记录时都需要此记录的ID标识。
5.参数列表查询。在查询或删除多个ID数据时会使用where in用法,用法如下:
<select id="select-test" resultMap="MyTableResult" parameterClass="list">
select * from my_table where col_1 in
<iterate open="(" close=")" conjunction=",">
#[]#
</iterate>
</select>
剩下的以后再写。
分享到:
相关推荐
ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西ibatis总结的小东西
总结,Ibatis提供了灵活的SQL映射机制,使得开发人员能够更好地控制SQL的执行。同时,通过与Struts和Spring的整合,可以构建出强大的企业级应用。理解并熟练掌握这些知识点,对于提升Java Web开发的效率和质量至关...
这是关于ibatis 的一些总结, 其中包含ibatis 、hibernate、jdbc三者之间的性能对比,以及ibatis的配置
ibatis优点总结 ibatis优点总结
本文将深入探讨其中一个流行的选择——iBATIS,以及其在传智播客教程中的优点总结。 iBATIS,全称为“互联网应用程序基础工具包”(Internet Basics for Architecture with Transactions and SQL),是由Apache ...
iBATIS2.0是一个基于Java的持久层框架,它主要负责将SQL查询与应用程序的业务逻辑解耦,使得开发者可以更加专注于SQL的编写和优化,而无需关心数据访问的底层细节。iBATIS并不像Hibernate那样是完全的对象关系映射...
09_ibatis教程_ibatis优点总结.zip 09_ibatis教程_ibatis优点总结.zip
### ibatis知识点总结 #### 简介 ibatis是一个开放源代码项目,起初由Clinton Begin在2001年发起。该项目最初关注的是密码软件的开发,但随着时间的发展,逐渐演变成一个基于Java的持久层框架。ibatis在2010年由...
### 总结 ibatis在处理SQL语句时,其灵活性和强大功能也伴随着易犯的错误。确保`parameterClass`和`resultClass`属性与实际参数类型和返回类型相匹配,正确使用动态SQL标签如`<isNotNull>`,并注意`#`和`{}`之间的...
在IT行业中,Ibatis、Oracle...希望这篇总结能为你的学习之路提供有价值的指导,进一步深化你对Ibatis、Oracle和敏捷开发的理解。在IT世界中,持续学习和实践是提升自身能力的关键,祝你在技术探索的道路上越走越远。
【ibatis学习总结】 在Java应用中,ORM(对象关系映射)框架是连接数据库与业务逻辑的关键。相比像Hibernate和Apache OJB这样的"一站式"ORM解决方案,iBATIS提供了一种更为灵活的"半自动化"策略。iBATIS允许开发者...
本文档旨在对iBATIS的学习进行深入的总结,帮助初学者快速上手。 一、iBATIS概述 iBATIS的核心理念是“SQL Map”,它将SQL与Java代码分离,通过XML配置文件或注解来定义SQL语句,实现了数据访问层的灵活定制。这...
iBatis.net是一个轻量级的持久层框架,它提供了灵活的数据访问机制,与ORM(对象关系映射)框架相比,具有更高的定制性和性能。在本文中,我们将深入探讨iBatis.net的使用,主要涉及以下几个核心部分: 1. **配置...
### ibatis技术总结 #### 1. 创建iBatis工程的步骤 在开始构建一个基于iBatis的应用之前,需要遵循一系列明确的步骤来确保项目的顺利进行: 1. **建立数据库**:首先需要设计并创建数据库,这一步骤至关重要,...
### ibatis的技术总结 #### 一、创建iBatis工程的步骤 1. **建立数据库:** 首先需要创建一个数据库,用于存放应用程序的数据。数据库的选择可以根据具体的应用需求来决定,例如MySQL、Oracle等。 2. **创建工程...
总结起来,iBATIS是一个强大且灵活的持久化框架,它的主要优点在于将SQL语句的控制权交给开发者,同时提供了代码简化和维护性的提升。对于那些希望在ORM框架中保留更多数据库操作控制权的开发者来说,iBATIS是一个...
"iBATIS学习总结 - 郭睿的专栏 - CSDN.NET_files"和"iBATIS与Spring集成及环境搭建 - 振华 - ITeye技术网站_files"可能是相关文章的图片或辅助资源。 通过这些资料,开发者可以系统地学习和掌握iBATIS 2.x版本的...
### 四、总结 通过上述内容,我们可以了解到Ibatis3的基本工作原理及其配置方式。Ibatis3以其灵活性和高效性在众多ORM框架中脱颖而出,特别适合那些对SQL查询有特殊需求或者需要精细化控制的应用场景。希望本文能够...
总结来说,Ibatis 是一个高效、灵活的 ORM(对象关系映射)框架,它让开发者能够更专注于业务逻辑,而不是繁琐的 JDBC 代码。通过学习 Ibatis,开发者可以更好地理解和掌握数据访问层的设计与实现,提升开发效率。...