关于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表中。
目录
相关文章
bboss持久层开启和关闭自带主键机制
bboss持久层开启和关闭自带主键机制 请访问文档: bboss持久层开启和关闭自带主键机制
816 0
|
SQL 缓存 Java
bboss持久层查询元数据缓存机制开启方法
    bboss持久层为了提升数据库查询操作性能,提供了对查询字段信息、字段对应的java filed名称信息等元数据(后文统称为查询元数据)进行缓存的机制,bboss持久层为数据源额外提供了控制参数cachequerymetadata来控制是否缓存这些查询元数据。
863 0
|
SQL 数据库 Java
bboss persistent 实现数据库更新操作
4.5 更新操作代码段    4.5.1预编译更新操作        PreparedDBUtil preDBUtil = new PreparedDBUtil();        int pk = 0;        String sqlstr = "update OFFICE_...
562 0
|
SQL 数据库 安全
使用bboss persistent框架实现数据库的插入操作
4.3.1预编译插入        PreparedDBUtil preDBUtil = new PreparedDBUtil(); ----------------->定义预编组件实例        Action action = (Action)vo;        String sRecord = action.
716 0
|
SQL 数据库 Java
bboss persistent 实现数据库删除操作
4.6 删除操作4.6.1    普通删除操作    DBUtil dbUtil = new DBUtil();               try {            dbUtil.
587 0
|
应用服务中间件 Android开发
eclipse + JBoss 5 + EJB3开发指南(10):通过继承实体Bean,将单个表映射成多个表(单表策略,SINGLE_TABLE)
本文为原创,如需转载,请注明作者和出处,谢谢! 上一篇:eclipse + JBoss 5 + EJB3开发指南(9):实现Entity Bean的多对多(many-to-many)映射     如果以前使用过EJB1.x或EJB2.x的实体Bean,会发现无法通过继承实体Bean将单个表分成多表。
859 0
bboss persistent事务管理介绍 (十一)
4.9.10声明式事务和可编程事务混合使用     通过使用声明式的事务,开发人员无需在代码中再嵌入事务管理的代码。如果用户即声明了事务,又在代码中嵌入了事务管理代码,那么事务管理框架根据事务类型进行相应的处理,具体的处理方法见下表:   方法实现中开启事务类型 ...
671 0