日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Mybatis-嵌套查询

發布時間:2023/12/20 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Mybatis-嵌套查询 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.1 項目目錄

1.2 什么是嵌套查詢

嵌套查詢就是將原來多表查詢中的聯合查詢語句拆成單個表的查詢,再使用mybatis的語法嵌套在一起。

案例實現

-- 需求:查詢一個訂單,與此同時查詢出該訂單所屬的用戶# 1. 聯合查詢 select * from orders o left join user u on o.oid =u.id #2. 嵌套查詢#2.1先查詢訂單Select * from orders#2.2 再根據訂單uid外鍵,查詢用戶select * from user where id = #{根據訂單查詢的oid}2.3 最后使用mybatis,將以上二步嵌套起來 ...

1.3 一對一嵌套查詢

1.3.1 基本介紹

需求:查詢一個訂單,與此同時查詢出該訂單所屬的用戶

一對一查詢語句

-- 先查詢訂單 Select * from orders; -- 再根據訂單oid外鍵,查詢用戶 select * from user where id = #{根據訂單查詢的oid}

1.3.2 代碼實現

OrderMapper接口

// 1.查詢所有的訂單,與此同時還要查出每個訂單所屬的用戶信息 List<Orders> findAllWithUser1();

OrderMapper.xml

<!--1.1 orderMap映射--> <resultMap id="orderMap1" type="orders"><id column="id" property="id"></id><result column="ordertime" property="ordertime"></result><result column="total" property="total"></result><result column="oid" property="oid"></result><association property="user" javaType="user" column="oid" select="cn.guardwhy.dao.UserMapper.findById"/> </resultMap> <!--1.2 一對一嵌套查詢--> <select id="findAllWithUser1" resultMap="orderMap1">select * from orders </select>

UserMapper接口

// 根據ID查詢用戶 User findById(Integer id);

UserMapper.xml

<!--1.1映射主鍵--> <resultMap id="userMap1" type="user"><id column="id" property="id"></id><result column="user_name" property="username"></result><result column="birthday" property="birthday"></result><result column="sex" property="sex"></result><result column="address" property="address"></result> </resultMap> <!--1.2 根據id查詢用戶--> <select id="findById" resultMap="userMap1">select * from user where id = #{oid} </select>

測試代碼

@Test public void testOrderWithUser(){// 1.通過工具類得到會話對象SqlSession sqlSession = MybatisUtils.getSession();// 2.會話對象的得到mapper接口代理對象OrderMapper mapper = sqlSession.getMapper(OrderMapper.class);// 3.調用方法List<Orders> orders = mapper.findAllWithUser1();// 4.遍歷操作for (Orders order : orders) {System.out.println(order);} }

執行結果

1.4 一對多嵌套查詢

1.4.1 基本介紹

需求:查詢所有用戶,與此同時查詢出該用戶具有的訂單

一對多查詢語句

-- 先查詢用戶 Select * from user; -- 再根據用戶id主鍵,查詢訂單列表 select * from orders where oid = #{用戶id}

1.4.2 代碼實現

UserMapper接口

// 查詢所有的用戶,同時還要查詢出每個用戶所關聯的訂單信息 List<User> findAllWithOrders();

UserMapper.xml

<!--2.1映射主鍵--> <resultMap id="userMap2" type="user"><id column="id" property="id"></id><result column="user_name" property="username"></result><result column="birthday" property="birthday"></result><result column="sex" property="sex"></result><result column="address" property="address"></result><!--根據用戶Id,查詢訂單表--><collection property="ordersList" column="id" ofType="Orders" select="cn.guardwhy.dao.OrderMapper.findByUid"></collection> </resultMap> <!--一對多嵌套查詢--> <select id="findAllWithOrders" resultMap="userMap2">select * from user </select>

OrderMapper接口

// 根據oid查詢對應訂單 List<Orders> findByUid(Integer oid);

OrderMapper.xml

<!--一對多嵌套查詢--> <select id="findByUid" parameterType="int" resultType="orders">select * from orders where oid = #{oid} </select>

測試代碼

@Test public void testUserWithOrder(){// 1.通過工具類得到會話對象SqlSession sqlSession = MybatisUtils.getSession();// 2.會話對象的得到mapper接口代理對象UserMapper mapper = sqlSession.getMapper(UserMapper.class);// 3.調用方法List<User> userList = mapper.findAllWithOrders();// 4.遍歷操作for (User user : userList) {System.out.println(user);} }

執行結果

1.5 多對多嵌套查詢

1.5.1 基本介紹

需求: 查詢用戶 同時查詢出該用戶的所有角色

多對多查詢語句

-- 先查詢用戶 select * from user; -- 再根據用戶id主鍵,查詢角色列表select * from role r inner join user_role ur on r.id = ur.user_id where ur.role_id = #{用戶id};

1.5.2 代碼示例

UserMapper接口

// 查詢所有的用戶,同時還要查詢出每個用戶所關聯的訂單信息 List<User> findAllWithOrders();

UserMapper.xml

<!--2.1映射主鍵--> <resultMap id="userMap2" type="user"><id column="id" property="id"></id><result column="user_name" property="username"></result><result column="birthday" property="birthday"></result><result column="sex" property="sex"></result><result column="address" property="address"></result><!--根據用戶Id,查詢訂單表--><collection property="ordersList" column="id" ofType="Orders" select="cn.guardwhy.dao.OrderMapper.findByUid"></collection> </resultMap> <!--一對多嵌套查詢--> <select id="findAllWithOrders" resultMap="userMap2">select * from user </select>

RoleMapper接口

// 根據id查詢角色 List<Role> findByOid(Integer id);

RoleMapper.xml

<!--2.1 配置角色的映射--> <resultMap id="roleMap" type="role"><id property="id" column="id"></id><id property="roleName" column="role_name"/><id property="roleDetail" column="role_detail"/> </resultMap> <!--2.2 多對多嵌入查詢--> <select id="findByOid" parameterType="int" resultMap="roleMap">select * from role r inner join user_role ur on r.id = ur.user_id where ur.role_id = #{oid} </select>

測試代碼

@Test public void testUserWithRole(){// 1.通過工具類得到會話對象SqlSession sqlSession = MybatisUtils.getSession();// 2.會話對象的得到mapper接口代理對象UserMapper mapper = sqlSession.getMapper(UserMapper.class);// 3.調用方法List<User> list = mapper.findAllWithRole();// 4.遍歷操作list.forEach(System.out::println); }

執行結果

總結

以上是生活随笔為你收集整理的Mybatis-嵌套查询的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。