论坛首页 Java企业应用论坛

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

浏览 1826 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-11-19   最后修改:2012-11-19
本文详细介绍bboss持久层返回mysql自增主键功能
注意:本文适用于bboss 3.6.0分支2012-11-16日以后的版本,如果升级该版本需要重新编译使用了ConfigSQLExecutor和SQLExecutor两个组件的dao程序。

首先,我们在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方法最后带了一个boolean类型参数,
		//这个方法是专门为返回自增主键而新增的一个api,true表示返回自增主键,false,表示不返回,默认为false
		GetCUDResult ret = (GetCUDResult)SQLExecutor.insertBean("insert into demo(name) values(#[name])", demo,true);
		//通过GetCUDResult对象的getKeys方法获取主键,并将主键设置到demo对象中
		demo.setId((Long)ret.getKeys());
		//更新刚添加的记录
		demo.setName("newname");	
		//upret是一个数字类型,表示更新成功的记录数
		Object upret = SQLExecutor.updateBean("update demo set name=#[name] where id=#[id]", demo);


2.多条记录预编译批处理插入并返回自增主键
//构建多条记录
		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方法最后带了一个boolean类型参数,
		//这个方法是专门为返回自增主键而新增的一个api,true表示返回自增主键,false,表示不返回,默认为false
		GetCUDResult ret = SQLExecutor.insertBeans("insert into demo(name) values(#[name])", datas,true);
		//获取自增主键列表(很遗憾,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 = (Integer)ret.getUpdatecount();


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

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

跳转论坛:
Global site tag (gtag.js) - Google Analytics