我有一个Java项目,使用MyBatis访问PostgreSQL数据库。PostgreSQL允许在INSERT
语句后返回新创建行的字段,我想用它来返回新创建记录的自动生成的BIGSERIAL
id
。所以,我将XML中的insert
命令更改为使用PostgreSQL的功能,在<insert>
标记中添加resultType="long"
属性,并在Map器的Java接口中将插入方法设置为返回long
而不是void
。
当我试着运行这个程序时,我得到一个org.xml.sax.SAXParseException
,它说Attribute "resultType" must be declared for element type "insert"
。
现在,当我将<insert>
标记更改为<select>
时,一切正常,但使用<select>
标记执行INSERT
语句让我感到困扰。
有没有办法让Map到<insert>
标签的方法返回结果,或者MyBatis不是为这个设计的,我应该把它们作为<select>
标签保存?
7条答案
按热度按时间puruo6ea1#
Map插入方法的返回类型可以是
void
或int
(在这种情况下,它将返回插入的行数)。您可以执行以下机制来返回生成的id:字符串
这将把生成的
id
列设置为参数类的id
属性。之后,作为参数传递的对象将在其属性中生成id
。svujldwt2#
有两种方法(至少我知道)可以获得一个插入记录的ID:
例如,我们有一个类
EntityDao
:字符串
1.使用
insert
标签,返回object示例MyBatis界面
型
MyBatis XMLMap器:
型
示例代码:
型
2.使用
select
和resultType
标签只返回记录的IDMyBatis界面
型
MyBatis XMLMap器:
型
示例代码:
型
nszi6y053#
你可以使用如下方法。
字符串
在Java类中,你已经调用了插入方法,你可以通过调用
user.getUserId()
来获取值。基本上,下一个瓦尔存储在对象的变量中。
Here userId inside User.
rm5edbpk4#
它也可以通过Java
Records
和mybatis注解来完成实体名称:
字符串
制图员:
型
这里的关键是使用
@Select
而不是@Insert
,并在sql语句的末尾使用returning id
。pu3pd22g5#
您也可以使用生成的密钥:
字符串
插入后,参数的属性id设置为来自列id的值。
dzjeubhm6#
在本例中,使用选项
字符串
chhqkbe17#
使用“returning”返回对象的示例
字符串