`

bboss持久层返回mysql自增主键功能说明之二

阅读更多
在上一篇文章《bboss持久层返回mysql自增主键功能说明》中提到如果升级该功能时需要重新编译使用了ConfigSQLExecutor和SQLExecutor两个组件的dao程序,这样会导致原有程序的升级困难, 经过短时间在项目中的应用实践发现重新编译dao程序是一个非常麻烦的事情,为了避免这个麻烦,特意将该功能改为回调方式返回自增主键,这样无需修改已有api,从而保持新旧版本之间的兼容性,升级时就无需编译原有dao程序重新生成jar包,现将改进后的使用方法做个简单介绍。
注意:本文适用于bboss 3.6.1分支版本。

首先,我们在mysql中建一个具有自增主键的demo表
CREATE TABLE
    demo
    (
        id bigint NOT NULL AUTO_INCREMENT,
        name VARCHAR(200),
        PRIMARY KEY (id)
    )


然后构建一个PO对象:
package com.frameworkset.sqlexecutor;

public class AutoKeyDemo {
	private Long id;
	private String name;
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}


接下来我们来演示单条记录插入和多条记录预编译批处理插入demo并返回自增主键的功能。
注意:多条记录预编译批处理插入时只会返回这批记录中最后一条记录产生的自增主键(如果哪位知道有全部返回所有自增主键的方法,请告诉我哦)

1.单条记录插入并返回自增主键
AutoKeyDemo demo = new AutoKeyDemo();		
		demo.setName("name2");	
		//主键被封装到GetCUDResult对象中,通过回调方式返回
		//下面的insertBean方法最后带了一个GetCUDResult类型参数,
		//这个方法是专门为返回自增主键而新增的一个api
		GetCUDResult ret = new GetCUDResult(); 
		SQLExecutor.insertBean("insert into demo(name) values(#[name])", demo,ret);
		//通过GetCUDResult对象的getKeys方法获取主键,并将主键设置到demo对象中
		demo.setId((Long)ret.getKeys());
		//更新刚添加的记录
		demo.setName("newname");	
		//upret是一个数字类型,表示更新成功的记录数		
		SQLExecutor.updateBean("update demo set name=#[name] where id=#[id]", demo,ret);


2.多条记录预编译批处理插入并返回自增主键
SQLExecutor.delete("delete from demo");
		//构建多条记录
		List<AutoKeyDemo> datas = new ArrayList<AutoKeyDemo>();		
		AutoKeyDemo demo = new AutoKeyDemo();		
		demo.setName("name2");
		datas.add(demo);
		demo = new AutoKeyDemo();		
		demo.setName("name3");
		datas.add(demo);
		demo = new AutoKeyDemo();		
		demo.setName("name4");
		datas.add(demo);
		//插入多条记录,并将成功插入的记录数和最后一条记录的主键值封装成GetCUDResult对象返回
		//下面的insertBeans方法最后带了一个GetCUDResult类型参数,
		//这个方法是专门为返回自增主键而新增的一个api
		GetCUDResult ret = new GetCUDResult(); 
		SQLExecutor.insertBeans("insert into demo(name) values(#[name])", datas,ret);
		//获取自增主键列表(很遗憾,list中只有最后一条记录的主键,
		//但是还是保留为List对象,以便后续有返回所有记录主键的解决方案后再以列表的方式返回这些主键)
		List<Object> keys = (List<Object>)ret.getKeys();
		for(int i = 0; i <keys.size(); i ++)
		{
			datas.get(i).setId((Long)keys.get(i));
		}
		//获取插入的的处理情况
		int[] updatecount = (int[])ret.getUpdatecount();


com.frameworkset.common.poolman.GetCUDResult对象是bboss持久层新增的一个类,他的功能描述如下:
保存数据库增删改的结果信息

GetCUDResult的属性含义如下:
result:操作结果,如果数据源autoprimarykey为true,并且在tableinfo表中保存了表的主键信息result为自增的主键,反之result为更新的记录数
updateCount:更新的记录数
keys:自动产生的主键,如果只有一条记录则为普通对象,如果有多条记录则为List<Object>类型

分享到:
评论
1 楼 yin_bp 2014-08-06  
mysql高版本的驱动程序在获取自动生成的主键时,可能会报以下错误:
Generated keys not requested. You need to specify Statement.RETURN_GENERATED_KEYS to Statement.executeUpdate() or Connection.prepareStatement().

解决办法:
在poolman.xml文件中的datasource增加参数RETURN_GENERATED_KEYS:
  <datasource>
......
	<RETURN_GENERATED_KEYS>true</RETURN_GENERATED_KEYS>
.......
  </datasource>


RETURN_GENERATED_KEYS默认为false,为true时即可解决上述问题,只有在发生上述问题时才需要配置RETURN_GENERATED_KEYS参数。

相关推荐

    bboss 插件工程,持久层hibernate/hibernate4插件

    bboss-plugins project.包含kafka、log4j、spring、dubbo、activemq、word转pdf、pdf转swf项目,持久层hibernate/hibernate4插件

    由 bboss 开源的数据采集&流批一体化工具,提供数据采集、数据清洗转换处理和数据入库以及数据指标统计计算流批一体化处理功能

    bboss-datatran 支持多种数据源的接入,如关系型数据库(MySQL、Oracle等)、NoSQL数据库(HBase、MongoDB等)、消息队列(Kafka、RabbitMQ等)以及文件系统(HDFS、FTP等)。通过内置的适配器,用户可以方便地将...

    基于Java的bboss插件集设计源码,涵盖文档转换及持久层技术

    该项目为bboss插件集的Java设计源码,总计277个文件,涵盖163个Java源文件、22个XML配置文件、14个Gradle构建脚本、13个Git忽略规则、13个属性文件以及少量的JavaScript、HTML、CSS和Shell脚本,主要用于文档转换和...

    bboss 安全认证过滤器功能介绍

    BBoss安全认证过滤器是Java Web开发中一种用于实现用户身份验证和权限控制的重要组件。在Web应用程序中,过滤器(Filter)是Servlet规范的一部分,它允许开发者在请求到达目标Servlet或JSP之前进行预处理,以及在...

    springboot整合bboss es增删改查测试demo代码

    本实例是一个基于bboss es spring boot starter的demo maven工程,可供spring boot项目集成bboss elasticsearch rest client参考 展示了通过spring boot管理单集群功能和管理多集群功能 单集群测试用例:...

    bboss会话共享培训文档

    bboss会话共享是一种分布式会话管理技术,它针对在集群环境下应用部署时如何解决会话数据丢失和单点登录问题提供了专门的解决方案。根据提供的文档内容,我们可以详细探讨bboss会话共享涉及的关键知识点。 首先,...

    bboss mvcdemo 下载地址

    4. **AOP(面向切面编程)**:BBoss MVCDemo支持AOP,可以实现如事务管理、日志记录、权限控制等功能,提高代码的复用性和可维护性。 5. **国际化与本地化**:框架内置了国际化和本地化支持,使得应用可以根据用户...

    bboss-elasticsearch开发环境搭建和开发入门视频教程.

    2. **插入数据**: 将业务数据插入到索引中,BBoss 提供了批量插入功能,可以高效处理大量数据。 3. **查询数据**: 构建查询条件,通过 BBoss API 发送请求并解析返回结果。 4. **更新和删除**: 更新已存在的文档,...

    企业级J2EE开源框架bboss

    2. **数据库操作**:BBoss提供了便捷的数据访问层(DAO),支持SQL动态生成、事务管理以及多种数据库的兼容性,使得数据库操作变得简单且高效。 3. **服务治理**:框架内置了服务注册与发现机制,可以实现微服务...

    springboot集成ElasticsearchBboss调用Elasticsearch.md

    springboot集成ElasticsearchBboss调用Elasticsearch的案例分享

    bboss-db-elasticsearch-tool-master_java_

    【bboss-db-elasticsearch-tool-master_java_】是一个Java ORM(对象关系映射)框架,它在功能上超越了MyBatis,提供了对多种数据库的广泛支持,包括MySQL、Oracle、PostgreSQL、SQLServer、DB2、DM以及MongoDB。...

    bboss persistent 1.0.2中方便地实现大字段(clob,blob)的处理

    BBoss Persistent是一个轻量级的持久层框架,它提供了方便的方式来处理这些大字段。本文将深入探讨在BBoss Persistent 1.0.2中如何高效地管理CLOB和BLOB数据。 首先,CLOB用于存储大量的文本数据,如长篇文章或XML...

    bboss+es基本操作示例.zip

    2. **bboss框架** bboss是针对企业级应用开发的轻量级框架,其对Elasticsearch的封装简化了开发过程,提供了简单易用的API接口。bboss支持JDBC式的操作方式,使得开发者可以像操作数据库一样操作Elasticsearch,...

    bboss elasticsearch-5.7.8.rar

    2. `jackson-databind-2.9.8.jar`:Jackson是JSON处理库,`databind`模块实现了将Java对象映射到JSON和反向映射的功能,对于Elasticsearch的数据导入和导出非常关键。 3. `bboss-util-5.5.0.jar`和`bboss-...

    J2EE企业级开源框架bboss v5.0.6.8

    bboss功能涵盖ioc,mvc,jsp自定义标签库,持久层,全局事务托管,安全认证,SSO,web会话共享,cxfwebservice服务发布和管理,hessian服务发布和管理等功能。另外还提供了符合中国式自由流的bboss activiti工作流...

    由 bboss 开源的数据采集同步ETL工具,提供数据采集、数据清洗转换处理和数据入库以及数据指标统计计算流批一体化处理功能

    bboss-datatran 由 bboss 开源的数据采集&流批一体化工具,提供数据采集、数据清洗转换处理和数据入库以及数据指标统计计算流批一体化处理功能。 同时也是一个高性能Elasticsearch orm 客户端,100%兼容es各个版本 ...

    bboss ioc配置文件中使用外部属性文件介绍

    BBoss是一个轻量级的企业级应用开发框架,提供了IOC(Inversion of Control)功能,使得对象之间的依赖关系可以通过配置文件进行管理。本文将详细介绍如何在BBoss的IOC配置文件中引用外部属性文件,以便更好地管理和...

    bboss会话共享培训文档分享

    它遵循Servlet 2/3规范API,并提供了创建、修改、销毁、查询和监控session的功能。bbosssession支持灵活可扩展的序列化机制,并依赖于分布式缓存技术,如Redis或Mongodb。通过Session存储服务,bbosssession能够实现...

Global site tag (gtag.js) - Google Analytics