国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Mybaits:數(shù)據(jù)庫查詢類型不匹配,java.sql.SQLDataException: Cannot determine value type from string

這篇具有很好參考價(jià)值的文章主要介紹了Mybaits:數(shù)據(jù)庫查詢類型不匹配,java.sql.SQLDataException: Cannot determine value type from string。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

目錄

一.問題描述

二.源碼分析

三.總結(jié)


一.問題描述

事情的起因是用MybaitsPlus查詢數(shù)據(jù)庫過程中,查詢結(jié)果與要封裝的實(shí)體類字段類型對(duì)應(yīng)不上,類似這樣:

數(shù)據(jù)庫查詢結(jié)果:

cannot determine value type from string '2023-12-21 11:35:04,java,數(shù)據(jù)庫,java,開發(fā)語言,mybatis

java實(shí)體類:

@TableName("my_user")
@ToString
public class User {

    private Long id;

    private String name;

    private BigDecimal age;

    public User(String name,BigDecimal age){
        this.name=name;
        this.age=age;
    }
}

字段名字和實(shí)體類的名字類型都能對(duì)應(yīng)上,但最后的查詢結(jié)果卻會(huì)報(bào)錯(cuò)java.sql.SQLDataException: Cannot determine value type from string

cannot determine value type from string '2023-12-21 11:35:04,java,數(shù)據(jù)庫,java,開發(fā)語言,mybatis

意思就是String類型的‘zhang’沒有對(duì)應(yīng)的類型實(shí)體類字段,這就很奇怪了,經(jīng)過排查,是因?yàn)榧恿擞袇?gòu)造器,有參構(gòu)造器去掉或者加上注解@NoArgConstructor就可以解決問題,不想看原因的可以直接跳到后面看結(jié)論

二.源碼分析

根據(jù)報(bào)錯(cuò)信息找到了Mybatis中DefaultResultSetHandler這個(gè)類的createResultObject方法,這是創(chuàng)建返回的實(shí)體類的方法

cannot determine value type from string '2023-12-21 11:35:04,java,數(shù)據(jù)庫,java,開發(fā)語言,mybatis

這里我們看到已經(jīng)拿到了實(shí)體類的Class對(duì)象,并且走到了createByConstructorSignature方法,這個(gè)方法顧名思義就是通過構(gòu)造器來創(chuàng)建對(duì)象,我們?cè)龠M(jìn)這個(gè)方法看看

cannot determine value type from string '2023-12-21 11:35:04,java,數(shù)據(jù)庫,java,開發(fā)語言,mybatis

這個(gè)方法會(huì)拿到一個(gè)defaultConstructor默認(rèn)構(gòu)造器,那這個(gè)defaultConstructor又是從哪里來的呢,點(diǎn)進(jìn)去findDefaultConstructor方法看一下

cannot determine value type from string '2023-12-21 11:35:04,java,數(shù)據(jù)庫,java,開發(fā)語言,mybatis

這個(gè)方法里也很簡(jiǎn)單,如果只有一個(gè)構(gòu)造器就返回這個(gè)構(gòu)造器,User類只有一個(gè)構(gòu)造器,返回的就是(String,Bigdecimal)的構(gòu)造器,回到createByConstructorSignature這個(gè)方法中,接下來就會(huì)進(jìn)入createUsingConstructor這個(gè)方法中

cannot determine value type from string '2023-12-21 11:35:04,java,數(shù)據(jù)庫,java,開發(fā)語言,mybatis

這個(gè)方法會(huì)通過for循環(huán)把構(gòu)造器中的參數(shù)和查詢出的結(jié)果一一對(duì)應(yīng),并添加到constructorArgs中,最后通過objectFactory.create(resultType, constructorArgTypes, constructorArgs)這個(gè)方法來用這個(gè)構(gòu)造器反射生成實(shí)力對(duì)象??梢钥吹降谝粋€(gè)參數(shù)就出問題了,構(gòu)造器中第一個(gè)參數(shù)是String類型,而查詢出來的第一個(gè)字段id應(yīng)該是Long類型的,顯然對(duì)應(yīng)不上

cannot determine value type from string '2023-12-21 11:35:04,java,數(shù)據(jù)庫,java,開發(fā)語言,mybatis

查詢出來的id為String類型的1234,而到第二個(gè)參數(shù)就會(huì)變成BigDecimal類型去對(duì)應(yīng)String類型的name,這無法轉(zhuǎn)換就會(huì)報(bào)錯(cuò)

cannot determine value type from string '2023-12-21 11:35:04,java,數(shù)據(jù)庫,java,開發(fā)語言,mybatis

