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

上一篇 下一篇

猜你喜欢

热点阅读