- 評論對象的封裝:
```
private String messageId;評論ID
private String messageContent;評論內容
private String uId;用戶ID
private String goodId;評論物品ID
private Integer isFirstMessage;第一條評論ID(建議可改為或添加‘是否為回復評論isAnswser’,返回為Boolean類型)
private String refmessageId;回復評論ID
private Date date;發布時間
private String formateDate;格式化后的時間
private String firstRefmessageId;
private User user;用戶(根據uId得到)
private Message refMessage;回復的評論(根據refMessageId得到)
private List<Message> answers;所有回復該評論的評論
```
- Mybatis中mapper文件的sql語句:
1. 首先是根據物品的pid搜索所有的非回復評論,并根據評論時間進行降序排序。
```
<!-- 根據productId查詢所有首條留言的message對象 -->
<select id="selectByProductId"
parameterType="com.hudong.crud.bean.Message" resultMap="BaseResultMap2">
select
<include refid="Base_Column_List" />
from message
where good_id = #{goodId,jdbcType=VARCHAR} And
is_first_message = #{isFirstMessage,jdbcType=INTEGER}
order by date DESC
</select>
```
2. 其次是搜索每一條留言是否有回復留言并根據留言MessageId搜索出所有的回復留言,根據留言時間進行降序排序。(該sql語句使用的是分步查詢,使用collection標簽,映射封裝對象answers)
```
<collection property="answers"
select="com.hudong.crud.dao.MessageMapper.selectByFirstRefMessageId"
column="message_id">
</collection>
```
```
<!-- 根據firstRefmessageId查詢所有的message對象 -->
<select id="selectByFirstRefMessageId" parameterType="java.lang.String"
resultMap="BaseResultMap2">
select
<include refid="Base_Column_List" />
from message
where first_refmessage_id = #{firstRefmessageId,jdbcType=VARCHAR}
order by date DESC
</select>
```
3. 根據回復留言所回復的留言ID查詢到所回復留言的數據(使用分步查詢,association 標簽,映射封裝對象refMessage)
```
<association property="refMessage"
select="com.hudong.crud.dao.MessageMapper.selectByPrimaryKey"
column="refmessage_id">
</association>
```
- 頁面具體測試:

*****
可以根據不同的需求進行改進,比如可以把回復做成可收放的形式。