Mybatis Generator Postgres return 创建了 id 支持
Mybatis Generator Postgres return created id support
我在一个刚开始做的项目中使用了postgres,我意识到Mybatis提供了为许多数据库检索自动生成的id键的支持,但不幸的是postgres不是其中之一,我做了一些修改位生成的 sql 映射器和:
- 更改 select 而不是插入生成的 xml
- 添加 "RETURNING id" 作为每个句子的最后一行
所以它看起来像:
<select id="insert" keyColumn="id" keyProperty="id" parameterType="com.myproject.Order" ...
insert into ...
...
RETURNING id
</select>
有了这个改变,它就像一个魅力,但问题是一旦再次执行生成器,应该再次手动应用更改,我正在寻找一个插件来帮助我自动进行更改,但我做到了没有找到任何似乎有帮助的东西,你之前做过类似的事情吗?有什么建议?
为了解释,我在架构 mbtest
.
中创建了一个 table users
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
语句会将生成的密钥设置为 User
的 id
属性。
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setName("User1");
mapper.insert(user);
sqlSession.commit();
assertNotNull(user.getId());
}
这里有一个demo project方便大家自己验证
我在一个刚开始做的项目中使用了postgres,我意识到Mybatis提供了为许多数据库检索自动生成的id键的支持,但不幸的是postgres不是其中之一,我做了一些修改位生成的 sql 映射器和: - 更改 select 而不是插入生成的 xml - 添加 "RETURNING id" 作为每个句子的最后一行
所以它看起来像:
<select id="insert" keyColumn="id" keyProperty="id" parameterType="com.myproject.Order" ...
insert into ...
...
RETURNING id
</select>
有了这个改变,它就像一个魅力,但问题是一旦再次执行生成器,应该再次手动应用更改,我正在寻找一个插件来帮助我自动进行更改,但我做到了没有找到任何似乎有帮助的东西,你之前做过类似的事情吗?有什么建议?
为了解释,我在架构 mbtest
.
users
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
语句会将生成的密钥设置为 User
的 id
属性。
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = new User();
user.setName("User1");
mapper.insert(user);
sqlSession.commit();
assertNotNull(user.getId());
}
这里有一个demo project方便大家自己验证