存档

文章标签 ‘iBatis’

iBatis中得到数据库自动生成值的方法

2009年7月10日 marshall 1 条评论

iBatis使用SqlMapClient.insert()执行插入语句,这个方法返回一个Object,代表插入的主键值。但如果想得到这个值,必须在<insert>元素中进行另外的配置。在iBatis中文文档的20页中有提到,也可以直接搜索”selectKey”。

主键值的获取支持两种方式,前获取和后获取,如中文文档中例子写的那样。前获取需要把selectkey元素放在前面,后获取反之。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!--Oracle SEQUENCE Example --> 
<insert id="insertProduct-ORACLE" parameterClass="com.domain.Product"> 
    <selectKey resultClass="int" keyProperty="id" > 
        SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL 
    </selectKey> 
    insert into PRODUCT (PRD_ID,PRD_DESCRIPTION)  values (#id#,#description#) 
</insert> 
 
<!-- Microsoft SQL Server IDENTITY Column Example --> 
<insert id="insertProduct-MS-SQL" parameterClass="com.domain.Product"> 
    insert into PRODUCT (PRD_DESCRIPTION) values (#description#) 
    <selectKey resultClass="int" keyProperty="id" > 
        SELECT @@IDENTITY AS ID 
    </selectKey> 
</insert>

DB2的资料比较少,我试了很多次才搞出来,类似于SQL Server,对于使用了IDENTITY的Column:

1
2
3
4
5
6
<insert id="insertProduct" parameterClass="com.domain.Product">
	INSERT INTO PRODUCT  (PRD_DESCRIPTION) VALUES (#description#)
	<selectKey resultClass="int" keyProperty="id">
		SELECT distinct IDENTITY_VAL_LOCAL()  AS ID FROM PRODUCT 
	</selectKey>
</insert>

keyProperty属性必须对应于SQL语句中SELECT出来的Column Alias,在本例中均为“id”

分类: 技术 标签:

Warning: fsockopen() has been disabled for security reasons in /home/onlymars/public_html/wp/wp-includes/class-snoopy.php on line 1142