关于bboss persistent主键生成机制的说明

简介: 4.14 主键的生成 bboss主键生成有两种模式,一种模式是在对象主键属性上加@PrimaryKey(uuid主键)或者@PrimaryKey(auto=true,pkname="xxxx")(pkname对应tableinfo中的TABLE_NAME子字段的值),另外一种模式就是通过DBUtil.getNextPrimaryKey方法再程序中获取(前提是表的主键信息需要配置到tableinfo中,可以支持uuid和oracle的sequence,以及mysql的自定义sequence)。
4.14 主键的生成
bboss主键生成有两种模式,一种模式是在对象主键属性上加@PrimaryKey(uuid主键)或者@PrimaryKey(auto=true,pkname="xxxx")(pkname对应tableinfo中的TABLE_NAME子字段的值),另外一种模式就是通过DBUtil.getNextPrimaryKey方法再程序中获取(前提是表的主键信息需要配置到tableinfo中,可以支持uuid和oracle的sequence,以及mysql的自定义sequence)。

对于mysql之类可以自动产生主键的数据库,如果获取自动产生的主键请参考文档:
bboss持久层返回mysql自增主键功能说明


模式一 注解模式实例
自动生成uuid主键,生成的主键值会自动赋给id属性,这种模式不需要进行额外配置
public class POBean
{
	@PrimaryKey
	private String id ;
}

默认采用com.frameworkset.common.poolman.sql.StrongUuidGenerator生成uuid,用户可以自己实现接口
com.frameworkset.common.poolman.sql.IdGenerator来自定义uuid主键生成机制,自定义的uuid生成组件可以在poolman.xml文件中配置:
<datasource> 
....
<idGenerator>com.frameworkset.common.poolman.sql.StrongUuidGenerator</idGenerator>
......
</datasource> 


如何在程序中使用IdGenerator来生成主键:
com.frameworkset.common.poolman.sql.IdGenerator ienerator = com.frameworkset.common.poolman.DBUtil.getPool("bspf").getIdGenerator();//指定数据源
或者
com.frameworkset.common.poolman.sql.IdGenerator ienerator = com.frameworkset.common.poolman.DBUtil.getPool().getIdGenerator();//默认数据源					
String value = ienerator.getNextId();//获取主键


根据tableinfo中配置的主键信息生成记录主键,生成的主键值会自动赋给id属性
public class POBean
{
	@PrimaryKey(pkname="ListBean",auto=true)
	private String id ;
}



模式二实例 编程模式

主键信息表
Poolman可以自动生成表的主键,前提是将表的主键信息配置到tableinfo表中,其结构如下



[img]/upload/attachment/113888/557456e8-c104-35d1-83ba-866550098ee7.gif&quot; alt=&quot;[/img]



TABLE_NAME           VARCHAR2(255)   表名称                

   TABLE_ID_NAME        VARCHAR2(255),   表的主键名称

   TABLE_ID_INCREMENT   NUMBER(5),      表的主键自增值

   TABLE_ID_VALUE       NUMBER(20),  表的主键的当前值

   TABLE_ID_GENERATOR   VARCHAR2(255),  表的主键自定义生成机制,

可提供poolman之外的生成机制,

比如数据库sequence名称,要求TABLE_ID_TYPE是sequence

   TABLE_ID_TYPE        VARCHAR2(255), 表主键类型,取值范围:string,int,long,sequence

   TABLE_ID_PREFIX      VARCHAR2(255) 主键前缀,如果TABLE_ID_TYPE的值为string,则可以添加前缀,否则不可以


4.14.2人工获取主键的接口
com.frameworkset.common.poolman.DBUtil组件定义了一组getNextPrimaryKey静态方法,用户在程序中获取主键配置在tableinfo表中的主键信息。

1.      获取数字类型的主键

获取缺省数据库中表的主键信息

public static long getNextPrimaryKey(String tableName) throws SQLException

获取指定数据库中表的主键信息

public static long getNextPrimaryKey(String dbName,String tableName) throws SQLException


2.      获取字符串类型的主键

获取缺省数据库中表的主键信息

public static String getNextStringPrimaryKey(String tableName) throws SQLException


获取指定数据库中表的主键信息

public static String getNextStringPrimaryKey(String dbName,String tableName) throws SQLException


特别声明
持久层框架在poolman.xml配置文件中新增了配置属性:

false

可以通过该开关来控制是否启用为sql语句自动补全主键的功能,这样能够避免持久层框架去分析每一条insert语句,提升系统性能。

控制的开关autoprimarykey的值为false时,表示不自动补全insert语句中的主键值;为true时,表示启用自动补全主键的功能,但是主键信息必须配置在tableinfo表中。
目录
相关文章
|
Java 数据库连接 数据库
第11章—使用对象关系映射持久化数据—SpringBoot+SpringData+Jpa进行查询修改数据库
SpringBoot+SpringData+Jpa进行查询修改数据库 JPA由EJB 3.0软件专家组开发,作为JSR-220实现的一部分。但它又不限于EJB 3.0,你可以在Web应用、甚至桌面应用中使用。
1377 0
bboss持久层开启和关闭自带主键机制
bboss持久层开启和关闭自带主键机制 请访问文档: bboss持久层开启和关闭自带主键机制
835 0
|
关系型数据库 MySQL API
bboss持久层返回mysql自增主键功能说明之二
在上一篇文章《bboss持久层返回mysql自增主键功能说明》中提到如果升级该功能时需要重新编译使用了ConfigSQLExecutor和SQLExecutor两个组件的dao程序,这样会导致原有程序的升级困难, 经过短时间在项目中的应用实践发现重新编译dao程序是一个非常麻烦的事情,为了避免这个麻烦,特意将该功能改为回调方式返回自增主键,这样无需修改已有api,从而保持新旧版本之间的兼容性,升级时就无需编译原有dao程序重新生成jar包,现将改进后的使用方法做个简单介绍。
883 0
|
SQL 数据库 Java
bboss persistent 实现数据库更新操作
4.5 更新操作代码段    4.5.1预编译更新操作        PreparedDBUtil preDBUtil = new PreparedDBUtil();        int pk = 0;        String sqlstr = "update OFFICE_...
585 0
|
SQL 数据库 安全
使用bboss persistent框架实现数据库的插入操作
4.3.1预编译插入        PreparedDBUtil preDBUtil = new PreparedDBUtil(); ----------------->定义预编组件实例        Action action = (Action)vo;        String sRecord = action.
739 0
|
SQL 数据库 Java
bboss persistent 实现数据库删除操作
4.6 删除操作4.6.1    普通删除操作    DBUtil dbUtil = new DBUtil();               try {            dbUtil.
607 0
bboss persistent事务管理介绍 (十一)
4.9.10声明式事务和可编程事务混合使用     通过使用声明式的事务,开发人员无需在代码中再嵌入事务管理的代码。如果用户即声明了事务,又在代码中嵌入了事务管理代码,那么事务管理框架根据事务类型进行相应的处理,具体的处理方法见下表:   方法实现中开启事务类型 ...
685 0
|
人工智能
bboss persistent事务管理介绍 (十)
  4.9.9.3 BaseSPIManager组件 l        包路径及接口说明 BaseSPIManager的完整包路径如下: com.chinacreator.spi.
809 0