mybatis批量添加时怎么返回ID的 集合

mybatis批量添加时怎么返回ID的 集合,第1张

mybatis使用insert、update标签中的useGeneratedKeys、keyProperty来获取主键返回值,useGeneratedKeys设置为true,keyProperty设置为主键对应实体类的属性值,如果是联合主键那么属性名用逗号隔开;insert时,返回的是新增记录的主键值、update时返回的时更新记录的主键值

同理,如果插入多条记录,只要设置了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类型的


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11880274.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存