Postgresql Mybatis生成器Postgres返回创建id支持
我将postgres用于一个我刚刚开始工作的项目,我意识到Mybatis提供了检索许多数据库自动生成的id密钥的支持,但不幸的是,postgres不是其中之一,我对生成的sql映射程序进行了一点修改,并: -在生成的xml中更改select而不是insert -添加“返回id”作为每个句子的最后一行 所以它看起来像:Postgresql Mybatis生成器Postgres返回创建id支持,postgresql,mybatis,mybatis-generator,Postgresql,Mybatis,Mybatis Generator,我将postgres用于一个我刚刚开始工作的项目,我意识到Mybatis提供了检索许多数据库自动生成的id密钥的支持,但不幸的是,postgres不是其中之一,我对生成的sql映射程序进行了一点修改,并: -在生成的xml中更改select而不是insert -添加“返回id”作为每个句子的最后一行 所以它看起来像: <select id="insert" keyColumn="id" keyProperty="id" parameterType="com.myproject.Order"
<select id="insert" keyColumn="id" keyProperty="id" parameterType="com.myproject.Order" ...
insert into ...
...
RETURNING id
</select>
为了解释,我在模式mbtest
中创建了一个表users
创建表mbtest.users(
id串行主键,
名称varchar(20)
);
下面是生成器配置中的
元素。
(在评论中,我写了sqlStatementType
,但应该是sqlStatement
)
生成的“UserMapper.xml”包含以下insert语句。
请注意,useGeneratedKeys
、keyColumn
和keyProperty
由上面的
填充
插入mbtest.users(名称)
值(#{name,jdbcType=VARCHAR})
(正如警告所说,您不应该修改生成的语句)
insert
语句将生成的密钥设置为User
的id
属性
try(SqlSession SqlSession=sqlSessionFactory.openSession()){
UserMapper-mapper=sqlSession.getMapper(UserMapper.class);
用户=新用户();
user.setName(“User1”);
映射器。插入(用户);
提交();
assertNotNull(user.getId());
}
以下是一个示例,您可以验证自己。MyBatis支持PostgreSQL的串行
类型列,使用MyBatis生成器,将
添加到生成器配置中的
元素就足够了()。您能解释一下它是如何工作的吗?生成失败或执行错误?任何堆栈跟踪或错误消息?感谢您的回复,这实际上是我的错误,基本上是在本例中,对于sqlStatement=JDBC生成的值,它将在实体的相同id属性中返回,而不是在函数的返回值中返回,该函数将始终返回受影响的行数(而不是生成的id)因此,我将调整逻辑以适应这一点,但已经足够了。