商品订单数据模型
注意:因为一个订单信息只会是一个人下的订单,所以聪哥查询订单信息出发关联查询用户信息为一对一查询。如果从用户信息出发查询用户下的订单信息则为一对多查询,因为一个用户可以下多个订单。
案例:查询所有用户信息及用户关联的订单信息
用户信息和订单信息为一对多关系。
使用resultMap实现。
1.将存储数据库表orders信息的类Orders对象定义在User对象中(其实本质上就是谁是对应关系前面的一,就将它作为返回类型,将另一个类对象定义在它的里面)。User类的定义内容为:
packagecom.huida.po;importjava.util.Date;importjava.util.List;public classUser {private intid;private String username;//用户姓名
private String sex;//性别
private Date birthday;//生日
private String address;//地址
private Listlist;public ListgetList() {returnlist;
}public void setList(Listlist) {this.list =list;
}public void setId(intid) {this.id =id;
}public voidsetUsername(String username) {this.username =username;
}public voidsetSex(String sex) {this.sex =sex;
}public voidsetBirthday(Date birthday) {this.birthday =birthday;
}public voidsetAddress(String address) {this.address =address;
}public intgetId() {returnid;
}publicString getUsername() {returnusername;
}publicString getSex() {returnsex;
}publicDate getBirthday() {returnbirthday;
}publicString getAddress() {returnaddress;
}
@OverridepublicString toString() {return "User [id=" + id + ", username=" + username + "]";
}
}
2.在UserMapper接口中定义方法:
public List findUserAndOrders();
3.在UserMapper.xml中进行配置:
select a.*,b.id oid,number,createtime
from user a,orders b
where a.id=b.user_id
注意这里使用的是collection标签。
collection部分定义了用户关联的订单信息。表示关联查询结果集
property="list":关联查询的结果集存储在User对象的上哪个属性。
ofType="com.huida.po.Orders":指定关联查询的结果集中的对象类型即List中的对象类型。此处可以使用别名,也可以使用全限定名。
及的意义同一对一查询。
4.测试代码:
packagecom.huida.test;importjava.io.IOException;importjava.io.InputStream;importjava.util.ArrayList;importjava.util.List;importjavax.management.Query;importorg.apache.ibatis.io.Resources;importorg.apache.ibatis.session.SqlSession;importorg.apache.ibatis.session.SqlSessionFactory;importorg.apache.ibatis.session.SqlSessionFactoryBuilder;importorg.junit.Before;importorg.junit.Test;importorg.omg.PortableInterceptor.USER_EXCEPTION;importcom.huida.mapper.UserMapper;importcom.huida.po.Orders;importcom.huida.po.User;importcom.huida.po.UserOrders;importcom.huida.vo.QueryVo;public classUserMapperTest {private SqlSessionFactory factory=null;
@Beforepublic void init() throwsException{//通过流将核心配置文件读取进来
InputStream inputStream=Resources.getResourceAsStream("config/SqlMapConfig.xml");//通过核心配置文件输入流来创建工厂
factory=newSqlSessionFactoryBuilder().build(inputStream);
}
@Testpublic voidtestfindUserAndOrders(){//创建SqlSession
SqlSession openSession=factory.openSession();//通过会话的getMapper方法来实例化接口(实现类的对象)
UserMapper userMapper=openSession.getMapper(UserMapper.class);//参数放接口的字节码文件
List list=userMapper.findUserAndOrders();for(User user:list){
System.out.println(user.getUsername()+"...."+user.getList());
}
}
}