mybatis 使用in 查询时报错_使用mybatis的resultMap进行复杂查询 057
拿到表的第一時間要學會分析陌生表的數據模型:
1、學習單表記錄了什么東西(去學習理解需求)
2、學習單表重要字段的意義(優先學習不能為空的字段)
3、學習表與表之間的關系(一對一、一對多、多對多)通過表的外鍵分析表之間的關系
注意:分析表與表之間的關系時是要建立在具體 的業務意義基礎之上
用戶表user:記錄了購買商品的用戶
訂單表orders:記錄了用戶所創建的訂單信息
訂單明細表orderdetail:記錄了用戶創建訂單的詳細信息
商品信息表items:記錄了商家提供的商品信息
分析表與表之間的關系:
用戶user和訂單orders:
user---->orders:一個用戶可以創建多個訂單 一對多
orders-->user:一個訂單只能由一個用戶創建 一對一
訂單orders和訂單明細orderdetail:
orders-->orderdetail:一個訂單可以包括多個訂單明細 一對多
orderdetail-->orders:一個訂單明細只屬于一個訂單 一對一
訂單明細orderdetail和商品信息items:
orderdetail-->items:一個訂單明細對應一個商品信息 一對一
items--> orderdetail:一個商品對應多個訂單明細 一對多
需求:查詢所有用戶信息,關聯查詢訂單及訂單明細信息及商品信息
分析sql語句如何寫:
主查詢表:用戶信息
關聯查詢:訂單、訂單明細,商品信息
SELECTorders.*,user.username,user.sex ,orderdetail.id orderdetail_id,orderdetail.items_num,orderdetail.items_id,items.name items_name,items.detail items_detailFROMorders,USER,orderdetail,itemsWHERE orders.user_id = user.id AND orders.id = orderdetail.orders_id AND items.id = orderdetail.items_id
pojo定義:
User.java
Orders.java
Orderdetail.java
Items.java
mapper.xml(注意sql語句查詢時是否使用別名,有的話一定要同步)
<!-- 一對多查詢,查詢用戶及訂單明細和商品信息 -->
2 <resultMap id="userOrdersAndItemsResultMap" type="user">
3 <!-- 用戶信息映射 -->
4 <id column="id" property="id"/>
5 <result column="username" property="username"/>
6 <result column="sex" property="sex"/>
7 <!-- 訂單信息映射 -->
8 <!-- 下邊完成關聯信息的映射
9 collection:用于對關聯信息映射到集合
10 property:要將關聯信息映射到User的哪個屬性中
11 ofType:關聯信息映射到User的屬性的類型,可以使用別名,不過全稱方便確認
12 -->
13 <collection property="orderlist" ofType="com.emuii.mybatis.pojo.Orders">
14 <!-- id:訂單關聯用戶查詢的唯一標識 -->
15 <id column="id" property="id"/>
16 <result column="user_id" property="userId"/>
17 <result column="number" property="number"/>
18 <result column="createtime" property="createtime"/>
19 <result column="note" property="note"/>
20 <!-- 訂單詳細信息映射 -->
21 <collection property="orderdetails" ofType="com.emuii.mybatis.pojo.Orderdetail">
22 <!-- id:關聯信息訂單明細的唯一標識
23 property:Orderdetail的屬性名
24 -->
25 <id column="orderdetail_id" property="id"/>
26 <result column="items_num" property="itemsNum"/>
27 <result column="items_id" property="itemsId"/>
28 <association property="items" javaType="com.emuii.mybatis.pojo.Items">
29 <id column="id" property="id"/>
30 <result column="items_name" property="name"/>
31 <result column="items_detail" property="detail"/>
32 </association>
33 </collection>
34 </collection>
35 </resultMap>
36
37 <!-- 一對多查詢使用reusltMap完成
38 查詢用戶及訂單和訂單明細,關聯商品,的信息
39 -->
40 <select id="findUserOrdersAndItems" resultMap="userOrdersAndItemsResultMap">
41 SELECT
42 orders.*,
43 user.username,
44 user.sex ,
45 orderdetail.id orderdetail_id,
46 orderdetail.items_num,
47 orderdetail.items_id,
48 items.name items_name,
49 items.detail items_detail
50 FROM
51 orders,
52 USER,
53 orderdetail,
54 items
55 WHERE orders.user_id = user.id AND orders.id = orderdetail.orders_id AND items.id = orderdetail.items_id
56 </select>
mapper.java(代理接口)
Test:
public class OrdersMapperTest {
// 會話工廠
private SqlSessionFactory sqlSessionFactory;
// 創建工廠
@Before
public void init() throws IOException {
// 配置文件(SqlMapConfig.xml)
String resource = "SqlMapConfig.xml";
// 加載配置文件到輸入流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 創建會話工廠
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testFindUserOrdersAndItems() throws Exception {
// 獲取statement
SqlSession sqlSession = sqlSessionFactory.openSession();
// 創建mapper代理接口(Dao接口)
OrdersMapper ordersMapper = sqlSession.getMapper(OrdersMapper.class);
// 調用方法
List<User> list = ordersMapper.findUserOrdersAndItems();
sqlSession.close();
System.out.println(list);
}
}
總結
以上是生活随笔為你收集整理的mybatis 使用in 查询时报错_使用mybatis的resultMap进行复杂查询 057的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js获取微信状态栏高度_人人商城打包ap
- 下一篇: java 画笔跟swing组件_java