1. 程式人生 > 其它 >mybatis-一對多查詢的模型

mybatis-一對多查詢的模型

使用者表和訂單表的關係為,一個使用者有多個訂單,一個訂單隻從屬於一個使用者,一對多查詢的需求:查詢一個使用者,與此同時查詢出該使用者具有的訂單

對應的sql語句:select *,o.id oid from user u left join orders o on u.id=o.uid;

1)修改User實體

public class Order {

    private int id;
    private Date ordertime;
    private double total;

    //代表當前訂單從屬於哪一個客戶
    private User user;
}

public class User {
    private int id;
    private String username;
    private String password;
    private Date birthday;
    //代表當前使用者具備哪些訂單
    private List<Order> orderList;
}

2)建立UserMapper介面

public interface UserMapper {
    List<User> findAll();
}

3)配置UserMapper.xml

<mapper namespace="com.itheima.mapper.UserMapper">
    <resultMap id="userMap" type="user">
        <id column="uid" property="id"></id>
        <result column="username" property="username"></result>
        <result column="password" property="password"></result>
        <result column="birthday" property="birthday"></result>
        <!--配置集合資訊
            property:集合名稱
            ofType:當前集合中的資料型別
        -->
        <collection property="orderList" ofType="order">
            <!--封裝order的資料-->
            <id column="oid" property="id"></id>
            <result column="ordertime" property="ordertime"></result>
            <result column="total" property="total"></result>
        </collection>
    </resultMap>

    <select id="findAll" resultMap="userMap">
        SELECT *,o.id oid FROM USER u,orders o WHERE u.id=o.uid
    </select>
</mapper>

4)測試結果

@Test
    public void test2() throws IOException {
        InputStream resourceAsStream = Resources.getResourceAsStream("sqlMapConfig.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(resourceAsStream);
        SqlSession sqlSession = sqlSessionFactory.openSession();

        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userList = mapper.findAll();
        for (User user : userList) {
            System.out.println(user);
        }

        sqlSession.close();
    }