MyBatis使用問題記載

一、前言

之前除了實(shí)習(xí)的時(shí)候用了oracle之外叶组,一直都是在使用mysql的拯田,但是對于批量插入oracle的支持還是挺特別,其實(shí)最后看來甩十,都是支持勿锅,只是我們不常這么寫。下面進(jìn)入重點(diǎn)枣氧;

二溢十、mybatis中oracle的批量操作

1、oracle批量插入
最初寫的時(shí)候如下:

<insert id="insertBatchInfo" parameterType="java.util.List">
  insert into t_share_time (id,com_id,week,start_time,end_time,create_time)  values
  <foreach collection="list" item="item" index="index" separator=",">
    (#{item.id},#{item.pileId},#{item.week},#{item.startTime},#{item.endTime},now())
  </foreach>
</insert>

所以很明顯达吞,照葫蘆畫瓢张弛,oracle下也這么寫,結(jié)果很明顯酪劫,就是報(bào)錯(cuò)

org.springframework.jdbc.BadSqlGrammarException:
### Error updating database. Cause: java.sql.SQLException: ORA-00933: SQL 命令未正確結(jié)束
###the error  occured while setting parameters
###SQL:insert t_custom(custom_id,  create_time, state,  remark,name,custom_type) values (?,?,?,   ?,?,?),(?,?,?,?,?,?),(?,?,?,?,?,?)
Caused by: java.sql.SQLException: ORA-00933: SQL 命令未正確結(jié)束

這可就把我給弄到了吞鸭,最后搜呀,得到的結(jié)果是

    由于oracle不支持insert多個(gè)values的方式

最后寫的方式如下:

  <insert id="insertCommonCustom" parameterType="java.util.List">
           insert  into t_custom(custom_id,  create_time, state,  remark,name,custom_type,
           select seq__custom.nextval, a.*  from(
           <foreach collection="list" item="item" separator=" union all ">
              select 
              #{item.createTime,jdbcType=DATE},
              #{item.state,jdbcType=VARCHAR},
              #{item.remark,jdbcType=VARCHAR},
              #{item.name,jdbcType=VARCHAR},
              #{item.customType,jdbcType=VARCHAR}
               from dual
           </foreach>
           ) a
  </insert>

實(shí)際上就是語法覆糟,insert into table(**) select ....刻剥。
2:mysql對于批量插入的支持注意點(diǎn)

Error code 1064, SQL state 42000: You have an error in your SQL syntax;

此時(shí)需要修改你的數(shù)據(jù)庫url,需要加url上加上

allowMultiQueries=true

三滩字,oracel中null的處理

mapper.java層
public Integer updateStus(@Param("sn") String sn,@Param("stus") String stus);

mapper.xml
<update id="updateStus">
    update t_user  t set t.STUS=#{stus} where t.sn=#{sn}
</update>

經(jīng)過測試
如果傳入的sn或者stus都是此""造虏,則不用指定jdbcType;如果傳入null則需要指定jdbcType。但是在mysql中使用mybatis處理則不需要如此的問題麦箍。
null報(bào)錯(cuò)如下:

org.mybatis.spring.MyBatisSystemException: nested exception is 
org.apache.ibatis.type.TypeException: Could not set parameters for 
mapping: ParameterMapping{property='types', mode=IN, 
javaType=class java.lang.Long, jdbcType=null, numericScale=null, 
resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: 
org.apache.ibatis.type.TypeException: Error setting null for parameter 
#2 with JdbcType OTHER . Try setting a different JdbcType for this 
parameter or a different jdbcTypeForNull configuration property. Cause: 
java.sql.SQLException: 無效的列類型

四:oracle中插入并返回主鍵數(shù)據(jù)

<insert id="EmailCreate"  parameterType="com.mouse.pojo.Email">
    <selectKey resultType="java.lang.Long" order="BEFORE" keyProperty="emailId">
        SELECT SEQ_MOUSE_EMAIL_ID.NEXTVAL FROM DUAL
    </selectKey>
    insert into t_email_validate (email_id,
                sign_code, status, type, create_by,
                create_time, update_by, update_time) 
                values (#{emailId,jdbcType=BIGINT},
                 #{signCode,jdbcType=VARCHAR},
                #{status,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR},
                #{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP},
                #{updateBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP})
</insert>   
使用selectKey來對主鍵賦值插入到數(shù)據(jù)庫漓藕,最后會將這個(gè)值賦值到對象中去,所以在代碼中用Email的對象email.getEmailId()來獲取數(shù)據(jù)。

五:nested exception is java.sql.SQLDataException: ORA-01810: 格式代碼出現(xiàn)兩次
我得插入代碼中寫的sql是to_date('${create_date}','YYYY-MM-DD HH:mm:ss'),
oracle MM和mm是一樣的挟裂,所以使用mi去代mm,然后我傳入數(shù)據(jù)"2017-01-09 13:12:00",結(jié)果又提示錯(cuò)誤

; nested exception is java.sql.SQLDataException: ORA-01849: 小時(shí)值必須介于 1 和 12 之間

to_date函數(shù)享钞,其格式化的參數(shù)分為兩類,一為12小時(shí)制诀蓉,一為24小時(shí)制,默認(rèn)是12小時(shí)
to_date需要做進(jìn)一步修改to_date('${create_date}','YYYY-MM-DD HH24:mm:ss'),

六:無效的列類

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.UncategorizedSQLException: Error setting null for parameter #1 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 無效的列類型: 1111
; uncategorized SQLException for SQL []; SQL state [99999]; error code [17004]; 無效的列類型: 1111; nested exception is java.sql.SQLException: 無效的列類型: 1111

如果插入的數(shù)據(jù)有空的話需要指定數(shù)據(jù)類型

{userName,jdbcType=VARCHAR}或者使用'${userName}'

七:浩語

                                          __                                                        
                            __  _  ____ __|  |__ _____    ___
                            \ \/ \/ /  |  \  |  \\__  \  /  _ \   
                             \     /|  |  /   Y  \/ __ \(  <_> )
                              \/\_/ |____/|___|  (____  /\____/ 
                                                    \/     \/          
                         2016栗竖,To Work Hard,To Adapter,To Change Myself
                                                       
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末暑脆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子狐肢,更是在濱河造成了極大的恐慌添吗,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件处坪,死亡現(xiàn)場離奇詭異,居然都是意外死亡架专,警方通過查閱死者的電腦和手機(jī)同窘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評論 2 383
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來部脚,“玉大人想邦,你說我怎么就攤上這事∥酰” “怎么了丧没?”我有些...
    開封第一講書人閱讀 156,531評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長锡移。 經(jīng)常有香客問我呕童,道長,這世上最難降的妖魔是什么淆珊? 我笑而不...
    開封第一講書人閱讀 56,309評論 1 282
  • 正文 為了忘掉前任夺饲,我火速辦了婚禮,結(jié)果婚禮上施符,老公的妹妹穿的比我還像新娘往声。我一直安慰自己,他們只是感情好戳吝,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評論 5 384
  • 文/花漫 我一把揭開白布浩销。 她就那樣靜靜地躺著,像睡著了一般听哭。 火紅的嫁衣襯著肌膚如雪慢洋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,730評論 1 289
  • 那天陆盘,我揣著相機(jī)與錄音且警,去河邊找鬼。 笑死礁遣,一個(gè)胖子當(dāng)著我的面吹牛斑芜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播祟霍,決...
    沈念sama閱讀 38,882評論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼杏头,長吁一口氣:“原來是場噩夢啊……” “哼盈包!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起醇王,我...
    開封第一講書人閱讀 37,643評論 0 266
  • 序言:老撾萬榮一對情侶失蹤呢燥,失蹤者是張志新(化名)和其女友劉穎寓娩,沒想到半個(gè)月后叛氨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,095評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棘伴,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評論 2 325
  • 正文 我和宋清朗相戀三年焊夸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了阱穗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片揪阶。...
    茶點(diǎn)故事閱讀 38,566評論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡扰魂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蕴茴,到底是詐尸還是另有隱情劝评,我是刑警寧澤,帶...
    沈念sama閱讀 34,253評論 4 328
  • 正文 年R本政府宣布倦淀,位于F島的核電站蒋畜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏撞叽。R本人自食惡果不足惜姻成,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望愿棋。 院中可真熱鬧科展,春花似錦、人聲如沸糠雨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至琅攘,卻和暖如春垮庐,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背坞琴。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評論 1 264
  • 我被黑心中介騙來泰國打工哨查, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人剧辐。 一個(gè)月前我還...
    沈念sama閱讀 46,248評論 2 360
  • 正文 我出身青樓寒亥,卻偏偏與公主長得像,于是被迫代替她去往敵國和親荧关。 傳聞我的和親對象是個(gè)殘疾皇子溉奕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 什么是數(shù)據(jù)庫? 數(shù)據(jù)庫是存儲數(shù)據(jù)的集合的單獨(dú)的應(yīng)用程序羞酗。每個(gè)數(shù)據(jù)庫具有一個(gè)或多個(gè)不同的API腐宋,用于創(chuàng)建紊服,訪問檀轨,管理...
    chen_000閱讀 4,032評論 0 19
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)欺嗤,斷路器参萄,智...
    卡卡羅2017閱讀 134,626評論 18 139
  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL煎饼、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 5,452評論 0 4
  • 它靜下來時(shí)是空氣 跑起來就成風(fēng)了 嗯 我愛上了你跑來跑去的樣子讹挎。
    留子堯閱讀 187評論 0 0
  • 小時(shí)候,要是你做事情不聽人勸吆玖,總固執(zhí)己見筒溃,大人們會說你“犟得像頭驢”,對于驢沾乘,能讓人聯(lián)想到的最多的都是“蠢驢...
    奔跑ing的蝸牛閱讀 289評論 0 4