成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

MyBatis理解與掌握(輸入與輸出)

why_rookie / 3134人閱讀

摘要:輸入?yún)?shù)類型指定輸入?yún)?shù)類型,通過從輸入對象中獲取參數(shù)值放置在中。查詢結(jié)果處理指定輸出結(jié)果類型,將查詢結(jié)果的一行記錄數(shù)據(jù)映射為指定類型的對象。

MyBatis理解與掌握(輸入與輸出)

@(MyBatis)[Java, 框架, MyBatis]

占位符和拼接
{}:占位符

能防止sql注入問題,所一能盡量用#{}就盡量用#{}
用來傳入?yún)?shù),sql在解析的時(shí)候會(huì)加上 "" 當(dāng)成字符串來解析 ,如這里 role_id = "roleid";
模糊查詢(不同的數(shù)據(jù)庫采用不同的sql拼接方式)

mysql:

 select * from t_user where name like concat("%",#{zhang},"%")

oracle:

select * from t_user where name like "%" || #{zhang} || "%"
${}:拼接符

存在sql注入問題
$一般用入傳入數(shù)據(jù)庫對象,比如數(shù)據(jù)庫表名、列名
注意:數(shù)據(jù)庫表名、列名和排序方式不能使用#,而 應(yīng)該使用$

表名使用拼串:sql select * from ${tableName};
列名使用拼串:sql select ${colName} from t_user;
排序使用拼串: sql select * from t_user where age = #{age} order by name ${orderType2}

sql注入

繞過了驗(yàn)證機(jī)制,把不應(yīng)該查詢的數(shù)據(jù)也給查詢出來了,存在數(shù)據(jù)安全問題。拼串存在SQL注入是因?yàn)樗褏?shù)作為sql語法的一部分進(jìn)行了編譯,數(shù)據(jù)庫會(huì)執(zhí)行這條語句。使用占位符不存在SQL注入,是因?yàn)閰?shù)是在在sql編譯后傳遞,數(shù)據(jù)庫只會(huì)把參數(shù)作為查詢條件進(jìn)行判斷。

"select * from t_user where id =" + id;
String id = "1 or 1=1";   //sql 注入出現(xiàn)

如果使用的是拼接的方式,對參數(shù)不同的sql語句會(huì)多次編譯,增加了編譯次數(shù),降低效率。
原因:占位符方式,sql語句到數(shù)據(jù)庫中取數(shù)據(jù)前才把參數(shù)加入進(jìn)去。拼接是sql語句和參數(shù)一同編譯,參數(shù)不同,編譯后生成的sql語句不同,需要多次編譯。

輸入?yún)?shù)類型 parameterType

指定輸入?yún)?shù)類型, mybatis 通過 ognl 從輸入對象中獲取參數(shù)值放置在 sql中。

(1)簡單類型(字符串類型,Integer,int...)

parameterType="Integer"
應(yīng)用場景:sql中只有一個(gè)參數(shù)的時(shí)候使用

(2)自定義類型

parameterType="com.george.pojo.Employee"
注意要寫類的全路徑
sql的參數(shù)會(huì)從自定義類的屬性中獲取,執(zhí)行時(shí),會(huì)根據(jù)參數(shù)名稱在對象中反射調(diào)用方法,如果相同名稱的屬性不存在,會(huì)發(fā)生異常,所以__參數(shù)名稱必須和屬性名稱保持一致__
應(yīng)用場景:sql中多個(gè)參數(shù)有相同的含義,使用自定義類型
User user = session.selectOne("selectUser",user );

(3)參數(shù)類型可以為集合類型

parameterType="Map"
sql的參數(shù)會(huì)從Map集合中根據(jù)key獲取參數(shù)值。所以,參數(shù)名稱必須和Map集合的key名稱一樣
應(yīng)用場景:sql中多個(gè)參數(shù)沒有任何的關(guān)系時(shí),采用Map集合類型。
User user = session.selectOne("selectUser",map);

查詢結(jié)果處理 resultType

指定輸出結(jié)果類型, mybatis 將 sql 查詢結(jié)果的一行記錄數(shù)據(jù)映射為 resultType 指定類型的對象。

封裝成一個(gè)類

Mybatis框架的輸出主要針對的就是 查詢結(jié)果輸出


    select id , name ,description,img_url,sort,is_display
    from bbs_brand
    
     
       is_display = #{isDisplay}
     
     
       and name = #{name}
     
    
    order by id desc
    limit #{startRow},#{pageSize}
