mybatis学习4之一对多关联

当查询结果是由多个表组成的,这时就必须手动映射,如order(订单表),user(用户表),以order为中心,一个order只能对应一个user。
sql语句:select o.id,o.user_id,o.number,o.createtime,u.username from user u LEFT JOIN orders o on u.id=o.user_id
一个user可以有多个order,这里是以user为中心,所以无论user是否有order,user都会出现在结果中,因此执行结果:

在这里插入图片描述
在orderMapper配置文件中:

<!-- 一对多关联 -->
  <resultMap type="User1" id="user">
  	<result column="username" property="username"/>
  	<collection property="orderList"  ofType="demo1.Order">
  		<id column="id" property="id"/>
  		<result column="user_id" property="userId"/>
  		<result column="number" property="number"/>
  		<result column="createtime" property="createtime"/>
  		<!-- 如果发生了错误,首先看类属性名与property是否一致 -->
  	</collection>
  </resultMap>
  <select id="selectUser" resultMap="user">
  	  	select o.id,o.user_id,o.number,o.createtime,u.username from user u LEFT JOIN orders o on u.id=o.user_id
  </select>

因为一对多关联,以user为中心,一个user可以对应多个order,所以需要在user对象中添加一个List<-Order->集合

在orderMapper接口中声明方法selectUser:

public interface OrderMapper {
	public List<Order> selectAll();
	
	public List<Order> selectOrder();
	public List<User1> selectUser();
}

测试代码进行测试:

	@Test
	public void oneTomore(){
		SqlSession sqlSession=sqlSessionFactory.openSession();	
		OrderMapper mapper=sqlSession.getMapper(OrderMapper.class);
		List<User1> list=mapper.selectUser();
		for (User1 user1 : list) {
			System.out.println(user1);
		}
	}

因为在User1类中重写了tostring方法,只输出数据库查询结果对应的属性的(因为其他属性为null):

@Override
		public String toString() {
			return "User1 [ username=" + username  + ",  orderList=" + orderList + "]";
		}

所以执行结果:

User1 [ username=王五,  orderList=[Order [id=3, userId=1, number=1000010, createtime=Wed Feb 04 13:22:35 CST 2015, note=null, user=null], Order [id=4, userId=1, number=1000011, createtime=Tue Feb 03 13:22:41 CST 2015, note=null, user=null]]]
User1 [ username=张三,  orderList=[Order [id=5, userId=10, number=1000012, createtime=Thu Feb 12 16:13:23 CST 2015, note=null, user=null]]]
User1 [ username=陈小明,  orderList=[]]
User1 [ username=张三丰,  orderList=[]]
User1 [ username=znsulBKJS,  orderList=[]]
User1 [ username=李四,  orderList=[]]
User1 [ username=小明,  orderList=[]]

注意:
因为一对多关联,以user为中心,一个user可以对应多个order,所以需要在user对象中添加一个List<-Order->集合

别忘了order和user类要实现序列化接口
如果发生了错误首先看property中值是否与类属性名是否一致,以及数据库列名称与column值是否一致
属性需要有get和set方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值