温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

iBATIS中怎么操作Blob与Clob

发布时间:2021-07-27 16:14:46 来源:亿速云 阅读:204 作者:Leah 栏目:编程语言

iBATIS中怎么操作Blob与Clob,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。


不过在spring 中已经提供了很好的实现,所以这又省去了很多的功夫,接下来看看iBATIS是如何支持Clob和blob的。

iBATIS提供了TypeHandler接口,用于处理数据类型,基本的实现类为BaseTypeHandler

在spring 中,提供了AbstractLobTypeHandler作为基础类,并且提供了相应的模版方法,所有的工作由LobHandler处理。

BlobByteArrayTypeHandler 主要用于处理blob类型数据,使用byte[]来映射相应的Blob

ClobStringTypeHandler 用于处理Clob类型数据,使用字符串来映射Clob

有一点需要注意的是,AbstractLobTypeHandler中实现了事务支持,需要用来释放相应的资源,所以一定需要在事务环境中进行。

下面是一个简单的例子:

public class Food {   private String content;    private String id;    private byte[] image;    private String name;         ...   }

xml如下:说明一下,在resultMap中可以通过typeHandler来指定具体的handler.在inline变量中,可以通过handler来定义相应的typeHandler

﹤sqlMap namespace="Food"﹥           ﹤typeAlias alias="Food" type="org.esoft.hdb.bo.Food"/﹥      ﹤resultMap id="foodResult" class="Food"﹥     ﹤result property="id" column="C_ID"/﹥     ﹤result property="name" column="C_NAME"/﹥     ﹤result property="content" column="C_content"    typeHandler="org.springframework.orm.ibatis.support.ClobStringTypeHandler"/﹥     ﹤result property="image" column="C_image"    typeHandler="org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler"/﹥      ﹤/resultMap﹥      ﹤sql id="foodFragment"﹥select C_ID,C_NAME,C_CONTENT,C_IMAGE from T_FOOD﹤/sql﹥     ﹤select id="getAll" resultMap="foodResult"﹥     ﹤include refid="foodFragment"/﹥      ﹤/select﹥      ﹤select id="selectById" parameterClass="string" resultMap="foodResult"﹥     ﹤include refid="foodFragment"/﹥ where C_ID=#id#﹤/select﹥           ﹤insert id="insert" parameterClass="Food"﹥ insert into T_FOOD ( C_ID,     C_NAME,C_CONTENT, C_IMAGE) values ( #id#,     #name#,#content,handler=org.springframework.orm.ibatis.support.ClobStringTypeHandler#,     #image,handler=org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler#)     ﹤/insert﹥           ﹤update id="update" parameterClass="Food"﹥ update T_FOOD set C_NAME = #name#,     C_CONTENT =     #content,handler=org.springframework.orm.ibatis.support.ClobStringTypeHandler#,     C_IMAGE =     #image,handler=org.springframework.orm.ibatis.support.BlobByteArrayTypeHandler#     where C_ID = #id# ﹤/update﹥           ﹤delete id="deleteById" parameterClass="string"﹥ delete from T_FOOD where C_ID = #id#     ﹤/delete﹥        ﹤/sqlMap﹥     public interface FoodService {         void save(Food food);   Food get(String id);   /**   * @param food   */   void update(Food food);   }    public class FoodServiceImpl implements FoodService {   private FoodDAO foodDAO;    private DaoCreator creator;    public void setCreator(DaoCreator creator) {       this.creator = creator;   }    protected FoodDAO getFoodDAO() {       if (foodDAO == null) {      foodDAO = (FoodDAO) creator.createDao(FoodDAO.class, Food.class);       }       return foodDAO;   }    public Food get(String id) {       return getFoodDAO().get(id);   }   public void save(Food food) {       getFoodDAO().save(food);   }   public void update(Food food) {       getFoodDAO().update(food);   }    }    spring xml 配置:     。。。    ﹤bean id="lobHandler"     class="org.springframework.jdbc.support.lob.DefaultLobHandler"/﹥           ﹤bean id="transactionManager"     class="org.springframework.jdbc.datasource.DataSourceTransactionManager"﹥     ﹤property name="dataSource" ref="dataSource"/﹥      ﹤/bean﹥           ﹤bean id="sqlMapClient"     class="org.springframework.orm.ibatis.SqlMapClientFactoryBean"﹥     ﹤property name="dataSource" ref="dataSource"/﹥     ﹤property name="configLocation"﹥    ﹤value﹥SqlMapConfig.xml﹤/value﹥     ﹤/property﹥     ﹤property name="lobHandler" ref="lobHandler"/﹥      ﹤/bean﹥           ﹤bean id="daoCreate" class="org.esoft.hdb.ibatis.IbatisDaoCreator"﹥     ﹤property name="sqlMapClient" ref="sqlMapClient"/﹥      ﹤/bean﹥           ﹤bean id="foodService" class="org.esoft.hdb.service.FoodServiceImpl"﹥     ﹤property name="creator" ref="daoCreate"/﹥      ﹤/bean﹥                ﹤aop:config﹥     ﹤aop:pointcut id="foodServiceMethods"    expression="execution(* org.esoft.hdb.service.FoodService.*(..))"/﹥     ﹤aop:advisor advice-ref="txAdvice" pointcut-ref="foodServiceMethods"/﹥      ﹤/aop:config﹥      ﹤tx:advice id="txAdvice" transaction-manager="transactionManager"﹥     ﹤tx:attributes﹥    ﹤tx:method name="*" propagation="REQUIRED"/﹥     ﹤/tx:attributes﹥      ﹤/tx:advice﹥

简单的测试:

save :       Food food = new Food();       food.setPk("1");       food.setName("food1");       BufferedInputStream in = new BufferedInputStream(getClass()     .getResourceAsStream("/1.gif"));       byte[] b = FileCopyUtils.copyToByteArray(in);       food.setImage(b);     in = new BufferedInputStream(getClass().getResourceAsStream(     "/hibernate.cfg.xml"));       b = FileCopyUtils.copyToByteArray(in);       food.setContent(new String(b));       foodService.save(food);   update:   Food food = foodService.get("1");       BufferedInputStream in = new BufferedInputStream(getClass()     .getResourceAsStream("/jdbc.properties"));       byte[] b = FileCopyUtils.copyToByteArray(in);       food.setContent(new String(b));       foodService.update(food);       food = foodService.get("1");       assertNotNull(food.getImage());

关于iBATIS中怎么操作Blob与Clob问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI