我正在为刚刚开始从事的项目使用postgres,我意识到Mybatis支持检索许多数据库的自动生成的ID密钥,但不幸的是postgres并不是其中之一,我做了一些修改生成的SQL映射器和: -更改选择而不是在生成的xml中插入 -在每个句子的最后一行添加“返回ID”
所以它看起来像:
<select id="insert" keyColumn="id" keyProperty="id" parameterType="com.myproject.Order" ...
insert into ...
...
RETURNING id
</select>
有了更改,它就像一个符咒一样工作,但是问题是,一旦再次执行生成器,就应该手动再次应用更改,我正在寻找一个插件来帮助我自动执行更改,但是我没有找到似乎有什么帮助,您在类似的事情发生之前有做过什么吗?会有什么建议?
答案 0 :(得分:1)
为便于说明,我在模式users
中创建了一个表mbtest
。
create table mbtest.users (
id serial primary key,
name varchar(20)
);
以下是生成器配置中的<table />
元素。
(在评论中,我写了sqlStatementType
,但应该是sqlStatement
)
<table tableName="users" domainObjectName="User"
schema="mbtest">
<generatedKey column="id" sqlStatement="JDBC" />
</table>
生成的'UserMapper.xml'包含以下插入语句。
请注意,上面的useGeneratedKeys
填充了keyColumn
,keyProperty
和<generatedKey />
。
<insert id="insert" keyColumn="id"
keyProperty="id" parameterType="test.model.User"
useGeneratedKeys="true">
<!--
WARNING - @mbg.generated
This element is automatically generated by MyBatis Generator, do not modify.
This element was generated on Sun Dec 08 12:36:30 JST 2019.
-->
insert into mbtest.users (name)
values (#{name,jdbcType=VARCHAR})
</insert>
(如警告所述,您不应修改生成的语句)
insert
语句会将生成的密钥设置为id
的{{1}}属性。
User
这里是demo project,以便您可以验证自己。