SSHのblobへのサポート
先ほど一つの写真をデータベースに保存する問題を解決しました.記録を残して調べます.
1、主な手順
1.1ヒベルナの配置:
1.1.1、hibernateを配置する持久類ファイルで対応するフィールドはbyte[]タイプです.
1.1.2、hibernateを配置するクラスマッピングファイルに対応するフィールドtypeは
org.springfraamework.orm.hibernate 3.support.BlobytearrayType
1.2、springの配置:
1.2.1、native JdbcExtractorを配置すると、以下のようになります.
1.2.2、配置oracleLobHandler
1.2.3、oracleLobHandlerをsession Factoryに加える:
2、ソースコード
2.1.1、テーブル_test_イメージ
<bean id=「native JdbcExtractor」/>
C 3 P 0 NativeJdbcExtractorを使用しました.
dpcp接続池なら、Commons DbcpNativeJdbcExtractorを使います.
接続池を使用していない場合:Simple NativeJdbcExtractor
その他、jboss、weblogic接続池などを使った場合は、専用のExtractorが対応します.
1、主な手順
1.1ヒベルナの配置:
1.1.1、hibernateを配置する持久類ファイルで対応するフィールドはbyte[]タイプです.
1.1.2、hibernateを配置するクラスマッピングファイルに対応するフィールドtypeは
org.springfraamework.orm.hibernate 3.support.BlobytearrayType
1.2、springの配置:
1.2.1、native JdbcExtractorを配置すると、以下のようになります.
1.2.2、配置oracleLobHandler
1.2.3、oracleLobHandlerをsession Factoryに加える:
2、ソースコード
2.1.1、テーブル_test_イメージ
create table TABLE_TEST_IMAGE
(
ID VARCHAR2(40),
FID VARCHAR2(40),
IMG BLOB
)
2.1.2、Image.java
package ie.search.test.model;
public class Image {
private String id;
private String fid;
private byte[] img;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getFid() {
return fid;
}
public void setFid(String fid) {
this.fid = fid;
}
public byte[] getImg() {
return img;
}
public void setImg(byte[] img) {
this.img = img;
}
}
2.1.3、Image.hbm.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<class name="ie.search.test.model.Image" table="TABLE_TEST_IMAGE" >
<id name="id" type="java.lang.String">
<column name="ID" length="40" />
<generator class="sequence">
<param name="sequence">SEQ_TEST_IMAGE</param>
</generator>
</id>
<property name="fid" type="string">
<column name="FID" length="40">
<comment> </comment>
</column>
</property>
<property name="img" type="org.springframework.orm.hibernate3.support.BlobByteArrayType">
<column name="IMG" >
<comment> </comment>
</column>
</property>
</class>
</hibernate-mapping>
2.1.4、springプロファイルセグメント
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<!-- for Oracle9i ojdbc14.jar -->
<bean id="nativeJdbcExtractor" lazy-init="true" class="org.springframework.jdbc.support.nativejdbc.SimpleNativeJdbcExtractor"/>
<bean id="lobHandler" lazy-init="true" class="org.springframework.jdbc.support.lob.OracleLobHandler">
<property name="nativeJdbcExtractor">
<ref bean="nativeJdbcExtractor"/>
</property>
</bean>
<!-- Oracle9i over -->
<!-- for Oracle10g ojdbc14.jar -->
<!--
<bean id="lobHandler" lazy-init="true" class="org.springframework.jdbc.support.lob.DefaultLobHandler">
</bean>
-->
<!-- Oracle10g over -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="lobHandler" ref="lobHandler"/>
<property name="mappingDirectoryLocations">
<list>
<value>classpath*:ie/bsp/modules/commonquery/model/</value>
<value>classpath*:ie/bsp/modules/reference/model/</value>
<value>classpath*:ie/bsp/modules/commcomponent/model/</value>
<value>classpath*:ie/bsp/modules/zone/model/</value>
<value>classpath*:ie/search/feature/featureTick/model/</value>
<value>classpath*:ie/search/feature/featureMosquito/model/</value>
<value>classpath*:ie/search/vector/tick/model/</value>
<value>classpath*:ie/search/feature/featureMouse/model/</value>
<value>classpath*:ie/search/feature/featureFlea/model/</value>
<value>classpath*:ie/perm/model/</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
</props>
</property>
</bean>
</beans>
2.1.5、アクセス画像のactionコードセグメント
public String saveImage(){
FileInputStream fis=null;
Image image=new Image();
image.setFid("1");
byte[] img=null;
try {
File f=new File("d:\\upload\\-1.jpg");
fis=new FileInputStream(f);
byte[] b=new byte[fis.available()];
fis.read(b);
fis.close();
img=b;
image.setImg(img);
imageDao.save2(image);
} catch (Exception e) {
e.printStackTrace();
}
imageDao.save2(image);
return "success";
}
public String readImage(){
System.out.println(this.getClass()+".readImage()...");
Image image=imageDao.get("21");
FileOutputStream fos=null;
try {
fos=new FileOutputStream("d:\\upload\\target1.jpg");
fos.write(image.getImg());
fos.close();
} catch (Exception e) {
e.printStackTrace();
}
return "success";
}
3、注意<bean id=「native JdbcExtractor」/>
C 3 P 0 NativeJdbcExtractorを使用しました.
dpcp接続池なら、Commons DbcpNativeJdbcExtractorを使います.
接続池を使用していない場合:Simple NativeJdbcExtractor
その他、jboss、weblogic接続池などを使った場合は、専用のExtractorが対応します.