mybatis一对一,一对多关联映射的配置

情景分析

一个用户(User)有多个订单(Orders),一个订单只属于一个用户。对于订单来说订单对用户为一对一的关系,对于用户来说用户对订单是一对多的关系

一对一关系

1、在pojo中添加相关属性,并设置getter和setter方法

Orders.java
public class Orders {
    private Integer id;

    private Integer userid;

    private String orderid;

    private Date createtime;

    private String note;
    
    //每个订单对应一个用户
    private User user;
    
    //一个订单对应多个订单详细
    private List<Orderdetail> detaiList;

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}
	

	public List<Orderdetail> getDetaiList() {
		return detaiList;
	}

	public void setDetaiList(List<Orderdetail> detaiList) {
		this.detaiList = detaiList;
	} 
}

2、在mapper.xml的resultMap中配置关联关系

在OrdersMapper.xml中配置订单对用户的一对一关系

OrdersMapper.xml
<resultMap id="BaseResultMap" type="com.gec.pojo.Orders" >
    <id column="id" property="id" jdbcType="INTEGER" />
    <result column="userId" property="userid" jdbcType="INTEGER" />
    <result column="orderId" property="orderid" jdbcType="VARCHAR" />
    <result column="createtime" property="createtime" jdbcType="DATE" />
    <result column="note" property="note" jdbcType="VARCHAR" />
    <!-- association设置一对一关系,这里设置一个订单对应一个User -->
    <association property="user" javaType="com.gec.pojo.User">
    	<!-- column为查询结果表中字段名(结果表中可能有别名),property为pojo中的属性名 -->
		<id column="userId" property="id" jdbcType="INTEGER" />
	    <result column="username" property="username" jdbcType="VARCHAR" />
	    <result column="birthday" property="birthday" jdbcType="DATE" />
	    <result column="address" property="address" jdbcType="VARCHAR" />    
    </association>
  </resultMap>

3、在mapper.xml中添加select语句,该语句的resultMap为第2步中配置的resultMap(即id)

OrdersMapper.xml
<select id="findOrdersWithUser" resultMap="BaseResultMap">
  	select o.id,o.userId,o.orderId,o.createtime,o.note,u.username,u.birthday,u.address
  	from orders o 
  	join t_user u
  	on o.userId=u.id
  </select>

4、在mapper.java接口中添加对应的方法

OrdersMapper.java
public interface OrdersMapper {

	List<Orders> findOrdersWithUser();
	
}

一对多关系

一个用户有多个订单
配置映射过程相同,代码如下

user.java
public class User {
    private Integer id;

    private String username;

    private Date birthday;

    private String address;
    //-------- 以上为对应数据库中user表的各属性,不考虑其getter和setter方法------

    //一个用户有多个订单,用list类型存储
    private List<Orders> ordersList;
    
    public List<Orders> getOrdersList() {
		return ordersList;
	}

	public void setOrdersList(List<Orders> ordersList) {
		this.ordersList = ordersList;
	}	
}
userMapper.xml
<resultMap id="BaseResultMap" type="com.gec.pojo.User" >
    <id column="id" property="id" jdbcType="INTEGER" />
    <result column="username" property="username" jdbcType="VARCHAR" />
    <result column="birthday" property="birthday" jdbcType="DATE" />
    <result column="address" property="address" jdbcType="VARCHAR" />
   	<!-- collection配置一对多关系,ofType属性为关联的属性的jdbc类型,
   	如:User有多个订单Orders,则这里的ofType类型为“com.gec.pojo.Orders” -->
   	<collection property="ordersList" ofType="com.gec.pojo.Orders">
   		<id column="oid" property="id" jdbcType="INTEGER" />
	    <result column="userId" property="userid" jdbcType="INTEGER" />
	    <result column="orderId" property="orderid" jdbcType="VARCHAR" />
	    <result column="createtime" property="createtime" jdbcType="DATE" />
	    <result column="note" property="note" jdbcType="VARCHAR" />
   	</collection>
  </resultMap>


<select id="findUserWithOrderses" resultMap="BaseResultMap" >
  	select u.id,u.username,u.birthday,u.address,
  	o.id oid,o.orderId,o.createtime,o.note
  	from orders o 
  	join t_user u
  	on o.userId=u.id
  </select>

UserMapper.java
public interface UserMapper{
	List<User> findUserWithOrderses();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值