天天看點

bboss持久層行處理器使用介紹

bboss持久層行處理器使用介紹

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);      

直接操作ResultSet的空行處理器使用執行個體:

SQLExecutor.queryWithDBNameByNullRowHandler(
					new ResultSetNullRowHandler() {

						@Override
						public void handleRow(ResultSet rs) throws Exception {
Person person = (Person)super.buildValueObject(  rs,
    			Person.class);//進行o/r mapping綁定
							System.out.println("name = " + rs.getString("name"));
							System.out.println("id = " + rs.getInt("id"));

						}
					}, "test", "select * from person");      

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;
		}
	}      

幾種常用的使用方法就介紹完了,同時我們還可以結合行處理器完成分頁查詢,這裡就不多說,更進一步的内容請關注部落格動态。