那如果去掉有參的構(gòu)造器呢,去掉之后實(shí)體類里就只會(huì)剩下空參的構(gòu)造器,再執(zhí)行到createResultObject方法時(shí),我們就可以看到執(zhí)行到metaType.hasDefaultConstructor()這個(gè)方法時(shí)返回的是true,而defaultConstructor就是空參構(gòu)造器,所以進(jìn)入的是objectFactory.create(resultType)這個(gè)方法,這個(gè)方法里會(huì)通過這個(gè)空參的構(gòu)造器來反射生成一個(gè)對(duì)象,后續(xù)再通過反射給這個(gè)對(duì)象賦值

cannot determine value type from string '2023-12-21 11:35:04,java,數(shù)據(jù)庫,java,開發(fā)語言,mybatis

三.總結(jié)

在mybatis中,用于承接sql執(zhí)行結(jié)果的實(shí)體類最好要有一個(gè)空參構(gòu)造器,否則很可能出現(xiàn)類型對(duì)應(yīng)不上的問題,因?yàn)镸ybaits會(huì)優(yōu)先用空參構(gòu)造器來反射生成對(duì)象,如果沒有空參構(gòu)造器則會(huì)用有參的構(gòu)造器,這時(shí)候查詢的返回結(jié)果必須和構(gòu)造器的參數(shù)一一對(duì)應(yīng),而且因?yàn)槭荕ybatis框架的原因,所有數(shù)據(jù)庫都有可能出現(xiàn)這個(gè)情況,只是拋出的提示會(huì)有所不同,值得注意的是如果用了@Bulider這個(gè)注解編譯后會(huì)生成一個(gè)全參的構(gòu)造器,需要注意文章來源地址http://www.zghlxwxcb.cn/news/detail-772444.html

