`
wolf_19
  • 浏览: 164237 次
社区版块
存档分类
最新评论

iBATIS自动生成主键

阅读更多
我们在数据库插入一条数据的时候,经常是需要返回插入这条数据的主键。但是数据库供应商之间生成主键的方式都不一样。

有些是预先生成(pre-generate)主键的,如Oracle和PostgreSQL;有些是事后生成(post-generate)主键的,如MySQL和SQL Server。但是不管是哪种方式,我们都可以用iBATIS的<selectkey>节点来获取<insert>语句所产生的主键。

例子如下:
</insert></selectkey>
xml 代码
 
  1. <!-- Oracle SEQUENCE Example using .NET 1.1 System.Data.OracleClient -->  
  2. <insert id="insertProduct-ORACLE" parameterClass="product">  
  3.     <selectKey resultClass="int" type="pre" keyProperty="id" >  
  4.         SELECT STOCKIDSEQUENCE.NEXTVAL AS VALUE FROM DUAL  
  5.     </selectKey>  
  6.     insert into PRODUCT (PRD_ID,PRD_DESCRIPTION) values (#id#,#description#)  
  7. </insert>  
  8.   
  9. <!-- Microsoft SQL Server IDENTITY Column Example -->  
  10. <insert id="insertProduct-MS-SQL" parameterClass="product">  
  11.     insert into PRODUCT (PRD_DESCRIPTION)  
  12.     values (#description#)  
  13.     <selectKey resultClass="int" type="post" keyProperty="id" >  
  14.         select @@IDENTITY as value  
  15.     </selectKey>  
  16. </insert>  
  17.   
  18. <!-- MySQL Example -->  
  19. <insert id="insertProduct-MYSQL" parameterClass="product">  
  20.     insert into PRODUCT (PRD_DESCRIPTION)  
  21.     values (#description#)  
  22.     <selectKey resultClass="int" type="post" keyProperty="id" >  
  23.         select LAST_INSERT_ID() as value  
  24.     </selectKey>  
  25. </insert>  
分享到:
评论
4 楼 grandboy 2008-10-02  
这种用法会不会在大并发的时候有问题? 我指的不是性能方面,而是产生ID的那个SQL和Insert的那个SQL是怎么执行方式? Oracle可能没有什么大问题,但是MySQL那种返回的ID能保证是刚刚自己插入的那条记录的ID吗? 我对iBatis没有做过仔细研究,故有此疑问。
3 楼 xzj127 2008-09-05  
如果这样写下去。。我看。。。。得买 IBM 服务器了。。
2 楼 Joo 2008-09-05  
在Oracle下如果表是空的的时候这样做会不会报错?
1 楼 saharabear 2008-06-30  
这样做性能开销会不会比较大?

相关推荐

    ibatis框架实现的增删改查

    实现ibatis框架对student表的增删改查(包括模糊查询和用序列自动生成主键)

    iBatis SQL Maps开发指南.pdf

    自动生成的主键 存储过程 parameterClass parameterMap Inline Parameter简介 resultClass resultMap cacheModel xmlResultName Parameter Map 和 Inline Parameter 元素 Inline Parameter Map 基本类型输入参数 Map...

    Ibatis框架的核心知识点

    1 简单的sqlmap 2 SQl语句 3 自动生成的主键 4 存储过程 5 parameterMap与inline parameter 6 二元条件元素和一元条件元素 7 隐式的Result Map

    iBATIS 帮助文档

    自动生成的主键.............................................................................................................20 存储过程.....................................................................

    JAVA代码生成工具

    unique="是否唯一性约束" nullable="是否可以为空" pk="是否主键,在表没有主键的情况下,可以指定一个代理主键" updatable="是否可以更新" insertable="是否插入" enumString="枚举值,以分号分隔,示例值:M(1,...

    好用的代码生成源码

    示例如下: UserInfoBaseDao : 自动生成的代码, 不能手工修改,用于重复生成 UserInfoDao extends UserInfoBaseDao : 存放手工的代码,不能重复生成 页面的重复生成还没有啥好办法。 语法参考: ...

    springmybatis

    mybatis实战教程mybatis in action之九mybatis 代码生成工具的使用 mybatis SqlSessionDaoSupport的使用附代码下载 转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门...

    Spring中文帮助文档

    11.5.2. 使用SimpleJdbcInsert来获取自动生成的主键 11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource提供参数值 11.5.5. 使用SimpleJdbcCall调用存储过程 11.5.6. 声明SimpleJdbcCall...

    Spring API

    11.5.2. 使用SimpleJdbcInsert来获取自动生成的主键 11.5.3. 指定SimpleJdbcInsert所使用的字段 11.5.4. 使用SqlParameterSource提供参数值 11.5.5. 使用SimpleJdbcCall调用存储过程 11.5.6. 声明SimpleJdbcCall...

    AppFramework_V1.0

    iBatis2.0 &lt;br&gt;(毫秒) AppFramework &lt;br&gt;(毫秒) 后者前者性能对比 &lt;br&gt;(倍) 根据主键获取实体 &lt;br&gt;(20次单条select) 6.1 5.3 &lt;br&gt;QueryFilter: 5.75 1.15 &lt;br&gt;...

    AppFramework数据库访问组件_代码生成插件_V1.1.rar

    720 1.59 &lt;br&gt;1.53 &lt;br&gt; &lt;br&gt; 表II –50并发4循环(数据库和测试机分开) &lt;br&gt;对比项目 iBatis2.0 &lt;br&gt;(毫秒) AppFramework &lt;br&gt;(毫秒) 后者前者性能对比 &lt;br&gt;(倍) ...

    AppFramework_V1.0_New

    720 1.59 &lt;br&gt;1.53 &lt;br&gt; &lt;br&gt; 表II –50并发4循环(数据库和测试机分开) &lt;br&gt;对比项目 iBatis2.0 &lt;br&gt;(毫秒) AppFramework &lt;br&gt;(毫秒) 后者前者性能对比 &lt;br&gt;(倍) ...

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    B .iBATIS自带的queryForList(String statementName,int start,int size)分页接口有性能隐患,不允许使用。 C .定义明确的sql查询语句,通过传入参数start和size来实现分页逻辑。 D .可使用存储过程写分页逻辑...

Global site tag (gtag.js) - Google Analytics