mybatis 不支持postgresql 返回自增主键?

石头哥哥 发布于 2014/04/29 14:52
阅读 4K+
收藏 1

1.项目打算改用postgresql  测试了下 但是好像mybatis无法支持pgsql返回自增主键;

2.如果mapper xml中忽略掉id(主键),可以顺利更新数据,且数据中的id是自增的;

3.以下是我的数据库测试用表:

DROP TABLE t_user;

/*==============================================================*/
/* Table: t_user                                                */
/*==============================================================*/
CREATE TABLE t_user (
	useracount VARCHAR (32) NULL DEFAULT NULL,
	userpwd VARCHAR (32) NULL DEFAULT NULL,
	ID serial NOT NULL,
	CONSTRAINT pk_t_user PRIMARY KEY (ID)
);

COMMENT ON TABLE t_user IS '帐户表';

COMMENT ON COLUMN t_user.useracount IS '用户帐号';

COMMENT ON COLUMN t_user.userpwd IS '用户密码';

COMMENT ON COLUMN t_user. ID IS 'userid';



 mapper 是用mybatis-generator自动生成的

<insert id="insert" parameterType="Batch.pgsql.modelVo.TUser">
    insert into t_user (useracount, userpwd
      )
    values (#{useracount,jdbcType=VARCHAR}, #{userpwd,jdbcType=VARCHAR}
      )



以上是忽略掉id的 xml

如果加上id会报以下错误,如果忽略掉可以正常更新数据 但是对应的javaBean中无法获取相应的id字段值

加载中
0
R
RuralHunter

自增键插入时不需要填id,mapper里要注明,我注解的方式是类似如下:@Options(useGeneratedKeys=true, keyProperty="id")

xml应该也有类似的选项,你自己查一下。

0
石头哥哥
石头哥哥

@Ruralhunter    pgsql不直接直接数据自增处理 你那个做法是针对mysql或则sqlserver  对于pgsql ,或则甲骨文的数据库是不支持的 
    <insert id="insert" parameterType="Batch.pgsql.modelVo.TUser">
        <selectKey keyProperty="id"
                   resultType="java.lang.Integer" order="BEFORE">
            SELECT nextval('t_user_id_seq')
        </selectKey>
        insert into t_user (id,useracount, userpwd
        )
        values (#{id,jdbcType=INTEGER},#{useracount,jdbcType=VARCHAR},#{userpwd,jdbcType=VARCHAR}
        )
    </insert> 这问题已经解决 感谢你的热情回答  给你一个赞

0
R
RuralHunter

我用的就是pg,没有问题。

石头哥哥
石头哥哥
注解的方式 会出问题, 然后 useGeneratedKeys=true, keyProperty="id"好像只支持mysql sqlserver吧
0
ccfish86
ccfish86

useGeneratedKeys=true, keyProperty="id", keyColumn="id" 在PG9.4下测试通过、

 

返回顶部
顶部