mybatis 使用in 查询时报错_使用mybatis的resultMap进行复杂查询 057
拿到表的第一時(shí)間要學(xué)會(huì)分析陌生表的數(shù)據(jù)模型:
1、學(xué)習(xí)單表記錄了什么東西(去學(xué)習(xí)理解需求)
2、學(xué)習(xí)單表重要字段的意義(優(yōu)先學(xué)習(xí)不能為空的字段)
3、學(xué)習(xí)表與表之間的關(guān)系(一對一、一對多、多對多)通過表的外鍵分析表之間的關(guān)系
注意:分析表與表之間的關(guān)系時(shí)是要建立在具體 的業(yè)務(wù)意義基礎(chǔ)之上
用戶表user:記錄了購買商品的用戶
訂單表orders:記錄了用戶所創(chuàng)建的訂單信息
訂單明細(xì)表orderdetail:記錄了用戶創(chuàng)建訂單的詳細(xì)信息
商品信息表items:記錄了商家提供的商品信息
分析表與表之間的關(guān)系:
用戶user和訂單orders:
user---->orders:一個(gè)用戶可以創(chuàng)建多個(gè)訂單 一對多
orders-->user:一個(gè)訂單只能由一個(gè)用戶創(chuàng)建 一對一
訂單orders和訂單明細(xì)orderdetail:
orders-->orderdetail:一個(gè)訂單可以包括多個(gè)訂單明細(xì) 一對多
orderdetail-->orders:一個(gè)訂單明細(xì)只屬于一個(gè)訂單 一對一
訂單明細(xì)orderdetail和商品信息items:
orderdetail-->items:一個(gè)訂單明細(xì)對應(yīng)一個(gè)商品信息 一對一
items--> orderdetail:一個(gè)商品對應(yīng)多個(gè)訂單明細(xì) 一對多
需求:查詢所有用戶信息,關(guān)聯(lián)查詢訂單及訂單明細(xì)信息及商品信息
分析sql語句如何寫:
主查詢表:用戶信息
關(guān)聯(lián)查詢:訂單、訂單明細(xì),商品信息
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語句查詢時(shí)是否使用別名,有的話一定要同步)
<!-- 一對多查詢,查詢用戶及訂單明細(xì)和商品信息 -->
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 <!-- 下邊完成關(guān)聯(lián)信息的映射
9 collection:用于對關(guān)聯(lián)信息映射到集合
10 property:要將關(guān)聯(lián)信息映射到User的哪個(gè)屬性中
11 ofType:關(guān)聯(lián)信息映射到User的屬性的類型,可以使用別名,不過全稱方便確認(rèn)
12 -->
13 <collection property="orderlist" ofType="com.emuii.mybatis.pojo.Orders">
14 <!-- id:訂單關(guān)聯(lián)用戶查詢的唯一標(biāo)識(shí) -->
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 <!-- 訂單詳細(xì)信息映射 -->
21 <collection property="orderdetails" ofType="com.emuii.mybatis.pojo.Orderdetail">
22 <!-- id:關(guān)聯(lián)信息訂單明細(xì)的唯一標(biāo)識(shí)
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 查詢用戶及訂單和訂單明細(xì),關(guān)聯(lián)商品,的信息
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 {
// 會(huì)話工廠
private SqlSessionFactory sqlSessionFactory;
// 創(chuàng)建工廠
@Before
public void init() throws IOException {
// 配置文件(SqlMapConfig.xml)
String resource = "SqlMapConfig.xml";
// 加載配置文件到輸入流
InputStream inputStream = Resources.getResourceAsStream(resource);
// 創(chuàng)建會(huì)話工廠
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testFindUserOrdersAndItems() throws Exception {
// 獲取statement
SqlSession sqlSession = sqlSessionFactory.openSession();
// 創(chuàng)建mapper代理接口(Dao接口)
OrdersMapper ordersMapper = sqlSession.getMapper(OrdersMapper.class);
// 調(diào)用方法
List<User> list = ordersMapper.findUserOrdersAndItems();
sqlSession.close();
System.out.println(list);
}
}
總結(jié)
以上是生活随笔為你收集整理的mybatis 使用in 查询时报错_使用mybatis的resultMap进行复杂查询 057的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js获取微信状态栏高度_人人商城打包ap
- 下一篇: java 画笔跟swing组件_java