同理,如果插入多条记录,只要设置了useGeneratedKeys、keyProperty同样可以获取主键;
案例:方法一
<insert
id="add"
parameterType="EStudent"
useGeneratedKeys="true"
keyProperty="id">
insert
into
TStudent(name,
age)
values(#{name},
#{age})
</insert>
useGeneratedKeys="true"
:设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。
(适用于mysql、sqlserver数据库,oracle不能使用,使用selectkey子节点做)
keyProperty:赋值的对象的属性名称。
方法二
<insert
id="add"
parameterType="EStudent">
//
下面是SQLServer获取最近一次插入记录的主键值的方式
<selectKey
resultType="int"
keyProperty="id"
order="AFTER">
SELECT
LAST_INSERT_ID()
AS
id
</selectKey>
insert
into
TStudent(name,
age)
values(#{name},
#{age})
</insert>
sequence就是一个序列,你每次执行 select CASE_SEQ.nextval from dual 的时候都会返回唯一的一个ID号,因此你可以先执行这个select取到这个ID,如果这个时候有多个用户在执行这个 *** 作,那么他们select到的ID绝对跟你的不一样(sequence就是保证这一点的)。然后你就可以用这个ID插入记录,然后再返回这个ID就OK了。 代码: string sql = "Select CASE_SEQ.currval from dual"OracleConnection conn = DB.getCon()OracleCommand cmd = conn.CreateCommand()conn.Open()string returnID = nullcmd.CommandText = sqlreturnID = Convert.ToString(cmd.ExecuteScalar())//获取ID sql = "insert into PATIENT_T(pid,name) values(returnID,'黎明')"//将ID插入数据库 cmd.CommandText = sqlcmd.ExecuteNonQuery()conn.Close()结束了,差不多就是这样,楼主自己调试一下就行了,注意ID在数据库中应该是varcahr类型的欢迎分享,转载请注明来源:内存溢出
评论列表(0条)