封裝成一個(gè)Map

將字段名作為key,查詢結(jié)果值作為value,放到Map中

Map map = session.selectOne("selectUser");

使用場景:當(dāng)數(shù)據(jù)間沒有任何的關(guān)系,采用Map集合類型。

封裝String與簡單類型

將查詢結(jié)果轉(zhuǎn)換為String類型

返回的是查詢結(jié)果的第一個(gè)字段

使用場景:
當(dāng)獲取數(shù)量或單一字段值的時(shí)候,使用簡單類型接收數(shù)據(jù)

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/77144.html

相關(guān)文章

  • MyBatis理解掌握(簡介)

    摘要:語句在代碼中硬編碼,造成代碼不易于維護(hù),實(shí)際應(yīng)用變化的可能較大,變動(dòng)需要改變代碼。對結(jié)果集解析存在硬編碼查詢列名,變化導(dǎo)致解析代碼變化,系統(tǒng)不易于維護(hù),如果能將數(shù)據(jù)庫記錄封裝成對象解析比較方便。 MyBatis理解與掌握(簡介) @(MyBatis)[Java, 框架, MyBatis] 簡介 ??Mybatis是一個(gè)數(shù)據(jù)持久層框架,MyBatis消除了幾乎所有的JDBC代碼和參數(shù)的手...

    Pocher 評論0 收藏0
  • MyBatis理解掌握(動(dòng)態(tài)SQL)

    摘要:理解與掌握動(dòng)態(tài)框架就是簡單的條件判斷,利用語句我們可以實(shí)現(xiàn)某些簡單的條件選擇。有了元素我們就可以動(dòng)態(tài)的更新那些修改了的字段。 MyBatis理解與掌握(動(dòng)態(tài)SQL) @(MyBatis)[Java, 框架, MyBatis] if if 就是__簡單的條件判斷 __,利用if語句我們可以實(shí)現(xiàn)某些簡單的條件選擇。先來看如下一個(gè)例子: select * from user whe...

    blankyao 評論0 收藏0
  • java篇

    摘要:多線程編程這篇文章分析了多線程的優(yōu)缺點(diǎn),如何創(chuàng)建多線程,分享了線程安全和線程通信線程池等等一些知識。 中間件技術(shù)入門教程 中間件技術(shù)入門教程,本博客介紹了 ESB、MQ、JMS 的一些知識... SpringBoot 多數(shù)據(jù)源 SpringBoot 使用主從數(shù)據(jù)源 簡易的后臺(tái)管理權(quán)限設(shè)計(jì) 從零開始搭建自己權(quán)限管理框架 Docker 多步構(gòu)建更小的 Java 鏡像 Docker Jav...

    honhon 評論0 收藏0
  • BAT程序員必備技能

    摘要:前言想要進(jìn)入等一線互聯(lián)網(wǎng)公司,以下是你必需具備的技能。包由解釋程序自動(dòng)加載,不需要顯示說明。包包括許多具有特定功能的類,有日期向量哈希表堆棧等,其中類支持與時(shí)間有關(guān)的操作。包定義了應(yīng)用程序編程接口,是應(yīng)用程序環(huán)境的中性平臺(tái)組件結(jié)構(gòu)。 前言 想要進(jìn)入BAT等一線互聯(lián)網(wǎng)公司,以下是你必需具備的技能。如果你掌握的不牢固,那就趕快鞏固,如果你還沒有涉及,現(xiàn)在就立馬學(xué)習(xí)起來吧。 1.Java語言...

    fobnn 評論0 收藏0
  • MyBatis理解掌握(關(guān)聯(lián)查詢)

    摘要:訂單信息與訂單明細(xì)為一對多關(guān)系。例如先從單表查詢,需要時(shí)再從關(guān)聯(lián)表去關(guān)聯(lián)查詢,大大提高數(shù)據(jù)庫性能,因?yàn)椴樵儐伪硪汝P(guān)聯(lián)查詢多張表速度要快。作用將關(guān)聯(lián)查詢信息映射到一個(gè)對象中。 MyBatis理解與掌握(關(guān)聯(lián)查詢) @(MyBatis)[Java, 框架, MyBatis] 一對一查詢 案例:查詢所有訂單信息,關(guān)聯(lián)查詢下單用戶信息 showImg(https://segmentfault...

    MiracleWong 評論0 收藏0

發(fā)表評論

0條評論

最新活動(dòng)
閱讀需要支付1元查看
<