商品订单数据模型:
一对一查询:查询所有订单信息,关联查询下单用户信息。
注意:因为一个订单信息只会是一个人去下的订单,所以从查询订单出发关联查询用户信息为一对一查询。如果从用户信息出发查询用户下的订单信息则为一对多查询,因为一个用户可以下多个订单。
1.在UserMapper接口中创建方法:
public List<UserOrders> findOrderAndUser();
2.定义中间类UserOrders,因为查询的结果中既包含User中的信息也包括Orders中的信息,所以我们创建一个UserOrders类来包含这两个表中的所有属性。
由于两个表中的属性太多,所以我们定义两个类,定义类Orders来存储Orders中的属性信息:
package com.huida.po;import java.util.Date;public class Orders { private Integer id; private Integer userId; private String number; private Date createtime; private String note; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public Integer getUserId() { return userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public Date getCreatetime() { return createtime; } public void setCreatetime(Date createtime) { this.createtime = createtime; } public String getNote() { return note; } public void setNote(String note) { this.note = note; } }
定义UserOrders类来继承Orders类,同时在这个类中定义User表中的属性:
package com.huida.po;import java.util.Date;public class UserOrders extends Orders{ private int uid; private String username; private String sex; private Date birthday; private String address; public int getUid() { return uid; } public void setUid(int uid) { this.uid = uid; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
3.在UserMapper.xml中进行配置:
这里应该注意的是:
1.返回类型应该为UserOrders类型
2.select后面的属性应该与UserOrders中定义的属性名相同,否则查找不到。
3.b.id uid的意思是:b.id的别名为uid。
4.测试代码:
@Test public void testfindOrdersAndUsers(){ //创建SqlSession SqlSession openSession=factory.openSession(); //通过会话的getMapper方法来实例化接口(实现类的对象) UserMapper userMapper=openSession.getMapper(UserMapper.class);//参数放接口的字节码文件 Listlist=userMapper.findOrderAndUser(); for(UserOrders userOrders:list){ System.out.println(userOrders.getUsername()+"...."+userOrders.getNumber()); } }
5.小结:
定义专门的po类作为输出类型,其中定义了sql查询结果集所有的字段。此方法较为简单,企业中使用普遍。