`
joerong666
  • 浏览: 410523 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

返回自增列的值

阅读更多

今天解决了一个IBatis.Net的使用的问题,这个问题困扰了很久。在做一个管理系统,后台Server采用的是HTTP Server+DB来提供服务。 最初使用的是Perl+BerkeleyDB,演进到Servlet+Mysql,然后又演进到ASP.NET + SQL Server,从Servlet开始ORM使用的是Hibernate,到了ASP.NET后,Hibernate转变为了NHibernate。一次偶然的机会,接触到了别人的一个系统,也想把这个管理系统中的NHibernate替换为IBatis.Net,并且把请求统一放到一个Controller进行Dispatch,也可以在Controller中加入日志、权限、验证等机制。当然,对于Struts等框架都是采用类似的机制完成的。自己也是一种借鉴和学习。在测试使用IBatis.Net的时候遇到一个问题,NHibernate的时候,插入一个对象,就可以获得这个对象对应的记录的自动生成的PK。IBatis可以通过SelectKey来做,我确实也有在Java下的例子,可是在网上看到的一些资料指出的在IBatis.Net中的用法,但是不能成功。一直搞了很久。今天终于是解决了。自己给自己记录一下吧。

<statements>
  <statement  id="INSERT-ADMIN" resultClass="int">
      insert into admin (lastlogin, flag, controlflag, username, password, description)
      values (#LastLogin#, #Flag#, #ControlFlag#, #Username#, #Password#, #Description#)

      SELECT SCOPE_IDENTITY()  AS value

    </statement >

这个是正确的写法,不需要用到selectKey,自己以前的错误在两个地方,一个是在statement中没有写resultClass,另外一个就是用 select @@IDENTITY as id(value),始终不行,这个我一直没有搞明白是什么原因。只是根据自己的需要,返回的应该是这个scope中的id,所有使用select scope_identity 就可以了。

 

 

以下配置也是OK的

<!—Oracle SEQUENCE Example using .NET 1.1 System.Data.OracleClient --> 
<insert id="insertProduct-ORACLE" parameterClass="product"> 
  
<selectKey resultClass="int" type="pre" property="Id" > 
     SELECT STOCKIDSEQUENCE.NEXTVAL AS VALUE 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="product"> 
  insert into PRODUCT (PRD_DESCRIPTION)
  values (#description#) 
 
<selectKey resultClass="int" type="post" property="id" > 
   select @@IDENTITY as value
 
</selectKey>
</insert>

<!-- MySQL Example -->
<insert id="insertProduct-MYSQL" parameterClass="product"> 
  insert into PRODUCT (PRD_DESCRIPTION)
  values (#description#) 
 
<selectKey resultClass="int" type="post" property="id" > 
   select LAST_INSERT_ID() as value
 
</selectKey>
</insert>

分享到:
评论

相关推荐

    SQL Server设置主键自增长列(使用sql语句实现)

    主键自增长列在进行数据插入的时候,很有用的,如可以获取返回的自增ID值,接下来将介绍SQL Server如何设置主键自增长列,感兴趣的朋友可以了解下,希望本文对你有所帮助

    db2-技术经验总结

    5 LOAD命令和自生成列值 72 6 用load命令和identityoverride参数向有identity列的表中装载数据后的注意事项 74 1.27. 利用快照函数查询数据库服务器本地以及远程的连接数 74 1.28. 查看SQL的执行计划 74 1.29. 如何...

    mysql数据库的基本操作语法

    auto_increment自增模式,设置自增后在插入数据的时候就不需要给该列插入值了。 4、 foreign key 约束 外键约束是保证一个或两个表之间的参照完整性,外键是构建于一个表的两个字段或是两个表的两个字段之间的参照...

    Visual C++开发实战1200例 第3章

    实例105输出二维数组任一行任一列值 实例106使用指针查找数列中的最大值和最小值 实例107用指针数组构造字符串数组 实例108将若干字符串按照字母顺序输出 实例109用指向函数的指针比较大小 实例110用指针函数实现求...

    教务管理系统(概要设计及详细设计).doc

    " "值 "八班 " 2、表名称:cjb 表类型:约束表 含义:班级成绩表(打印表) "字段名称 "字段类型 "Null "含义 "示例数据 " "id "整形 "否,自增 "主键列 "1 " "cjb_id "整形 "否 "外键列 "1 " "name "字符 " "值 "八...

    达梦数据库_SQL语言手册

    自增列的使用 自增列定义 属性 第章视图 视图的作用 视图的定义 视图的删除 视图的查询 视图数据的更新 第章嵌入式 前缀和终结符 宿主变量 输入和输出变量 指示符变量 服务器登录与退出 登录服务器...

    你必须知道的495个C语言问题

    2.14 为什么sizeof返回的值大于结构大小的期望值,是不是尾部有填充? 2.15 如何确定域在结构中的字节偏移量? 2.16 怎样在运行时用名字访问结构中的域? 2.17 C语言中有和Pascal的with等价的语句吗? 2.18...

    C语言程序设计标准教程

    使用printf函数时还要注意一个问题, 那就是输出表列中的求值顺序。不同的编译系统不一定相同,可以从左到右, 也可从右到左。Turbo C是按从右到左进行的。如把例2.13改写如下述形式: void main(){ int i=8; printf...

    SQL培训第一期

    check约束:检查约束,check约束通过约束条件表达式设置列值应该满足的条件。 1.5 范式 1.5.1 第一范式 1.5.1.1 规范 无重复的列,确保每列保持原子性,即数据库表中的所有字段值都是不可分解的原子值。 1.5.1.2 ...

    你必须知道的495个C语言问题.pdf

    2.14 为什么sizeof返回的值大于结构大小的期望值,是不是尾部有填充? 2.15 如何确定域在结构中的字节偏移量? 2.16 怎样在运行时用名字访问结构中的域? 2.17 C语言中有和Pascal的with等价的语句吗? 2.18 既然数组...

    《你必须知道的495个C语言问题》

    2.14 为什么sizeof返回的值大于结构大小的期望值,是不是尾部有填充? 28 2.15 如何确定域在结构中的字节偏移量? 28 2.16 怎样在运行时用名字访问结构中的域? 29 2.17 C语言中有和Pascal的with等价的语句吗...

    C语言FAQ 常见问题列表

    o 3.11 为什么 sizeof 返回的值大于结构的期望值, 是不是尾部有填充? o 3.12 如何确定域在结构中的字节偏移? o 3.13 怎样在运行时用名字访问结构中的域? o 3.14 程序运行正确, 但退出时却 ``core dump''了,...

    sqlserver自定义函数

    ---为表w01添加一个可以表示唯一标示的自增字段ID alter table w01 add [ID] [int] IDENTITY (1, 1) NOT FOR REPLICATION NOT NULL ---查询删除前的数据和记录数:7 select * from w01 select count(*) from w01 -...

    经典SQL语句大全

    --添加一个自增列 add column_b int identity(1,1) delete from tablename where column_b not in( select max(column_b) from tablename group by column1,column2,...) alter table tablename drop column column...

    数据库操作语句大全(sql)

    --添加一个自增列 add column_b int identity(1,1) delete from tablename where column_b not in( select max(column_b) from tablename group by column1,column2,...) alter table tablename drop column column...

    sql经典语句一部分

    --添加一个自增列 add column_b int identity(1,1) delete from tablename where column_b not in( select max(column_b) from tablename group by column1,column2,...) alter table tablename drop column column...

    你必须知道的495个C语言问题(PDF)

    2.11 为什么sizeof 返回的值大于结构的期望值, 是不是尾部有填充? . . 9 2.12 如何确定域在结构中的字节偏移? . . . . . . . . . . . . . . . . . 9 2.13 怎样在运行时用名字访问结构中的域? . . . . . . . . . . ...

Global site tag (gtag.js) - Google Analytics