`

使用ibatis调用数据库中blob类型的数据

 
阅读更多

目标:

在oracle里建一个字段,存储为一个blob类型,用于存储图片或者是其它格式的流信息或大数据,数据库中间件使用ibatis,主要做图片的存储使用,服务器使用weblogic

实现的时候碰到的问题:

ibatis对blob类型的数据有一个专门的支持.需要配置相关的配置文件,框架中使用了部分Spring的配置,在读出的图片进行写入的时候碰到问题为不能正确write到页面上,后使用纯servlet进行解决。此为weblogic对文件有拦截

具体配置如下。

ApplicationContext.xml中增加以下配置

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource">
   <ref bean="dataSource"/>
  </property>
 </bean>
 <bean id="transactionManagerRootProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
  <property name="transactionManager">
   <ref bean="transactionManager"/>
  </property>
  <property name="proxyTargetClass">
   <value>false</value>
  </property>
  <property name="transactionAttributes">
   <props>
    <prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>

    <prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
    <prop key="select*">PROPAGATION_REQUIRED,readOnly</prop>
   </props>
  </property>
 </bean>

 在ibatis的SqlMap中增加以下配置

<!-- 添加对blob数据类型 的支持 -->
		<typeHandler jdbcType="BLOB" javaType="[B" callback="org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler" />

MYDEMOPLUS.xml配置文件信息,主要是在里边加了一个别名的信息,映射一个pojo

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
	"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="ceshi">
  <cacheModel id="cacheDCWJ_USER" type="LRU">
	<!-- 设定缓存有效期为10秒 -->
		<flushInterval minutes="10" />
		<!-- 本缓存中容纳的最大数据对象数量 -->
		<property name="size" value="100" />
	</cacheModel>
 <typeAlias alias="demoResult" type="net.htjs.zxks.pojo.CeShi" />
 
<!-- 查询语句 ,跟据id查询数据库中的相应数据-->
<select id="showTable" parameterClass="java.util.Map" resultClass="demoResult">
		select * from ceshi where vid=#id#
</select>
<!-- 查询数据库中所有id -->
<select id="select_id" resultClass = "demoResult">
select vid from ceshi
</select>
<!-- 另外一个测试用的select -->
<select id="select_all_id" parameterClass="demoResult" resultClass = "demoResult">
select * from ceshi
</select>
<!-- 插入一个图片进数据库 -->
<insert id="insert_into" parameterClass="demoResult">

  insert into ceshi(vid,name,ceshi) values(#vid#,#name#,#ceshi:BLOB#)
 </insert>
</sqlMap>

 pojo相应的文档CeShi.java,数据库中的blob字段在这里是一个byte流的格式,这样可以适用读写

import java.io.Serializable;

public class CeShi implements Serializable{
	String vid;
	String name;
	//String ceshi;
	byte[] ceshi;
	public String getVid() {
		return vid;
	}
	public void setVid(String vid) {
		this.vid = vid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	/**
	public String getCeshi() {
		return ceshi;
	}
	public void setCeshi(String ceshi) {
		this.ceshi = ceshi;
	}
	**/
	
	public byte[] getCeshi() {
		return ceshi;
	}
	public void setCeshi(byte[] ceshi) {
		this.ceshi = ceshi;
	}
	
	
	
}

 这样配置上基本己经完成,然后就是java代码的编写,可以通过

out = response.getOutputStream(); 
             out.write(text.getCeshi());
             out.flush();
             out.close();

这种方法在页面上读出图片信息

分享到:
评论

相关推荐

    使用ibatis操作大对象,mySQl数据库

    4. **流式处理**:在Java代码中,使用`InputStream`读取图片文件,然后通过`SqlSession`调用Mapper方法,将图片流传递给数据库。这样可以避免一次性加载整个文件到内存中。 5. **查询与下载**:同样,当查询大对象...

    struts2包+ibatis组合+oracle

    它支持复杂的数据类型,如XML、BLOB等,并提供了丰富的性能优化工具,如索引、分区、存储过程等。Oracle还具有高可用性特性,如RAC(Real Application Clusters)和Data Guard,确保系统的稳定运行和数据的安全。 ...

    Data Mapper Guide

    ### 数据映射器指南:iBATIS.NET框架详解 #### 一、简介 **iBATIS.NET**是一款针对.NET平台的...本部分将详细介绍如何在.NET环境中使用iBATIS.NET框架进行开发,包括配置、使用示例等。更多详细信息请参阅官方文档。

    Spring中文帮助文档

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

    Spring API

    6.8.1. 在Spring中使用AspectJ进行domain object的依赖注入 6.8.2. Spring中其他的AspectJ切面 6.8.3. 使用Spring IoC来配置AspectJ的切面 6.8.4. 在Spring应用中使用AspectJ加载时织入(LTW) 6.9. 更多资源 7...

Global site tag (gtag.js) - Google Analytics