我有一些查询返回没有任何对象的数据。
SELECT b.id,
b.publisher_id,
b.name,
b.size,
b.present,
CASE WHEN b.id in (SELECT book_id FROM downloads)
THEN true
ELSE false
END as downloading,
b.display,
b.download_date
FROM books as b
WHERE b.publisher_id = ${pId} AND b.display = true
LIMIT ${pageSize} OFFSET ${startId}
字段downloading
在数据库中没有任何列。
对象b
的映射器是
<resultMap id="bookMap" type="Book">
<id column="id" property="id" />
<result column="publisher_id" property="publisherId" />
<result column="name" property="name" />
<result column="size" property="size" />
<result column="present" property="present" />
<result column="display" property="display" />
<result column="download_date" property="downloadDate" />
</resultMap>
如何为此类对象创建映射器 - 其中部分已存在resultMap
但添加了新列。
答案 0 :(得分:2)
其中一种方法是创建一个新类,其中包含具有下载状态的书:
class BookWithDownloadingStatus {
private Book book;
private boolean downloading;
// I've omitted setters and getters
}
之后,您可以使用此类来映射上述查询的结果:
<resultMap id="bookWithDownloadingStatusMap" type="BookWithDownloadingStatus">
<result column="downloading" property="downloading"/>
<association property="book" resultMap="bookMap"/>
</resultMap>
<select id="getBookWithDownloadingStatus" resultMap="bookWithDownloadingStatusMap">
-- the above select
</select>
顺便说一句,您的查询将无法正确执行分页。数据库不保证任何订单,没有订单限制和抵消几乎是无用的。您应始终指定排序,否则项目可能在页面之间随机分布。