lobHandlerを利用して、LOB列のクエリを実現します。

1270 ワード

Springによって提供されるDefault LobHandlerは、lobタイプのデータ列を関連する動作に使用することができる。下記のコードの通り、イメージアップします。code列のデータタイプはblobで、以下のコードはクエリーの例を示しています。

public byte[] queryUserImage(String targetUserId) {
	String sql = "SELECT image_code FROM pf_image WHERE user_id = ?";
	final String BLOB_KEY = "BLOB";
	@SuppressWarnings({ "unchecked", "rawtypes" })
	List<Map<String, byte[]>> list = jdbcTemplate.query(sql, new Object[] { targetUserId }, new RowMapper() {
		public Object mapRow(ResultSet rs, int i) throws SQLException {
			Map<String, byte[]> results = new HashMap<String, byte[]>();
			byte[] byteArr = lobHandler.getBlobAsBytes(rs, "image_code");
			results.put(BLOB_KEY, byteArr);
			return results;
		}
	});
	return list.get(0).get(BLOB_KEY);
}
もちろん、SQLコードを作成してlobタイプの列を操作することを表示したくないなら、ORMフレーム自体が提供するマッピング機構によって従来の動作が可能である。JPA標準の@LOB注解のようです。

private byte[] userImage;

@Lob
@Basic(fetch = FetchType.LAZY)
@Column(name = "user_image", columnDefinition = "BLOB")
public byte[] getUserImage() {
	return userImage;
}