到了這里,關(guān)于Mybaits:數(shù)據(jù)庫查詢類型不匹配,java.sql.SQLDataException: Cannot determine value type from string的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 數(shù)據(jù)庫SQL查詢相關(guān)練習(xí)

    1、顯示所有職工的基本信息。 2、查詢所有職工所屬部門的部門號(hào),不顯示重復(fù)的部門號(hào)。 3、求出所有職工的人數(shù)。 4、列出最高工和最低工資。 5、列出職工的平均工資和總工資。 6、創(chuàng)建一個(gè)只有職工號(hào)、姓名和參加工作的新表,名為工作日期表。 8、列出所有姓劉的職工

    2024年01月25日
    瀏覽(19)
  • 【數(shù)據(jù)庫】日常使用PL/SQL 登錄ORACLE 數(shù)據(jù)庫查詢數(shù)據(jù)

    一、PL/SQL 登錄方式 username: ##訪問數(shù)據(jù)庫的賬號(hào) password: ##訪問數(shù)據(jù)庫的密碼 Databse: ##數(shù)據(jù)庫IP地址/實(shí)例名 數(shù)據(jù)庫集群心跳地址/實(shí)例名 Connect as : ##Normal,如果使用sysdba賬戶登錄選擇SYSDBA 二、PL/SQL使用SQL語句查詢 點(diǎn)擊上方導(dǎo)航欄,New,選擇SQL Window,即可再次輸入要查詢的

    2024年02月19日
    瀏覽(30)
  • 數(shù)據(jù)庫 SQL高級(jí)查詢語句:聚合查詢,多表查詢,連接查詢

    數(shù)據(jù)庫 SQL高級(jí)查詢語句:聚合查詢,多表查詢,連接查詢

    創(chuàng)建Students和Courses表 直接查詢 設(shè)置別名查詢 設(shè)置條件查詢 使用COUNT(*) 和 COUNT(StudentID)是一樣的效果,因?yàn)镾tudentID是主鍵,每行記錄的主鍵都不同。另外我們?cè)诰酆喜樵冎羞€是能使用WHERE子句的,比如我們要 查找年齡大于20歲的學(xué)生數(shù)量 ,可使用以下SQL語句: 函數(shù) 說明 SUM

    2024年02月09日
    瀏覽(105)
  • 《數(shù)據(jù)庫原理》實(shí)驗(yàn)六 SQL數(shù)據(jù)查詢實(shí)驗(yàn)

    《數(shù)據(jù)庫原理》實(shí)驗(yàn)六 SQL數(shù)據(jù)查詢實(shí)驗(yàn)

    本系列傳送門: 實(shí)驗(yàn)二 SQL Server SSMS工具創(chuàng)建和管理數(shù)據(jù)庫及數(shù)據(jù)表 實(shí)驗(yàn)三 SQL Server SSMS工具添加數(shù)據(jù) 實(shí)驗(yàn)四 SQL的數(shù)據(jù)定義語句 實(shí)驗(yàn)五 數(shù)據(jù)庫完整性約束的實(shí)現(xiàn)與驗(yàn)證 實(shí)驗(yàn)六 SQL數(shù)據(jù)查詢實(shí)驗(yàn) 實(shí)驗(yàn)六(2) SQL數(shù)據(jù)查詢—連接查詢 實(shí)驗(yàn)七 SQL的數(shù)據(jù)更新和視圖 實(shí)驗(yàn)八 T_SQL編程

    2024年02月03日
    瀏覽(22)
  • SQL數(shù)據(jù)庫的查詢操作大全(select)

    SQL數(shù)據(jù)庫的查詢操作大全(select)

    1、數(shù)據(jù)庫的連接、創(chuàng)建 2、對(duì)字段的操作:(alter table) 3、對(duì)數(shù)據(jù)的操作(插入、修改、刪除) 4、數(shù)據(jù)查詢(select) 5、多表查詢(join on) 6、約束操作 四、數(shù)據(jù)庫查詢大全(select) 1、select 字段名 from 表; 2、In查詢:用于 過濾 你所需要查詢的內(nèi)容 ???????????????

    2023年04月08日
    瀏覽(20)
  • WordPress必備數(shù)據(jù)庫SQL查詢語句整理

    最近明月給博客和主站都部署了SSL證書,徹徹底底的加入了HTTPS站點(diǎn)行列。這個(gè)期間也用到了SQL查詢語句來批量的對(duì)內(nèi)鏈的HTTP前綴做替換,就感覺掌握一些SQL方面的語句還是非常有必要的,這不在【俄語譯客】博客上就發(fā)現(xiàn)了幾條比較實(shí)用的,適合 WordPress 實(shí)用的SQL語句。于

    2024年02月01日
    瀏覽(40)
  • SQL Server數(shù)據(jù)庫 -- 表的高級(jí)查詢

    SQL Server數(shù)據(jù)庫 -- 表的高級(jí)查詢

    ? 一、子查詢 嵌套子查詢 相關(guān)子查詢 二、查詢運(yùn)算 并運(yùn)算union 交運(yùn)算intersect 差運(yùn)算except 三、函數(shù)的使用 if語句 while語句 case語句 四、總結(jié) 高級(jí)子查詢是對(duì)查詢更靈活的運(yùn)用,學(xué)會(huì)了高級(jí)查詢將對(duì)數(shù)據(jù)庫使用有很大的幫助。 ? ? ? 在SQL語言中,一個(gè)select-from-where語句稱為一

    2024年02月13日
    瀏覽(91)
  • SQL Server數(shù)據(jù)庫 -- 表的基礎(chǔ)查詢

    SQL Server數(shù)據(jù)庫 -- 表的基礎(chǔ)查詢

    一、單表查詢基本結(jié)構(gòu) 二、單表查詢結(jié)構(gòu)語法 select 聚合函數(shù) where 模糊查詢 order by group by having 三、多表查詢基本結(jié)構(gòu) 四、多表查詢結(jié)構(gòu)語法 內(nèi)連接 自連接 外連接 五、總結(jié) ? ? ? ? 學(xué)習(xí)了數(shù)據(jù)庫,在以后公司等地方,你可能不會(huì)用到創(chuàng)建數(shù)據(jù)庫或者表格,但是你一定會(huì)使

    2024年02月11日
    瀏覽(101)
  • 第44章 SQL 用于各種數(shù)據(jù)庫的數(shù)據(jù)類型教程

    Microsoft Access、MySQL 和 SQL Server 所使用的數(shù)據(jù)類型和范圍。 數(shù)據(jù)類型 描述 存儲(chǔ) Text 用于文本或文本與數(shù)字的組合。最多 255 個(gè)字符。 Memo Memo 用于更大數(shù)量的文本。最多存儲(chǔ) 65,536 個(gè)字符。 注釋: 無法對(duì) memo 字段進(jìn)行排序。不過它們是可搜索的。 Byte 允許 0 到 255 的數(shù)字。

    2024年02月06日
    瀏覽(26)
  • DB(一):數(shù)據(jù)庫概述、SQL概述、Oracle數(shù)據(jù)類型

    包括Oracle、DB2、SQL Server、MySQL數(shù)據(jù)庫概述;數(shù)據(jù)定義語言DDL、數(shù)據(jù)操作語言DML、事務(wù)控制語言TCL、數(shù)據(jù)查詢語言DQL、數(shù)據(jù)控制語言DCL語言介紹;NUMBER 、CHAR、VARCHAR2、DATE數(shù)據(jù)庫類型;CHAR和VARCHAR2的存儲(chǔ)編碼、CHAR和VARCHAR2的最大長度、LONG和CLOB類型。 1、DB和DBMS (1)、數(shù)據(jù)庫(

    2024年02月09日
    瀏覽(112)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包