最近在自学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();
}
}