mybatis 一对一的映射(两种方式)
2019-02-28 本文已影响37人
java高并发
对于一对一的关系映射一共有两种解决方案:
开发步骤:1)写OrdersMapperUser.xml文件 2)编写与xml同名的接口OrdersMapperUser 3)测试
声明:一下xml文件的代码都在<mapper namespace="cn.itcast.mapper.OrdersMapperUser"></mapper>中
方式一:使用包装类完成映射关系(比较容易理解)
需求:一个订单只对应一个用户
1)编写包装了类OrdersUser继承Orders类 并在OrdersUser中声明User中的属性
public class OrdersUser extends Orders{
private String username;
private String sex;
private String address;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
2)xml映射-->映射到包装类中--->因为这个包装类中有所有的属性-->因此可以作为映射类
通过select语句查询出orders表中所有的属性以及user表中的属性-->内连接方式(通过外键关联)
<select id="findOrdersUser" resultType="cn.itcast.domain.OrdersUser">
select orders.*,user.username,user.sex,user.address
from orders,user
where orders.user_id=user.id
</select>
3)接口中写方法
public OrdersUser findOrdersUser();
4)测试:
@Test
public void testfindOrdersUser(){
SqlSession sqlSession = sqlSessionFactory.openSession();
OrdersMapperUser ordersMapperUser = sqlSession.getMapper(OrdersMapperUser.class);
OrdersUser ordersUser = ordersMapperUser.findOrdersUser();
System.out.println(ordersUser.getUsername());
}
运行结果:
方式二:通过resultMap方法
1)xml中配置 对于一对一使用association property对应的是Orders中的user属性 javatype user属性对应的User类型
<!-- ####################################一对一的查询########################################################## -->
<resultMap type="cn.itcast.domain.Orders" id="ordersUserResultMap">
<id column="id" property="id"/>
<result column="number" property="number"/>
<result column="createtime" property="createtime"/>
<result column="note" property="note"/>
<result column="user_id" property="userId"/>
<association property="user" javaType="cn.itcast.domain.User">
<id column="id" property="id"/>
<result column="username" property="username"/>
<result column="sex" property="sex"/>
<result column="address" property="address"/>
</association>
</resultMap>
<select id="findOrdersUserResultMap" resultMap="ordersUserResultMap">
select orders.*,user.username,user.sex,user.address
from orders,user
where orders.user_id=user.id
</select>
2)接口中方法
public List<Orders> findOrdersUserResultMap();
3)测试:
最后
顺便在此给大家推荐一个Java方面的交流学习群:4112676,里面会分享一些高级面试题,还有资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系,主要针对Java开发人员提升自己,突破瓶颈,相信你来学习,会有提升和收获。在这个群里会有你需要的内容 朋友们请抓紧时间加入进来吧
原文:https://blog.csdn.net/u014010769/article/details/47302587