網站首頁 編程語言 正文
IllegalArgumentException異常產生原因及解決方案
01 異常發生場景
- 當我在使用mybatis執行MySQL語法時出現的bug
<!--mybatis的映射-->
<resultMap id="OrdersVoResult" type="OrdersVo">
<!-- id配置的是主鍵,就是表的主鍵 -->
<!-- property是實體類的屬性名 -->
<!-- cloumn是sql查詢出來的字段名 -->
<id property="orderId" column="order_id"></id>
<!-- result是其他的字段 -->
<result property="orderNum" column="order_num"></result>
<result property="orderTime" column="order_time"></result>
<collection property="products" javaType="ordersDtlVo">
<id property="orderDtlId" column="order_dtl_id"></id>
<result property="productId" column="product_id"></result>
<result property="productName" column="product_name"></result>
<result property="productSellingPrice" column="product_selling_price"></result>
<result property="num" column="num"></result>
<result property="productPicture" column="product_picture"></result>
</collection>
</resultMap>
<select id="selectOrders" resultMap="OrdersVoResult">
SELECT
t1.order_id,
t1.create_time,
t1.order_num,
t2.order_dtl_id,
t2.product_id,
t2.product_name,
t2.product_selling_price,
t2.num,
t2.product_price
FROM
orders AS t1
left JOIN
orders_dtl AS t2
ON t1.order_id = t2.order_id
WHERE
t1.user_id = #{userId}
</select>
02 異常的產生原因
-
在數據庫里SQL語句的執行是沒有問題的
-
經過查詢百度,發現是非法傳參異常,也就是參數傳的類型沖突,但是我前前后后對了好幾次參數,確定了實體類參數對應沒有問題
-
那么問題出在哪里呢?經過查詢mybatis3的官方文檔,我找到了問題的所在
-
javaType
一個 Java 類的全限定名,或一個類型別名(關于內置的類型別名,可以參考上面的表格)。 如果你映射到一個 JavaBean,MyBatis 通常可以推斷類型 ofType
也是一個 Java 類的全限定名,但映射對應的參數是數組 -
我的實體類
public class OrdersVo { private Long orderId; private String orderNum; private Date orderTime; private List<OrdersDtlVo> products; }
-
很明顯可以看出其中一個參數是list集合,但我簡單的使用
javaType
設置路徑,所以才造成了IllegalArgumentException(參數映射問題)
03 解決方式
-
很簡單,在映射集合時,使用
ofType
映射對應的參數即可 -
修改后的mybtais映射
-
<resultMap id="OrdersVoResult" type="OrdersVo"> <!-- id配置的是主鍵,就是表的主鍵 --> <!-- property是實體類的屬性名 --> <!-- cloumn是sql查詢出來的字段名 --> <id property="orderId" column="order_id"></id> <!-- result是其他的字段 --> <result property="orderNum" column="order_num"></result> <result property="orderTime" column="order_time"></result> <collection property="products" ofType="ordersDtlVo"> <id property="orderDtlId" column="order_dtl_id"></id> <result property="productId" column="product_id"></result> <result property="productName" column="product_name"></result> <result property="productSellingPrice" column="product_selling_price"></result> <result property="num" column="num"></result> <result property="productPicture" column="product_picture"></result> </collection> </resultMap> <select id="selectOrders" resultMap="OrdersVoResult"> SELECT t1.order_id, t1.create_time, t1.order_num, t2.order_dtl_id, t2.product_id, t2.product_name, t2.product_selling_price, t2.num, t2.product_price FROM orders AS t1 left JOIN orders_dtl AS t2 ON t1.order_id = t2.order_id WHERE t1.user_id = #{userId} </select>
原文鏈接:https://blog.csdn.net/2302_77182979/article/details/134484538
- 上一篇:沒有了
- 下一篇:沒有了
相關推薦
- 2022-03-22 nginx中一個請求的count計數跟蹤淺析_nginx
- 2022-07-31 pandas中提取DataFrame某些列的一些方法_python
- 2022-06-30 Python中隱藏的五種實用技巧分享_python
- 2022-08-01 Python實現數字圖像處理染色體計數示例_python
- 2022-07-12 jmm內存模型及volatile實現原理
- 2022-06-04 C語言超詳細講解輪轉數組_C 語言
- 2023-05-20 linux?shell輸出換行簡單實例_linux shell
- 2022-12-27 os_object_release?Crash?排查記錄分析_匯編語言
- 欄目分類
-
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支