- 评论对象的封装:
```
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>
```
- 页面具体测试:
![](https://box.kancloud.cn/95db2baab8cbe95e0a96f0710b5d6c04_1174x783.png)
*****
可以根据不同的需求进行改进,比如可以把回复做成可收放的形式。