(MyBatis)数据库与实体类型转换-BaseTypeHandler(我这里是转换BLOB图片信息)

控制层

@Controller
@RequestMapping("eboard")
public class EboardController {

	@Autowired
	private EboardService eboardService;
	
	@RequestMapping("eboardFrist")
	public ModelAndView initFristPage(Model model) {
		ModelAndView result = new ModelAndView("eboard/eboardFrist");
		model.addAttribute("newImg",
			JSONArray.fromObject(eboardService.listNewImager()));
		result.addObject(model);
		return result;
	}
}

 

mapper.xml,在需要转换的属性后面加typeHandler="com.cyl.mybatisTypeHandler.TypeHandlerBlob2String"(com.cyl.mybatisTypeHandler(包名).TypeHandlerBlob2String(类名))

<select id="listNewImager" resultMap="newImgerMap">
		SELECT f.id, f.img_content, f.img FROM ebd_file f where f.status = 0 order by     f.create_time desc limit 0,3
</select>

<resultMap type="newImger" id="newImgerMap">
		<id property="id" column="id"/>
		<result property="createUserId" column="create_userid"/>
		<result property="createTime" column="create_time"/>
		<result property="updateUserId" column="update_userid"/>
		<result property="updateTime" column="update_time"/>
		<result property="status" column="status"/>
		<result property="imgName" column="img_name"/>
		<result property="imgTitle" column="img_title"/>
		<result property="imgContent" column="img_content"/>
		<result property="imgBase64" column="img" typeHandler="com.cyl.mybatisTypeHandler.TypeHandlerBlob2String"/>
	</resultMap>


TypeHandlerBlob2String 继承BaseTypeHandler,重写方法

package com.cyl.mybatisTypeHandler;

import java.io.ByteArrayInputStream;
import java.io.UnsupportedEncodingException;
import java.sql.Blob;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

public class TypeHandlerBlob2String extends BaseTypeHandler<String> {

	private static final Log LOGGER = LogFactory.getLog(TypeHandlerBlob2String.class);
	// 指定字符集
	private static final String DEFAULT_CHARSET = "utf-8";

	@Override
	public void setNonNullParameter(PreparedStatement ps, int i, String parameter,JdbcType jdbcType)
			throws SQLException {
		ByteArrayInputStream bis;
		try {
			// 把String转化成byte流
			bis = new ByteArrayInputStream(parameter.getBytes(DEFAULT_CHARSET));
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException("Blob Encoding Error!");
		}
		ps.setBinaryStream(i, bis, parameter.length());
	}

	@Override
	public String getNullableResult(ResultSet rs, String columnName) throws SQLException {
		Blob blob = rs.getBlob(columnName);
		byte[] returnValue = null;
		String result = null;
		if (null != blob) {
			returnValue = blob.getBytes(1, (int) blob.length());
		}
		try {
			if (null != returnValue) {
				// 把byte转化成string
				result = new String(returnValue, DEFAULT_CHARSET);
			}
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException("Blob Encoding Error!");
		}
		return result;
	}

	@Override
	public String getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
		Blob blob = cs.getBlob(columnIndex);
		byte[] returnValue = null;
		String result = null;
		if (null != blob) {
			returnValue = blob.getBytes(1, (int) blob.length());
		}
		try {
			if (null != returnValue) {
				result = new String(returnValue, DEFAULT_CHARSET);
			}
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException("Blob Encoding Error!");
		}
		return result;
	}

	/**
	 * @Description:
	 * 
	 * @param arg0
	 * @param arg1
	 * @return
	 * @throws SQLException
	 * 
	 * @see org.apache.ibatis.type.BaseTypeHandler#getNullableResult(java.sql.ResultSet,
	 *      int)
	 * 
	 */

	@Override
	public String getNullableResult(ResultSet rs, int columnName) throws SQLException {
		LOGGER.debug("enter function");
		String result = null;
		Blob blob = rs.getBlob(columnName);
		byte[] returnValue = null;
		if (null != blob) {
			returnValue = blob.getBytes(1, (int) blob.length());
		}
		try {
			// 把byte转化成string
			if (null != returnValue) {
				result = new String(returnValue, DEFAULT_CHARSET);
			}
		} catch (UnsupportedEncodingException e) {
			throw new RuntimeException("Blob Encoding Error!");
		}
		LOGGER.debug("exit function");
		return result;

	}
}

实体类

package com.cyl.model.eboard;

import java.util.Date;

public class NewImger {

	private int id;
	private Integer createUserId;
	private Date createTime;
	private Integer updateUserId;
	private Date updateTime;
	private int status;
	private String imgName;
	private String imgTitle;
	private String imgContent;
	private Object img;
	private String imgBase64;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public Integer getCreateUserId() {
		return createUserId;
	}
	public void setCreateUserId(Integer createUserId) {
		this.createUserId = createUserId;
	}
	public Date getCreateTime() {
		return createTime;
	}
	public void setCreateTime(Date createTime) {
		this.createTime = createTime;
	}
	public Integer getUpdateUserId() {
		return updateUserId;
	}
	public void setUpdateUserId(Integer updateUserId) {
		this.updateUserId = updateUserId;
	}
	public Date getUpdateTime() {
		return updateTime;
	}
	public void setUpdateTime(Date updateTime) {
		this.updateTime = updateTime;
	}
	public int getStatus() {
		return status;
	}
	public void setStatus(int status) {
		this.status = status;
	}
	public String getImgName() {
		return imgName;
	}
	public void setImgName(String imgName) {
		this.imgName = imgName;
	}
	public String getImgTitle() {
		return imgTitle;
	}
	public void setImgTitle(String imgTitle) {
		this.imgTitle = imgTitle;
	}
	public String getImgContent() {
		return imgContent;
	}
	public void setImgContent(String imgContent) {
		this.imgContent = imgContent;
	}
	public Object getImg() {
		return img;
	}
	public void setImg(Object img) {
		this.img = img;
	}
	public String getImgBase64() {
		return imgBase64;
	}
	public void setImgBase64(String imgBase64) {
		this.imgBase64 = imgBase64;
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值