> 文档中心 > springboot-jpa通过表完成分布式id 生成, @GeneratedValue和@TableGenerator用法

springboot-jpa通过表完成分布式id 生成, @GeneratedValue和@TableGenerator用法


准备工作

pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">    <modelVersion>4.0.0</modelVersion>    <groupId>com.dkp</groupId>    <artifactId>springboot-jpa</artifactId>    <version>1.0.0</version>    <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.6.RELEASE</version>    </parent>    <dependencies> <dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency>     <groupId>mysql</groupId>     <artifactId>mysql-connector-java</artifactId> </dependency> <dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency>     <groupId>org.springframework.boot</groupId>     <artifactId>spring-boot-starter-test</artifactId>     <scope>test</scope> </dependency>    </dependencies>    <build> <plugins>     <plugin>  <groupId>org.springframework.boot</groupId>  <artifactId>spring-boot-maven-plugin</artifactId>     </plugin> </plugins>    </build></project>

创建表

-- mysqlcreate table id_gen (GEN_KEY varchar(255) not null, GEN_VALUE bigint, primary key (GEN_KEY));

准备实体

package com.dkp.entity;import javax.persistence.*;@Entity@Table(name = "t_user")public class User {    /**     * table 主键表名     * pkColumnName 主键表 的主键列     * valueColumnName 主键表 数字列     * pkColumnValue 需要生成Id的 数据表名称     * allocationSize 每次缓存的id 长度     * 注意:generator 的值要和 @TableGenerator中name的值保持一致     */    @Id    @GeneratedValue(strategy = GenerationType.TABLE, generator = "userGen")    @TableGenerator(name = "userGen",     table = "ID_GEN",     pkColumnName = "GEN_KEY",     valueColumnName = "GEN_VALUE",     pkColumnValue = "t_user"    )    private Long id;    private Integer age;    private String uname;    private String note;    public Long getId() { return id;    }    public void setId(Long id) { this.id = id;    }    public Integer getAge() { return age;    }    public void setAge(Integer age) { this.age = age;    }    public String getUname() { return uname;    }    public void setUname(String uname) { this.uname = uname;    }    public String getNote() { return note;    }    public void setNote(String note) { this.note = note;    }    @Override    public String toString() { return "User{" +  "id=" + id +  ", age=" + age +  ", uname='" + uname + '\'' +  ", note='" + note + '\'' +  '}';    }}

准备dao

package com.dkp.dao;import com.dkp.entity.User;import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.Query;import org.springframework.data.repository.query.Param;import java.util.List;import java.util.Map;public interface UserDao extends JpaRepository<User, Long> {    @Query(value = "select uname from t_user where id = :id" ,nativeQuery = true)    List<Map<String,Object>> getUser(@Param("id") Long id);}

准备 启动类

package com.dkp;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class App {    public static void main(String[] args) { SpringApplication.run(App.class,args);    }}

创建test类测试

springboot-jpa通过表完成分布式id 生成, @GeneratedValue和@TableGenerator用法

@RunWith(SpringRunner.class)@SpringBootTestpublic class AppTest {    @Autowired    private UserDao userDao;   @Test    public void test01(){ User user = new User(); user.setNote("我是笔记1"); user.setUname("hq1"); user.setAge(32); User tuser = userDao.save(user); System.out.println(tuser);    }}

git 项目地址:https://gitee.com/dukangping/springboot-jpa

书法艺术字体