这几天仔细看了一下iBATIS的文档,发现2.2后,iBATIS的改变还是挺大的。对于自定义类型支持的也不错,这样对于blob和Clob数据的处理也就简单多了。
 
不过在spring 中已经提供了很好的实现,所以这又省去了很多的功夫,接下来看看iBATIS是如何支持Clob和blob的。

创新互联是专业的尼河口网站建设公司,尼河口接单;提供成都网站制作、成都网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行尼河口网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
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的情况就像你介绍到这里,希望对你有所帮助。
                当前题目:iBATIS操作Blob与Clob浅析
                
                分享URL:http://www.csdahua.cn/qtweb/news44/217144.html
            
成都网站优化推广公司_创新互联,为您提供网站营销、网站设计公司、网站排名、网站维护、微信小程序、标签优化
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网