作业02.Mybatis一对一与一对多查询

一对一查询

编写实体类

查询订单所对应的一对一用户类
创建orders类,orders类包含User类对象

//用户类
public class User {
    
    
    private int id;
    private String username;
    private String password;
    //get set方法
}
//订单类
public class Orders {
    
    
    //订单id
    private String oid;
    //用户id
    private String uid;
    //订单创建时间
    private Date createTime;
    //备注
    private String note;
    //订单所属的id
    private User user;
    //set get方法
}

创建orders表
在这里插入图片描述
添加测试数据:
在这里插入图片描述

在这里插入图片描述

编写mapper接口与mapper映射文件

定义接口:

public interface OrdersMapper {
    
    
     Orders getOrdersById(String oid);
}

定义Ordersmapper映射文件:

<mapper namespace="com.lg.mapper.OrdersMapper">
    <resultMap id="getOrders" type="orders">
        <id column="oid" property="oid"></id>
        <result column="uid" property="uid"></result>
        <result column="createTime" property="createTime"></result>
        <result column="note" property="note"></result>
        <association property="user" javaType="user">
            <id column="id" property="id"></id>
            <result column="username" property="username"></result>
            <result column="password" property="password"></result>
        </association>
    </resultMap>
	<select id="getOrdersById" parameterType="string" resultMap="getOrders">
        select * from orders o,users u where o.oid=#{
    
    id} and o.uid= u.id;
    </select>
</mapper>

定义测试方法

@Test
    public void getOrdersByid(){
    
    
        SqlSession sqlSession = MySessionUtils.getSession();
        OrdersMapper dao = sqlSession.getMapper(OrdersMapper.class);
        Orders orders = dao.getOrdersById("O1001");
        System.out.println(orders);
    }

效果截图:
在这里插入图片描述

一对多查询

查询用户id为1的所有订单。

修改User类

往user类里面添加List< Orders> 对象

public class User {
    
    
    private int id;
    private String username;
    private String password;
    private List<Orders> list;
    //set get方法
  }

编写接口方法与mapper.xml文件

//定义接口
 public User findByIdAttachOrders(int id);
//mapper映射文件
  <select id="findByIdAttachOrders" parameterType="int" resultMap="userAttachOrders">
        select * from users u,orders o where u.id=#{
    
    id} and o.uid=u.id;
    </select>
    <resultMap id="userAttachOrders" type="user">
        <id column="id" property="id"></id>
        <result column="username" property="username"></result>
        <result column="password" property="password"></result>
        <collection property="list" ofType="orders">
            <id column="oid" property="oid"></id>
            <result column="uid" property="uid"></result>
            <result column="createDate" property="createDate"></result>
            <result column="note" property="note"></result>
        </collection>
    </resultMap>

编写测试类

 @Test
    public void findByIdAttachOrders(){
    
    
        SqlSession sqlSession = MySessionUtils.getSession();
        UserMapper dao = sqlSession.getMapper(UserMapper.class);
        User user = dao.findByIdAttachOrders(1);
        //获取User中的OrderList
        List<Orders> list = user.getList();
        list.forEach(orders -> System.out.println(orders));
    }

效果截图:
在这里插入图片描述
根据用户id找出了与之对应的所有订单,实现了一对多

猜你喜欢

转载自blog.csdn.net/lglglglglgui/article/details/108855409