mybatis——一对一查询

用户表user——记录了购买商品的用户信息

订单表:orders——记录了用户所创建的订单(购买商品的订单)

一对一查询:

查询订单信息,关联查询创建订单的用户信息

使用ResultType

1)OrderMapperCustom.xml

	<!-- 查询订单关联查询用户信息 -->
	<select id="findOrdersUser" resultType="cn.itcast.mybatis.po.OrdersCustom">
		SELECT
		orders.*,
		USER.username,
		USER.sex,
		USER.address
		FROM
		orders,
		USER
		WHERE orders.user_id = user.id
	</select>

2)OrderMapperCustom.java

public interface OrdersMapperCustom {
	
	//查询订单关联查询用户信息
	public List<OrdersCustom> findOrdersUser()throws Exception;
}

3)配置文件中配置

	<!-- 加载 映射文件 -->
	<mappers>
		<!-- 批量加载mapper
		指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载
		遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中
		上边规范的前提是:使用的是mapper代理方法
		 -->
		<package name="cn.itcast.mybatis.mapper"/>

	</mappers>

3)测试:

	@Test
	public void testFindOrdersUser() throws Exception {

		SqlSession sqlSession = sqlSessionFactory.openSession();
		// 创建代理对象
		OrdersMapperCustom ordersMapperCustom = sqlSession
				.getMapper(OrdersMapperCustom.class);

		// 调用maper的方法
		List<OrdersCustom> list = ordersMapperCustom.findOrdersUser();

		System.out.println(list);

		sqlSession.close();
	}

输出:

[cn.itcast.mybatis.po.OrdersCustom@564718df, cn.itcast.mybatis.po.OrdersCustom@51b7e5df, cn.itcast.mybatis.po.OrdersCustom@18a70f16]

使用ResultMap:

1)Order类中添加User 类属性

public class Orders {
    private Integer id;

    private Integer userId;

    private String number;

    private Date createtime;

    private String note;
    
    //用户信息
    private User user;
    //.....省略了set,get方法
}

2)OrderMapperCustom.xml(sql语句)

  • 定义ResultMap
	<resultMap type="cn.itcast.mybatis.po.Orders" id="OrdersUserResultMap">
		<!-- 配置映射的订单信息 -->
		<!-- id:指定查询列中的唯 一标识,订单信息的中的唯 一标识,如果有多个列组成唯一标识,配置多个id
			column:订单信息的唯 一标识 列
			property:订单信息的唯 一标识 列所映射到Orders中哪个属性
		  -->
		<id column="id" property="id"/>
		<result column="user_id" property="userId"/>
		<result column="number" property="number"/>
		<result column="createtime" property="createtime"/>
		<result column="note" property="note"/>
		
		<!-- 配置映射的关联的用户信息 -->
		<!-- association:用于映射关联查询单个对象的信息
		property:要将关联查询的用户信息映射到Orders中哪个属性
                javaType是类型
		 -->
		<association property="user"  javaType="cn.itcast.mybatis.po.User">
			<!-- id:关联查询用户的唯 一标识
			column:指定唯 一标识用户信息的列
			javaType:映射到user的哪个属性
			 -->
			<id column="user_id" property="id"/>
			<result column="username" property="username"/>
			<result column="sex" property="sex"/>
			<result column="address" property="address"/>
		
		</association>
	</resultMap>
  • 定义statement
	<!-- 查询订单关联查询用户信息,使用resultmap -->
	<select id="findOrdersUserResultMap" resultMap="OrdersUserResultMap">
		SELECT
		orders.*,
		USER.username,
		USER.sex,
		USER.address
		FROM
		orders,
		USER
		WHERE orders.user_id = user.id
	</select>

3)配置文件中的配置

	<!-- 加载 映射文件 -->
	<mappers>
		<!-- 批量加载mapper
		指定mapper接口的包名,mybatis自动扫描包下边所有mapper接口进行加载
		遵循一些规范:需要将mapper接口类名和mapper.xml映射文件名称保持一致,且在一个目录 中
		上边规范的前提是:使用的是mapper代理方法
		 -->
		<package name="cn.itcast.mybatis.mapper"/>

	</mappers>

4)OrderMapperCustom.java接口

public interface OrdersMapperCustom {
	
	//查询订单关联查询用户使用resultMap
	public List<Orders> findOrdersUserResultMap()throws Exception;
}

5)测试代码

	@Test
	public void testFindOrdersUserResultMap() throws Exception {

		SqlSession sqlSession = sqlSessionFactory.openSession();
		// 创建代理对象
		OrdersMapperCustom ordersMapperCustom = sqlSession
				.getMapper(OrdersMapperCustom.class);

		// 调用maper的方法
		List<Orders> list = ordersMapperCustom.findOrdersUserResultMap();

		System.out.println(list);

		sqlSession.close();
	}

输出:

[cn.itcast.mybatis.po.Orders@51b7e5df, cn.itcast.mybatis.po.Orders@18a70f16, cn.itcast.mybatis.po.Orders@62e136d3]

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值