IBatisNet 之 自动生成主关键字和Insert返回主键ID
很多系统支持自动生成主关键字。一些数据库厂商预先生成(oracle),一些数据库厂商之后生成(mssal mysql).。如果你在元素中使用节,你就能获得一个预先生成的key.。下面的例子演示了这种方法:
SELECT STOCKIDSEQUENCE.NEXTVAL AS ID FROM DUAL
insert into PRODUCT (PRD_ID,PRD_DESCRIPTION) values
(#id#,#description#)
parameterClass="product"> insert into PRODUCT (PRD_DESCRIPTION)
values (#description#)
Property="id" > SELECT @@IDENTITY AS ID
上面是IbatisNet的iBATIS Data Mapper Developer Guide上的说明:下面来介绍一下具体的应用和注意的地方:
person.xml
?xml version="1.0" encoding="utf-8" ?>
namespace="Person"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="SqlMap.xsd">
insert into PERSON
(PER_FIRST_NAME, PER_LAST_NAME,
PER_BIRTH_DATE, PER_WEIGHT_KG, PER_HEIGHT_M)
values
( #FirstName#, #LastName#,
#BirthDate#, #WeightInKilograms#, #HeightInMeters#)
select CAST(@@IDENTITY as int) as value
节返回一个从sql server生成的自动生成关键字。
//新增一个员工
privatevoid Button1_Click(object sender, System.EventArgs e)
{
IbatisTest.Domain.Person person = new IbatisTest.Domain.Person();
person.Id =-1;//这里的赋值很重要,否则会出错person.FirstName = "--New Person--";
person.BirthDate = Convert.ToDateTime("2000-4-2");
PersonHelper personhelper = new PersonHelper();
personhelper.Insert(person);
}
//业务逻辑类方法
publicint Insert (Person person)
{
try{
int result = -1;
result =(int)Mapper().Insert("Insert",person);
return result;
}catch(Exception ex)
{
throw ex;
}
}
Feedback
2005-10-24 16:37 by 浪子
如果多主键不是如何处理?
对于多主键的配置问题:
此时主键由两个字段组成per_id 和 group_id,parameterClass应该如何写?需要自己在cs里面定义该表的主键类,然后映射回去吗?还是有更好的办法?期待能看到你的解决办法.谢谢
select
PER_ID,
PER_FIRST_NAME,
PER_LAST_NAME,
PER_BIRTH_DATE,
PER_WEIGHT_KG,
PER_HEIGHT_M
from PERSON
//如何配置?
PER_ID = #value# and group_ID=??
2005-10-24 16:37 by 浪子
如果多主键不是如何处理?
对于多主键的配置问题:
此时主键由两个字段组成per_id 和 group_id,parameterClass应该如何写?需要自己在cs里面定义该表的主键类,然后映射回去吗?还是有更好的办法?期待能看到你的解决办法.谢谢
select
PER_ID,
PER_FIRST_NAME,
PER_LAST_NAME,
PER_BIRTH_DATE,
PER_WEIGHT_KG,
PER_HEIGHT_M
from PERSON
//如何配置?
PER_ID = #value# and group_ID=??
2005-10-24 19:02 by 自由、创新、研究、探索……
如果是多主键,这两个多主键一般是另外的几张表的外键。这种情况你不需要去自动生成主键阿,处理在一个事务中就可以保证数据的完整性了吧。
我一般是将多主键可以转化成单主键
可以这样配置
对于多主键的配置问题:
此时主键由两个字段组成per_id 和 group_id,parameterClass应该如何写?
select
PER_ID,
PER_FIRST_NAME,
PER_LAST_NAME,
PER_BIRTH_DATE,
PER_WEIGHT_KG,
PER_HEIGHT_M
from PERSON
PER_ID = #PerID#
group_ID= #GroupId#
2005-10-25 15:24 by 浪子
处理成Hashtable?
该Hashtable包含PerID和GroupID对值?
Hastable ht = new Hastable();
ht.Add('PerID','001');
ht.Add('GroupID','001');
public Person Select (Hastable ht)
{
return (Person) Mapper().QueryForObject ("Select", ht);
}
这样子处理吗?
PER_ID = #PerID#
group_ID= #GroupId#
谢谢你的回复,并且共享你的想法.
2005-10-25 17:56 by 自由、创新、研究、探索……
对,处理成Hashtable,该Hashtable包含PerID和GroupID对值