我的需求就是想要根据两个人聊天的消息,显示最近沟通的好友列表页面
需求伪代码:
和以下这个问题类似,可参考https://stackoverflow.com/que...
以下代码不保证完全正确,但大概就是这个意思。
@Entity
public class Message {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private Boolean beRead;
private String content;
private Date date;
/**
* 哪个评论的
*/
@ManyToOne
@JoinColumn(name = "user_id", nullable = false)//加入一列作为外键
private User user;
/**
* 评论的哪个用户
*/
@ManyToOne
@JoinColumn(name = "receive_user_id")//加入一列作为外键
private User receiveUser;
}
ChatVO
public class ChatVO {
private User user;
private List<Message> messages;
}
JPA:
@Query(value = "SELECT u,m FROM User u ,Message m WHERE " +
"(m.receiveUser=:user AND m.user=u) OR (m.user = :user AND m.receiveUser = u) " +
"GROUP BY u")
List<ChatVO> queryChats()
如果类结构中没有List的话JPA可以做到自动映射,即以下这种情况
public class ChatVO {
private User user;
private Message message;
}
Mybatis:
也无法自动映射,如果手动设置resultMap则可以,
我觉得这个东西不难啊,为啥各大框架最难得东西都实现了,这个需求没有实现呢?
不就是判断一下如果接受的结果中包含list,就把对应表的数据放进list中么,Message 类的数据hibernate查出来
的时候都是带着表名信息的例如message.xx等等,都有前缀的,所以肯定知道哪些数据对应的是Message类的啊,不明
白的太多,觉得不完美的太多
jpa不是特别了解, 说一下mybatis吧. 在映射过程中, 你的实体类中字段的类型应该是和数据库表中的字段类型一致的, 但是现在主流数据库mysql字段类型是没有list这种类型的. 你的数据库中img这个字段应该是一个字符串类型, 请问字符串类型怎么转成一个list? 转换规则千变万化, 要靠你自己扩展了. 比如mybatis, 提供了对应的字段自动映射接口