论坛首页 Java企业应用论坛

bbossgroups 3.x持久层行处理器使用示例

浏览 2189 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-09-20   最后修改:2011-09-23
bbossgroups 3.x持久层行处理器使用示例

1.概述
行处理主要用来提供灵活高效的查询结果处理方法,下面着重介绍一下三种主要行处理器:空行处理器、返回值行处理器以及字段行处理器。
1.1 空行处理器-灵活度最高的行处理器,结果集全部自行封装,框架干预少
com.frameworkset.common.poolman.handle.NullRowHandler
空行处理器适用于
1.2.返回值行处理器-框架负责返回数据集,记录字段转换为值对象自行处理
com.frameworkset.common.poolman.handle.RowHandler
1.3.字段行处理器-对单个字段进行行级处理,并将处理值发挥给调用程序,字段行处理器主要用来处理blob和clob大字段类型的单字段查询功能,消除不同的数据库对大字段处理的差异性
com.frameworkset.common.poolman.handle.FieldRowHandler


2.使用方法

2.1 空行处理器
map方式
public Map<String,String> getUserDeskMapMenus(DeskTopMenuBean bean)
	throws Exception {
		String sql = "SELECT menupath,subsystem,userid FROM TD_SM_DESKMENU WHERE userid=#[userid] and subsystem=#[subsystem]";
		final Map<String,String> datas = new HashMap<String,String>();
		SQLExecutor.queryBeanWithDBNameByNullRowHandler(new NullRowHandler(){

			@Override
			public void handleRow(Record origine) throws Exception
			{
				datas.put(origine.getString("menupath"), origine.getString("subsystem"));
				
				
			}}, dbname,sql , bean);
		return datas;
	}

list方式
final List<ListBean> lbs = new ArrayList<ListBean>();
SQLExecutor.queryWithDBNameByNullRowHandler(new NullRowHandler(){

			@Override
			public void handleRow(Record record) throws Exception {
				
				ListBean lb = new ListBean();
				lb.setId(record.getInt("id"));
				lb.setFieldName(record.getString("fieldName"));
				lbs.add(lb);
			}}, "mysql", "select * from LISTBEAN where id>?", 80);


2.2 返回值行处理器
String sql = "select * from LISTBEAN where ID>?";
		List<ListBean> beans = (List<ListBean>) SQLExecutor.queryListByRowHandler(new RowHandler<ListBean>(){

			@Override
			public void handleRow(ListBean lb, Record record)
					throws Exception {
				System.out.println("queryListByRowHandler test Result**:"+record.getString("fieldName"));
				
				lb.setId(record.getInt("id"));
				lb.setFieldName(record.getString("fieldName"));
				
			}}, ListBean.class, sql, 80);


2.3 字段行处理器
字段行处理器实现从blob/clob中获取单个字段文件对象的处理,其他类似类型数据也可以使用FieldRowHandler,使用示例如下:
public File getDownloadClobFile(String fileid) throws Exception
	{
		try
		{
			return SQLExecutor.queryTField(
											File.class,
											new FieldRowHandler<File>() {

												@Override
												public File handleField(
														Record record)
														throws Exception
												{

													// 定义文件对象
													File f = new File("d:/",record.getString("filename"));
													// 如果文件已经存在则直接返回f
													if (f.exists())
														return f;
													// 将blob中的文件内容存储到文件中
													record.getFile("filecontent",f);
													return f;
												}
											},
											"select filename,filecontent from CLOBFILE where fileid=?",
											fileid);
		}
		catch (Exception e)
		{
			throw e;
		}
	}


几种常用的使用方法就介绍完了,同时我们还可以结合行处理器完成分页查询,这里就不多说,更进一步的内容请关注博客动态。
   发表时间:2011-12-03  
bbossgroups 的持久层 接口 方法参数名没命名好 有多个接口而且个接口 命名不统一  用得很痛苦
0 请登录后投票
   发表时间:2011-12-03   最后修改:2011-12-03
itfirefly 写道
bbossgroups 的持久层 接口 方法参数名没命名好 有多个接口而且个接口 命名不统一  用得很痛苦


痛并快乐着,能具体一点吗?
0 请登录后投票
   发表时间:2011-12-04  
yin_bp 写道
itfirefly 写道
bbossgroups 的持久层 接口 方法参数名没命名好 有多个接口而且个接口 命名不统一  用得很痛苦


痛并快乐着,能具体一点吗?

com.frameworkset.common.poolman.ConfigSQLExecutor.queryListInfo(Class<?> beanType, String sql, long offset,int pagesize,Object... fields) throws SQLException

比如这个方法 我没弄错的话 sql 应该是 sqlname 的把 因为接口没有注释 我第一天用的时候我就纠结 是穿sql语句 还是 sql配置文件的sql语句的名字呢。

0 请登录后投票
   发表时间:2011-12-04   最后修改:2011-12-04
itfirefly 写道


com.frameworkset.common.poolman.ConfigSQLExecutor.queryListInfo(Class<?> beanType, String sql, long offset,int pagesize,Object... fields) throws SQLException

比如这个方法 我没弄错的话 sql 应该是 sqlname 的把 因为接口没有注释 我第一天用的时候我就纠结 是穿sql语句 还是 sql配置文件的sql语句的名字呢。



恩,com.frameworkset.common.poolman.ConfigSQLExecutor和com.frameworkset.common.poolman.SQLExecutor两个组件的主要区别就是ConfigSQLExecutor所有api的参数sql对应的是一个sql配置文件中的sql语句别名,例如:
<property name="updatesqltemplate"><![CDATA[update LISTBEAN  set FIELDNAME = #[fieldName] where id = #[id] ]]>
	</property>


sql对应的值就是updatesqltemplate,而不是sql语句,否则就会报错。SQLExecutor组件中的方法都是静态方法,直接传递sql语句即可。


非常抱歉,下个版本我会把参数名称都改过来。可以看看两篇介绍这两个组件的文档

bbossgroups持久层框架ConfigSQLExecutor组件api实例
bbossgroups 3.1 SQLExecutor组件api使用实例

0 请登录后投票
论坛首页 Java企业应用版

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