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; }