@insert mybatis踩坑記錄,實(shí)體接收前端傳遞的參數(shù)
@insert mybatis踩坑實(shí)體接收前端傳遞的參數(shù)
插入方法使用的使用entity實(shí)體對(duì)象進(jìn)行接收的
@Insert(" insert into infor (name,pass,salary) values (#{infor.name},#{infor.pass},#{infor.salary})")
? ? public int save(@Param("infor") Infor infor); ?//必須添加@param這個(gè)注解,使得mybatis去解析這個(gè)數(shù)據(jù),否則一直提示infor的沒(méi)有g(shù)etter方法
@Insert(" insert into infor (name,pass,salary) values (#{name},#{pass},#{salary})")
? ? public int save( Infor infor); ?經(jīng)過(guò)后來(lái)的工作才 認(rèn)識(shí)到,使用上面的一種方式確實(shí)可行,同時(shí)我們可以直接使用這個(gè)實(shí)體類(lèi)的屬性進(jìn)行對(duì)應(yīng)的insert的操作,特此來(lái)更新博文。
錯(cuò)誤提示:
org.apache.ibatis.reflection.ReflectionException: There is no getter for property named 'infor' in 'class com.ys.study.entity.Infor'
at org.apache.ibatis.reflection.Reflector.getGetInvoker(Reflector.java:419) ~[mybatis-3.4.6.jar:3.4.6]
at org.apache.ibatis.reflection.MetaClass.getGetInvoker(MetaClass.java:164) ~[mybatis-3.4.6.jar:3.4.6]
at org.apache.ibatis.reflection.wrapper.BeanWrapper.getBeanProperty(BeanWrapper.java:162) ~[mybatis-3.4.6.jar:3.4.6]
at org.apache.ibatis.reflection.wrapper.BeanWrapper.get(BeanWrapper.java:49) ~[mybatis-3.4.6.jar:3.4.6]
at org.apache.ibatis.reflection.MetaObject.getValue(MetaObject.java:122) ~[mybatis-3.4.6.jar:3.4.6]
at org.apache.ibatis.reflection.MetaObject.metaObjectForProperty(MetaObject.java:145) ~[mybatis-3.4.6.jar:3.4.6]
at org.apache.ibatis.reflection.MetaObject.getValue(MetaObject.java:115) ~[mybatis-3.4.6.jar:3.4.6]
at org.apache.ibatis.scripting.defaults.DefaultParameterHandler.setParameters(DefaultParameterHandler.java:79) ~[mybatis-3.4.6.jar:3.4.6]
at org.apache.ibatis.executor.statement.PreparedStatementHandler.parameterize(PreparedStatementHandler.java:93) ~[mybatis-3.4.6.jar:3.4.6]
at org.apache.ibatis.executor.statement.RoutingStatementHandler.parameterize(RoutingStatementHandler.java:64) ~[mybatis-3.4.6.jar:3.4.6]
at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86) ~[mybatis-3.4.6.jar:3.4.6]
at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:49) ~[mybatis-3.4.6.jar:3.4.6]
at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117) ~[mybatis-3.4.6.jar:3.4.6]
at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76) ~[mybatis-3.4.6.jar:3.4.6]
at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198) ~[mybatis-3.4.6.jar:3.4.6]
at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:185) ~[mybatis-3.4.6.jar:3.4.6]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_171]
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_171]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_171]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_171]
mybatis獲取主鍵及參數(shù)傳遞的有關(guān)問(wèn)題
獲取主鍵值
insert into emp values(null,#{ename},#{age},#{sex}) /*insert into emp values(null,'${ename}',${age},'${sex}')*/不同的參數(shù)類(lèi)型,${}和#{}的不同取值方式
1.當(dāng)傳輸參數(shù)為單個(gè)String或基本數(shù)據(jù)類(lèi)型及其包裝類(lèi)
#{}:可以以任意的名字獲取參數(shù)值:只能以{value}huo${_parameter}獲取
2.當(dāng)傳輸參數(shù)為javabean時(shí)
#{}和都可以通過(guò)屬性名直接獲取屬性值,但是要注意{}的單引號(hào)問(wèn)題
3.當(dāng)傳輸多個(gè)參數(shù)時(shí),mybatis會(huì)默認(rèn)將這些參數(shù)放在map集合中
兩種方式:
(1) 鍵為01.2,3,…n-1 以參數(shù)為值
(2) 鍵為param1,param2,param3…param(n).以參數(shù)為值
#{}:#{arg0}/#{arg1};#{param1},#{param2}:{param1},param2,{arg0},arg1.但是要注意{}的單引號(hào)問(wèn)題
4.當(dāng)傳輸map參數(shù)時(shí)
#{}和都可以通過(guò)鍵的名字直接獲值,但是要注意{}的單引號(hào)問(wèn)題
5.命名參數(shù)
可以通過(guò)@param(:‘key’)為map集合指定鍵的名字
Emp getEmpByIDAndEnameParam(@Param(“eid”) Integer eid, @Param(“ename”) String ename);
#{}和都可以通過(guò)鍵的名字直接獲值,但要注意{}的單引號(hào)問(wèn)題
6.當(dāng)傳輸參數(shù)為L(zhǎng)ist或Array,mybatis會(huì)將List或Array放在map中
List以list為鍵,Array以array為鍵
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
spring boot@EnableXXXX注解編程模型講解
這篇文章主要介紹了spring boot@EnableXXXX注解編程模型,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09
利用Jackson解決Json序列化和反序列化問(wèn)題
Jackson是一個(gè)用于處理Json數(shù)據(jù)的Java庫(kù),它提供了一系列功能,包括Json序列化和反序列化,所以本文就來(lái)講講如何利用利用Jackson解決Json序列化和反序列化的問(wèn)題吧2023-05-05
Java發(fā)送form-data請(qǐng)求實(shí)現(xiàn)文件上傳
這篇文章主要為大家詳細(xì)介紹了Java發(fā)送form-data請(qǐng)求實(shí)現(xiàn)文件上傳,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06
淺談SpringMVC HandlerInterceptor詭異問(wèn)題排查
這篇文章主要介紹了淺談SpringMVC HandlerInterceptor詭異問(wèn)題排查,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05
Java中Stream實(shí)現(xiàn)List排序的六個(gè)核心技巧總結(jié)
這篇文章主要介紹了Java中Stream實(shí)現(xiàn)List排序的六個(gè)核心技巧,分別是自然序排序、反向排序、空值安全處理、多字段組合排序、并行流加速、原地排序等,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04

