(二)SSM中mybatis一对一查询

继续学习~打了一下午酱油,本着首先先跑起来看效果的思想我按最开始的思路查询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;
	}
}
	

listMess.jsp页面

	

用户信息表

id sender sendee mess emo time
${c.id} ${c.sender.id} ${c.sendee.id} ${c.mess} ${c.emo} ${c.time}
启动服务,在地址栏输入 localhost:8080/MySSM/listMess 后结果如图所示 (二)SSM中mybatis一对一查询_第1张图片

发现运行成功,但是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

最后结果

(二)SSM中mybatis一对一查询_第2张图片

还有一对多,以后用到了在实践,初学写的好乱啊~

你可能感兴趣的:(SSM框架)