Mybatis---学习过程---Mybatis复杂映射操作一对一

Mybatis—学习过程—Mybatis复杂映射操作

1.一对一

实体类

public class User {
    private Integer id;
    private String username;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", username='" + username + '\'' +
                '}';
    }
}
public class Order {
    private Integer id;
    private String orderTime;
    //金额
    private double total;
    //表示该订单属于哪个用户
    private User user;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getOrderTime() {
        return orderTime;
    }
    public void setOrderTime(String orderTime) {
        this.orderTime = orderTime;
    }
    public double getTotal() {
        return total;
    }
    public void setTotal(double total) {
        this.total = total;
    }
    public User getUser() {
        return user;
    }
    public void setUser(User user) {
        this.user = user;
    }
    @Override
    public String toString() {
        return "Order{" +
                "id=" + id +
                ", orderTime='" + orderTime + '\'' +
                ", total=" + total +
                ", user=" + user +
                '}';
    }
}

持久层

public interface IUserMapper {

//    查询订单的同时还查询该订单所属的用户
    List<Order> findOrderAndUser();
}

mapper.xml文件

<mapper namespace="com.lagou.mapper.IUserMapper">

<!--    id就是给这段映射关系起一个名字,type表示要封装到那个实体对象中去-->
    <resultMap id="orderMap" type="com.lagou.pojo.Order">
        <result property="id" column="id"/>
        <result property="orderTime" column="orderTime"/>
        <result property="total" column="total"/>
<!--        association标签中 property属性对应着的就是Order这个实体中user这个属性名
            javaType表示当前property配置的属性名的类型-->
        <association property="user" javaType="com.lagou.pojo.User">
            <result property="id" column="uid"/>
            <result property="username" column="username"/>
        </association>
    </resultMap>
<!--    resultMap:手动配置实体属性与表字段的关系,resultMap=谁就是按照谁的关系封装-->
    <select id="findOrderAndUser" resultMap="orderMap">
        select * from orders o,user u where o.uid=u.id
    </select>
</mapper>

测试类

public class MybatisTest {
    @Test
    public void test1() throws IOException {
        //将配置文件以流的形式加载到内存
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        //SqlSessionFactoryBuilder()使用build方法创建 SqlSessionFactory工厂生产sqlSession对象
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        //sqlSessionFactory.openSession():sqlSessionFactory开启事务
        SqlSession sqlSession = sqlSessionFactory.openSession();
        //获取IUserMapper.class类的代理对象
        IUserMapper mapper = sqlSession.getMapper(IUserMapper.class);
        //代理执行findOrderAndUser方法,之后返回一个order对象
        List<Order> orderAndUser = mapper.findOrderAndUser();
        for (Order order : orderAndUser) {
            System.out.println(order);
        }
    }
}

结果
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值