使用hibernate保存blob大数据,ibatis查询blob大数据

7 篇文章 0 订阅
3 篇文章 0 订阅
 


需求:将对象序列化,保存到数据库中,数据库设计用blob数据类型,使用oracle数据库,使用hibernate保存blob大数据,ibatis查询blob大数据.

 

部分代码献上:

一、存:

1、要保存的类:class SaveQueryBO implements Serializable

 

2、将对象转换成blob格式:Blob saveQueryBo= Hibernate.createBlob(SearchUtil.objectToByte(saveQueryBO));

3、hibernate配置:

<property name="saveQueryBo" column="SAVE_QUERY_BO" type="java.sql.Blob"
   not-null="false"
  />

4、save这个就不贴了;完事儿

 

二、取

1、ibatis配置

<result property="saveQueryBo" column="save_Query_Bo" jdbcType="BLOB" javaType = "java.lang.Object"/>

说明下:

javaType = "java.lang.Object"必须是这个,不然报你写个handler吧~

2、相应类:

private Object  saveQueryBo;

 

saveQueryBo虽然是blob类型的,但是必须写成object的,同上1点;

3、查询,转换

if(saveQueryBo != null){
    Blob  saveQueryBoBlob = (Blob)saveQueryBo;
    return (SaveQueryBO)SearchUtil.byteToObject(SearchUtil.blobToByte(saveQueryBoBlob));
   }

 

完整代码:

 

 


import java.sql.Blob;


public class SaveQueryVO {

	private String tableKey;//主键
	private String queryName;//查询名称
	private String userCode;//用户编号
	private String custType;//客户类型
	private Object  saveQueryBo;//搜索相关类
	private String  sql;//sql
	
	
	public String getSql() {
		return sql;
	}
	public void setSql(String sql) {
		this.sql = sql;
	}
	/**
	 * 返回的是 BLOB对象,需要强转
	 */
	public Object getSaveQueryBo() {
		return saveQueryBo;
	}
	
	/**
	 * 返回的是 SaveQueryBO对象
	 * @throws CrmBaseException 
	 */
	public SaveQueryBO getSaveQueryBO() throws CrmBaseException {
		try {
			if(saveQueryBo != null){
				Blob  saveQueryBoBlob = (Blob)saveQueryBo;
				return	(SaveQueryBO)SearchUtil.byteToObject(SearchUtil.blobToByte(saveQueryBoBlob));
			}
		} catch (Exception e) {
			e.printStackTrace();
			//TODO 
			throw new CrmBaseException("系统错误");
		}
		return null;
	}
	
	public void setSaveQueryBo(Object saveQueryBo) {
		this.saveQueryBo = saveQueryBo;
	}
	public String getCustType() {
		return custType;
	}
	public void setCustType(String custType) {
		this.custType = custType;
	}
	
	
	public String getTableKey() {
		return tableKey;
	}
	public void setTableKey(String tableKey) {
		this.tableKey = tableKey;
	}
	public String getQueryName() {
		return queryName;
	}
	public void setQueryName(String queryName) {
		this.queryName = queryName;
	}
	public String getUserCode() {
		return userCode;
	}
	public void setUserCode(String userCode) {
		this.userCode = userCode;
	}
	
	
}



import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.sql.Blob;


public class SearchUtil {

	/**'
	 * 获得搜索主表code
	 * @return
	 */
	public static String getMainTableCode(){
		return SearchConstant.MAIN_TABLE_CODE_PE_VALUE;
	}
	
	/**
	 * 
	 * @param columnType
	 * @param columnValue
	 * @return
	 * @throws CrmBaseException
	 */
	public static String getColumValue4Sql(String columnType,String columnValue) throws CrmBaseException{
		//当类型为数字
		if(SearchConstant.COLUMNTYPE_NUMBER.equals(columnType) || SearchConstant.COLUMNTYPE_DOUBLE.equals(columnType)){
			if(StringUtil.isEmpty(columnValue)){
				return "0";
			}else{
				return columnValue;
			}
		} else if(SearchConstant.COLUMNTYPE_DATE.equals(columnType)){//当类型为日期
			if(StringUtil.isEmpty(columnValue)){
				return "''";
			}else{
				return "to_date('"+columnValue+"','yyyy-MM-dd')";
			}
		}else{//默认
			if(StringUtil.isEmpty(columnValue)){
				return "''";
			}else{
				return "'"+columnValue+"'";
			}
		}
	}
	/**
	 * 将对象转化为字节流
	 * @param obj
	 * @return
	 * @throws Exception
	 */
	public static byte[] objectToByte(Object object) throws CrmBaseException {
		try{
			if (object == null)       return null;
			ByteArrayOutputStream bos = new ByteArrayOutputStream();
			ObjectOutputStream oos = new ObjectOutputStream(bos);
			oos.writeObject(object);
			byte[] bytes = bos.toByteArray();
			bos.close();
	        oos.close();
			return bytes;
		}catch (Exception e) {
			e.printStackTrace();
			throw new CrmBaseException(e.getMessage());
		}
	}
	/**
	 * 将字节流转化为对象
	 * @param bytes
	 * @return
	 * @throws Exception
	 */
	public static Object byteToObject(byte[] bytes) throws Exception {
		if (bytes==null) return null;
		ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
        ObjectInputStream ois = new ObjectInputStream(bis);
        Object object = ois.readObject();
        bis.close();
        ois.close();
		return object;
	}
	public static byte[] blobToByte(Blob blob) {
		if (blob == null)     return null;
		byte[] listByte = null;
        try {
            BufferedInputStream is = new BufferedInputStream(blob.getBinaryStream());
            int len = (int)blob.length();
            listByte = new byte[len];
            int offset = 0;
            int read = 0;
            while (offset < len && (read=is.read(listByte,offset,len-offset)) >= 0) {
                offset += read;
            }
		} catch (Exception e) {
			e.printStackTrace();
		}
		return listByte;
	}
}


 

<resultMap id="saveQueryVO" class="SaveQueryVO">
		<result property="tableKey" column="table_Key" />
		<result property="queryName" column="query_Name" />
		<result property="userCode" column="user_Code" />
		<result property="custType" column="cust_Type" />
		<result property="saveQueryBo" column="save_Query_Bo" jdbcType="BLOB" javaType = "java.lang.Object"/>
		<result property="sql" column="sql" />
</resultMap>


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值