我是靠谱客的博主 野性夕阳,最近开发中收集的这篇文章主要介绍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();
}

最后

以上就是野性夕阳为你收集整理的mybatis一对一,一对多关联映射的配置情景分析一对一关系一对多关系的全部内容,希望文章能够帮你解决mybatis一对一,一对多关联映射的配置情景分析一对一关系一对多关系所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部