继续学习~打了一下午酱油,本着首先先跑起来看效果的思想我按最开始的思路查询Message表
Message表中两字段:sender(发送者),sendee(接受者)为外键,取值为User表中的 id
贴代码先,首先实体类Message、User类,getset方法略去
com.pojo
package com.pojo;
import java.sql.Timestamp;
public class Message {
private int id;
private User sender;//这两个属性
private User sendee;//这两个属性
private String mess;
private String emo;
private Timestamp time;//Timestamp ts=new Timestamp(new Date().getTime());
}
public class User{
private int id;
private String username;
....
}
然后写sql语句,MessageMapper的代码略去了
com.mapper
继续写service类的实现该功能
com.service
package com.impl;
@Service
public class MessageServiceImpl implements MessageService{
@Autowired
private MessageMapper messageMapper;
// 放回某用户所有消息记录
@Override
public List allMessList() {
// TODO Auto-generated method stub
return messageMapper.allMessList();
}
}
然后编写controller类实现跳转,不写太多了,从listmess路径跳转过来,跳到listMess.jsp页面,springmvc和spring的配置没写
com.controller
@Controller
@RequestMapping
public class MessageController {
@Autowired
private MessageServiceImpl messageServiceImpl;
@Autowired
private UserServiceImpl userServiceImpl;
ModelAndView mav = new ModelAndView();
@RequestMapping("/listMess")
public ModelAndView listUser(){
List us = messageServiceImpl.allMessList();
//放入转发参数
mav.addObject("us",us);
//放入jsp路径
mav.setViewName("listMess");
return mav;
}
}
用户信息表
id
sender
sendee
mess
emo
time
${c.id}
${c.sender.id}
${c.sendee.id}
${c.mess}
${c.emo}
${c.time}
启动服务,在地址栏输入 localhost:8080/MySSM/listMess 后结果如图所示
发现运行成功,但是sender和sendee的信息是空的,因为从message表中查到的sender(sendee)是int型数据,message类中sender(sendee)两个属性类型是用户类
类型不一致无法绑定输出不出来,然后就各种百度怎么一对一查询啊啊。首先我们发现sql语句中返回结果是
resultType="com.pojo.Message"
返回简单的可以resultType,对于复杂的查询可以用resultMap(参考https://zhidao.baidu.com/question/452808047.html)
编写resultMap :将从message表中查到的sender(sendee)属性(int型)作为参数继续查该Id所对应的user类并绑定到message类中的sender(sendee)属性(User型),改了结果如下
messageResultMap" type="com.pojo.Message">
getUser">
getUser">
其访问情况是这样的
1、先是请求id为allMessList的select映射,查到message表信息,得到一个id为messageResultMap的ResultMap对象
2、重写messageResultMap,类型是Message类型
3、其中两个association节点表示两个关联属性,虽然没写其余对应的id,result(massage中的id、time属性等等)子节点,但是其仍会把对应的id等属性赋给Message对象
3、Property表示关联了Message中的sender和sendee两个属性,其对应的JAVA类型为com.pojo.User
4、select表示进行哪个select映射来映射对应的关联属性
4、Column表示当前关联对象与Message表中哪列关联,会把通过allMessList查询把从message表中查出的sender(sendee)值作为参数传给子查询getUser
参考http://blog.csdn.net/zhangnana200/article/details/51918082
最后结果
还有一对多,以后用到了在实践,初学写的好乱啊~