Java

2021-09-26 14:09:57    54    0    0

CREATE TABLE  users ( id serial, firstname text, lastname text );

1、 Mybatis返回postgresql自增主键值

第一步:java对象

public class Users {

    private int id;

    private String firstname;

}

第二步:Mybatis xml

    <insert id="insert_user_return_id" parameterType="Users" useGeneratedKeys="true" keyProperty="id">

    INSERT INTO users (firstname, lastname) VALUES (#{firstname},#{lastname})

    </insert>

第三步:测试

    @Test

    public void f2() {

        Users u = new Users();

        u.setFirstname("firstName");

        u.setLastname("lastName");

        userDao.insert_user_return_id(u);

        System.out.println("key>>>>>>:" +u.getId());

    }

注意:这里获取自增的主键值是通过传输的对象获取;建表时自增字段必须是第一个字段。


2、 使用returning返回数据

INSERT:

第一步:Mybatis接口中使用@Select注解

     @Select("INSERT INTO users (firstname, lastname) VALUES ('Joe', 'Cool') RETURNING * ")

      Users insert_user_return_all();

第二步:测试

    @Test

    public void f1() {

        Users user = userDao.insert_user_return_all();

        System.out.println( "user id: "+user.getId() +", firstname: "+user.get

2021-09-26 14:09:57    92    0    0
Hibernate使用PostgreSQL序列生成主键。
第一步:数据库创建表、序列
    CREATE TABLE users ( id int, firstname text ) ;
    CREATE SEQUENCE SEQ_USER_ID;
第二步:实体类配置
    @Entity
    @Table(name = "users")
    public class User {
        @Id
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "seq_gen")
        @SequenceGenerator(name = "seq_gen", sequenceName = "seq_user_id", allocationSize = 1)
        private Long id;
        private String firstname;
    }
第三步:测试
    @Test          
    public void save(){
        User u = new User();
        u.setFirstname("name");
        userRepository.save(u);
    }
     注意:使用@SequenceGenerator时,由于allocationSize值默认是50,如果序列INCREMENT属性值为1(不设置默认是1),则需要设置allocationSize属性为1;或者设置序列属性INCREMENT的值为50。​