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' 包含以下插入语句。 请注意,useGeneratedKeyskeyColumnkeyProperty 由上面的 <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 语句会将生成的密钥设置为 Userid 属性。

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方便大家自己验证