今天解决了一个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 就可以了。
没有评论:
发表评论