mybatis-一對多查詢的模型
阿新 • • 發佈:2021-12-16
使用者表和訂單表的關係為,一個使用者有多個訂單,一個訂單隻從屬於一個使用者,一對多查詢的需求:查詢一個使用者,與此同時查詢出該使用者具有的訂單
對應的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(); }