iBatis学习心得

本文详细介绍了如何使用iBatis进行数据插入,包括Oracle的SEQUENCE示例和MS-SQL的处理方式。同时,讨论了resultMap在处理嵌套查询和存储过程中的应用,以及SqlMapClientTemplate在事务管理和批量操作中的作用。文章还展示了如何在Spring中注入SqlMapClientTemplate,以实现更高效的数据访问逻辑。
摘要由CSDN通过智能技术生成
Notice:
1) 在Spring配置文件中,一定要为SqlMapClientFactoryBean配置DataSource属性。
    另外经过测试,DAO不需要配置dataSoure。
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
    <!-- 此处应注入ibatis配置文件,而非sqlMap文件,否则会出现“there is no statement.....异常” -->
    <property name="configLocation">
        <value>classpath:sql_resources/SqlMapConfig.xml</value>
        <!-- <value>WEB-INF/classes/sql_resources/SqlMapConfig.xml</value>
-->
    </property>
     <!-- 一定要配置DataSource,否则会出现“NullPointerException” -->
    <property name="dataSource" ref="dataSource" />
</bean>

2) <![CDATA[……]]>
通过<![CDATA[……]]>节点,可以避免SQL 中与XML 规范相冲突的字符对XML映射文件的合法性造成影响。

3) $#获取值的方式是一样的,只是$获取是对应参数的值,#会根据不同类型而生产字符串。
如 String 类型 : aa ---> 'aa', 将获取的值加上引号,变为字符串类型。
所以,一般用$来获取表名,列名,构造sql;而用#获取要插入的值,适合传值。
#方式能够很大程度防止sql注入。$方式无法防止sql注入,一般能用#的就别用$.

<insert id="customPO_insert" parameterClass="customPO">
    INSERT INTO $moduleTable$ (parentID
    <iterate property="fieldValueList" prepend="," conjunction=",">  --fieldValueList是customPO一属性
        $fieldValueList[].key$   --循环fieldValueList[]这个数组,因为此数组每个对象是map,可获得map的key.
    </iterate>
    )
    VALUES (#parentID#
    <iterate property="fieldValueList" prepend="," conjunction=",">
        #fieldValueList[].value#
    </iterate>
    )
    <selectKey resultClass="int" keyProperty="parentID">
        SELECT last_insert_id()
    </selectKey>
</insert>


4) 很多数据库支持自动生成主键的数据类型。不过这通常(并不总是)是个私有的特性。 SQL Map 通过 <insert></insert> 的子元素 <selectkey></selectkey> 来支持自动生成的键值。它同时支持预生成(如 Oracle )和后生成两种类型(如 MS-SQL Server )。下面是两个例子:
  1. < !—Oracle SEQUENCE Example -->   
  2. <insert id="insertProduct-ORACLE" parameterClass="com.domain.Product">   
  3.    <selectKey resultClass="int" keyProperty="id" >   
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值