Mybatis学习笔记——一对多多表查询
有了上一篇一对一的基础,一对多的学习就简单了。
- 表数据如下:
- orders表:
- user表:
mapper映射文件:
<!-- user对order:一对多 多表查询 public List<User> selectUser2Orders(); --> <resultMap type="User" id="user"> <id column="uid" property="id" /> <result column="name" property="name" /> <!-- collection元素:用于配置一对多关系属性映射 property属性:填写一的一方pojo中对应多的一方的属性名 ofType属性:填写多的一方的实体类型 --> <collection property="orderlist" ofType="Orders"> <id column="id" property="id" /> <result column="number" property="number" /> </collection> </resultMap> <select id="selectUser2Orders" resultMap="user"> select o.id, o.number, u.id as uid, u.name from orders o right join user u on o.user_id=u.id </select>
实体类书写:
// 其他固有属性不变,只是添加了用于表示一对多关系的属性 private List<Orders> orderlist; public List<Orders> getOrdeslist() { return orderlist; } public void setOrdeslist(List<Orders> ordeslist) { this.orderlist = ordeslist; }
Mapper接口:
// user对order:一对多 多表查询 public List<User> selectUser2Orders();
测试代码:
@Test public void testUser2Order() throws Exception { InputStream ins = Resources.getResourceAsStream("SqlMapConfig.xml"); SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(ins); SqlSession session = sessionFactory.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); List<User> userlist = mapper.selectUser2Orders(); for (User user : userlist) { System.out.println(user); } }