Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Mybatis生成器Postgres返回创建id支持_Postgresql_Mybatis_Mybatis Generator - Fatal编程技术网

Postgresql Mybatis生成器Postgres返回创建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"

我将postgres用于一个我刚刚开始工作的项目,我意识到Mybatis提供了检索许多数据库自动生成的id密钥的支持,但不幸的是,postgres不是其中之一,我对生成的sql映射程序进行了一点修改,并: -在生成的xml中更改select而不是insert -添加“返回id”作为每个句子的最后一行

所以它看起来像:

<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)因此,我将调整逻辑以适应这一点,但已经足够了。