mybatis blob 操作

          最近在自学mybatis,遇到图片保存的问题,百度谷歌(不要说这个网站不存在,用翻墙浏览器还是可以进的)了无数次,写比较简单,读基本没有一个可以用,也许是我没有找到吧。自己动手,丰衣足食,主体不算很难,只要把图片对应的类型弄对就可以了,里面多的是文件操作,借助于commons-io我们可以简化操作。废话不多说,直接进入正题。

  表结构:

    mapper文件,只有一个添加与查询操作,为了方便,查询参数我写死了。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="pkg.cx.vo.ImgMapper">	
	<insert id="insertImg" parameterType="pkg.cx.vo.Img">
		insert into img(imgfile) values (#{img,jdbcType=BLOB})
	</insert>
	
	<select id="findById" resultMap="findByIdMap">
		select id,imgfile from img where id=2
	</select>
	
	<resultMap type="pkg.cx.vo.Img" id="findByIdMap">
		<id property="id" column="id" />
		<result property="img" column="imgfile" jdbcType="BLOB" />
	</resultMap>
	
</mapper>
         实体类

package pkg.cx.vo;

public class Img {
	
	private int id;	
	private byte[] img;	
	
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public byte[] getImg() {
		return img;
	}

	public void setImg(byte[] img) {
		this.img = img;
	}
}

      实现测试类

package pkg.cx.test;

import java.io.File;
import java.io.Reader;

import org.apache.commons.io.FileUtils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import pkg.cx.util.MyBatisUtil;
import pkg.cx.vo.Img;

public class Test {

	public static void main(String[] args) throws Exception {
		//insert();
		query_pause();
	}

	private static void query_pause() throws Exception {
		SqlSession session=MyBatisUtil.getSession();
		String statement="pkg.cx.vo.ImgMapper.findById";
		
		Img img=new Img();
		File f=new File("C:"+File.separator+"2.png");
		img=session.selectOne(statement);
		byte[] blob=img.getImg();
				
		FileUtils.writeByteArrayToFile(f, blob);
		session.close();
	}

	private static void insert() throws Exception {
		String conf="conf.xml";
		Reader reader=Resources.getResourceAsReader(conf);
		SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
		SqlSession session=factory.openSession();
		String statement="pkg.cx.vo.ImgMapper.insertImg";
		
		File f=new File("C:"+File.separator+"Red_Hat.png");
		Img imginfo=new Img();
		imginfo.setId(-1);
		imginfo.setImg(FileUtils.readFileToByteArray(f));
		session.insert(statement,imginfo);
		session.commit();
	}

}


</pre><p></p><pre>
这里为了简化IO操作,我用到了comons-io.jar,还一工具类我也粘贴出来吧

package pkg.cx.util;

import java.io.Reader;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

public class MyBatisUtil {
	
	public static SqlSessionFactory getFactory() throws Exception{
		String conf="conf.xml";
		Reader reader = Resources.getResourceAsReader(conf);
		SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(reader);
		return factory;
	}
	public static SqlSession getSession() throws Exception{
		return getFactory().openSession();
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MyBatis是一个开源的持久层框架,它可以与关系数据库进行交互。在MyBatis中,可以使用BLOB(Binary Large Object)来存储和获取大量的二进制数据。 当我们需要将二进制数据存储到数据库中时,可以使用MyBatisBLOB类型来声明相应的属性。在数据库表中,我们可以使用BLOB、BINARY或VARBINARY类型来存储二进制数据。在MyBatis的映射文件中,我们可以使用BLOB类型来和数据库对应的字段进行映射。 在存储二进制数据之前,我们需要将其转换成字节数组。可以使用InputStream或File对象来获取二进制数据,然后将其转换成字节数组,再使用MyBatisBLOB对象进行存储。 在映射文件的insert语句中,我们可以使用#{blobProperty,jdbcType=BLOB}来指定BLOB类型的属性,并通过#{blobProperty}来引用该属性。当执行插入操作时,MyBatis会将字节数组转换为二进制数据,并存储到数据库中的BLOB字段中。 在查询二进制数据时,可以使用select语句查询到对应的BLOB字段。在映射文件中,我们可以使用#{blobProperty,jdbcType=BLOB}来接收查询结果,并通过#{blobProperty}来引用该属性。当执行查询操作时,MyBatis会将数据库中的BLOB字段转换为字节数组,并赋值给相应的属性。 总而言之,使用MyBatis存取BLOB数据需要将其转换成字节数组进行存储,然后在查询时将字节数组转换为对应的二进制数据。使用BLOB类型来声明属性,可以方便地进行数据库交互,实现对二进制数据的存储和获取。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值