1. 程式人生 > >maybatis 各種零散知識總結(傳參,返回值,標籤等)

maybatis 各種零散知識總結(傳參,返回值,標籤等)

1. MyBatis的傳入引數parameterType型別分兩種

   1. ①. 基本資料型別:int,string,long,Date;

   1. ②. 複雜資料型別:map (parameterType="java.util.HashMap"

③. 如果傳參為   陣列,List   (parameterType="java.util.ArrayList"   一般用於for each標籤   下面將會介紹到)   

像1。這種基本傳參型別   我就不說了 。下面簡單介紹一下② 

一般遇到傳如多個引數的時候   一般會選擇會新建個實體 或者  創個map

1.1 實體傳參 (假設引數的實體為  User  路徑為:

com.vanke.Entity.User    傳入四個引數  (name,age,sex,idnumber))

            serviceimpl 中 一般用  實體.set  設定屬性就可以了

  1. User user=new User();
  2. user.setName('張三');
  3. user.setAge(18);
  4. user.setSex('男');
  5. user.setIdnumber('1888888888');

一般 mapper .xml檔案配置為

  1. <selectid="queryCarMakerList"resultMap="BaseResultMap"parameterType="com.vanke.Entity.User
    "
    >
  2.         select  
  3.          *
  4.         from common_car_make cm  
  5.         where 1=1
  6.         <iftest="name!= null">
  7.             and  cm.name= #{name,jdbcType=DECIMAL}  
  8.         </if>
  9.         <iftest="age!= null">
  10.             and  cm.name = #{carDeptName,jdbcType=VARCHAR}  
  11.         </if>
  12.         <iftest="sex!= null">
  13.             and  cm.sex = #{carMakerName,jdbcType=VARCHAR}  
  14.         </if>
  15.         <iftest="idnumber != null">
  16.            and  cm.idnumber = #{hotType,jdbcType=number}  
  17.         </if>
  18.         ORDER BY cm.id  
  19.     </select>
2. map集合傳參(傳入四個引數  (name,age,sex,idnumber)

        serviceimpl 中

  1. Map map=new HashMap();
  2. map.put("name","張三");
  3. map.put("age","18");
  4. map.put("sex","男");
  5. map.put("idnumber","18888888888888");
mapper .xml檔案配置為
  1. <selectid="queryCarMakerList"resultMap="BaseResultMap"parameterType="map">
  2.         select  
  3.          *
  4.         from common_car_make cm  
  5.         where 1=1
  6.         <iftest="name!= null">
  7.             and  cm.name= #{name,jdbcType=DECIMAL}  
  8.         </if>
  9.         <iftest="age!= null">
  10.             and  cm.name = #{carDeptName,jdbcType=VARCHAR}  
  11.         </if>
  12.         <iftest="sex!= null">
  13.             and  cm.sex = #{carMakerName,jdbcType=VARCHAR}  
  14.         </if>
  15.         <iftest="idnumber != null">
  16.            and  cm.idnumber = #{hotType,jdbcType=number}  
  17.         </if>
  18.         ORDER BY cm.id  
  19.     </select>

2.MyBatis的返回引數型別分兩種

1.1. resultMap :(自己指定返回的引數 )

  ①  先定義一個<resultMap    id 即為 resultMap 的命名>

<resultMap id="HouseResultMap"type="com.vankeHouse">
    <id property="id" column="id"/>
    <result property="dev_code" column="dev_code"/>
    <result property="dev_name" column="dev_name"/>
    <result property="pro_code" column="pro_code"/>

② 設定返回型別 resultMap=“HouseResultMap”

<select id="getHouserRoom" parameterType="int" resultType="HouseResultMap">
SELECT <include refid="getHouserR"/> from house where id=#{id}
</select>

③ 當返回型別為 map時 (① 返回結果為String



service:

2. 返回為sum時


*****


原因是,sum() 的結果是作為 java.math.BigDecimal 來處理的, 而他不能直接轉換成 java.lang.Integer,所以報錯。



1.2. resultType :int,string,long,實體

      如果有的小夥伴要問    要返回 List 怎麼辦

        1. 如果返回 List<String>   返回型別為 String即可  

        2. 如果返回 List<Entity>  返回型別為   實體  即可  

3  .  mybatis中#和$繫結引數的區別  以及用途

     ①  #()方式能夠很大程度防止sql注入。    

     ②  $方式無法防止Sql注入。

預設情況下,使用#{}  格式的語法會導致MyBatis建立預處理語句屬性並以它為背景設定安全的值(比如?)。這樣做很安全,很迅速也是首選做法,有時你只是想直接在SQL語句中插入一個不改變的字串。比如,像ORDER BY,你可以這樣來使用:
ORDER BY ${columnName}


  1. #{}將傳入的資料都當成一個字串,會對自動傳入的資料加一個雙引號。如:order by #{id},如果傳入的值是111,那麼解析成sql時的值為order by “111”, 如果傳入的值是id,則解析成的sql為order by “id”。    (sql報錯

  2. ${}將傳入的資料直接顯示生成在sql中。如:order by 
    ${id},如果傳入的值是111,那麼解析成sql時的值為order by 111, 如果傳入的值是id,則解析成的sql為order 
    by id。


4.Mybatis中 常用的<if><where><foreach><set><choose>等標籤詳解

              sql語句where條件中,需要一些安全判斷,例如按性別檢索,如果傳入的引數是空的,此時查詢出的結果很可能是空的,也許我們需要引數為空時,是查出全部的資訊。這是我們可以使用動態sql,增加一個判斷,當引數不符合要求的時候,我們可以不去判斷此查詢條件。
       一個很普通的查詢:
  1. <!-- 查詢學生list,姓名 -->
  2. <selectid="getStudentListLikeName"parameterType="StudentEntity"resultMap="studentResultMap">
  3.     SELECT * from userWHERE  name=#{name}
  4. </select>
    但是此時如果name是null或空字串,此語句很可能報錯或查詢結果為空。此時我們使用if動態sql語句先進行判斷,如果值為null或等於空字串,我們就不進行此條件的判斷。
   一。<if>標籤:
  1. <selectid=" getStudentListLikeName "parameterType="StudentEntity"resultMap="studentResultMap">
  2.     SELECT * from user
  3.     <iftest="name!=null and name!='' ">
  4.        WHERE  name=#{name}  
  5.     </

    相關推薦

    maybatis 各種零散知識總結(返回標籤)

    1. MyBatis的傳入引數parameterType型別分兩種   1. ①. 基本資料型別:int,string,long,Date;   1. ②. 複雜資料型別:類和map (parameterType="java.util.HashMap")③. 如果傳參為  

    python開發編程基礎:函數定義返回

    pan span true 調用 odin pwd 括號 問題 pre 一,函數的定義 1,函數mylen叫做函數名  #函數名  #必須由字母下劃線數字組成,不能是關鍵字,不能是數字開頭  #函數名還是要有一定的意義能夠簡單說明函數的功能2,def是關鍵字 (defi

    c++ linux 下匯編分析以及返回

    傳遞 {} UNC 而不是 pub x86 target 訪問 開始 註意:都是在沒有優化的情況下編譯的。因為只要開-O1或是-O2,那麽匯編代碼就少的可憐了,都被優化掉了 編譯器版本:x86-64 gcc 5.5 1 POD類型傳參 1.1 一個pod參數,p

    初識函數(定義語法返回數)

    函數傳遞 打包成 定義函數 函數名 賦值 關鍵字參數 動態 初識 def 1.什麽是函數 函數是對代碼塊和功能的封裝和定義 2.函數的語法和定義 使用def關鍵字來定義函數,函數的定義語法是 def 函數名(): 函數體 函數名的命名規則和變量一樣 函數體就是

    Effective C++讀書筆記----自定義型別的返回問題

    對於自定義型別,傳參的時候儘可能的使用傳引用來代替傳值。 看如下這個例子: #include <iostream> using namespace std; #include <string> class Person {

    javascript函式的宣告、呼叫、返回

    在javascript中函式的宣告方法有兩種: function func (){ alert("hello,world"); } var func =new Function (alert("hello,world")); var func = function(

    多函式程式的基本使用流程返回引數

    一般在實際開發過程中,一個程式往往由多個函式(後面知識中會講解類)組成,並且多個函式共享某些資料,這種場景是經常出現的,因此下面來總結下,多個函式中共享資料的幾種方式 使用全域性變數 g_num = 0 def test1(): global g_num …將處理結

    SQL語句MyBatis什麼時候用#什麼時候用$

    程式碼截圖如下: <select id="get_" parameterType="map" resultMap="user"> select * FROM `use

    mybatis 呼叫oracle儲存過程返回遊標的獲取--示例

    1,dao層程式碼 Integer currentlq_fsx = getSqlSession().selectOne("lqMapper.maxscore"); Map<String,Object> map = new HashMap<String,O

    使用Get方法到Action中出現中文亂碼的問題

    優化一個簡單的功能,通過BJUI 自帶的jQuery 方法 ,使用get 方式傳遞引數。控制檯headers 處看到傳遞的是中文字元,而debug進入Action後卻是亂碼。 嘗試和檢查了以下幾項: 1. jsp頁面已經設定了全域性的編碼。 Myecli

    vue.js路由的幾種方式及特點包括router-link$router.push動態路由匹配params和query

    最近vue用的比較多,就想對各種知識做一個小結,比如這個就是路由導航的一個小總結。具體內容如下: 一、<router-link> <router-link>標籤中的to屬性用來指定路由路徑。 to的型別:string | Location

    為0時查詢語句失效的原因

    如下圖,當選擇的貨幣型別為人民幣(value為0)時,模糊查詢語句失效! 之前也遇到這個問題不知道什麼原因,只知道把判斷條件<if>刪掉就可以,這次問了同事後知道了,記錄一下! 原因如下: Mybatis判斷int是否為空只要!=null就行了,如果

    node.js給PHP失敗headers加上'Content-Length': Buffer.byteLength(content)

    node.js需要傳參給PHP,執行計劃任務 var events = require('events'); start_cron("gc","www.y.com",80,"/cron.php",30000,{"auth":"7wElqW6vG2FcjnhomEckLg1W2t6uP5ZE0Vl

    定義一個帶返回的方法實現輸出隨機數數組

    publicpublic class mains { public static void main(String[] args) { // 創建對象,對象名為hello mains hello = new mains(); // 調用方法並將返回值保存在變量中

    推薦的MyBatis方式List、數組

    word www rom open 方式 item log 詳細 batis MyBatis 推薦的傳參方式 如果要詳細的學習 MyBatis,推薦看這個教程:https://www.w3cschool.cn/mybatis/ 1. 單個參數 //接口方法 int getA

    js函式是按傳遞還是按引用傳遞?

    基本型別、引用型別 閒扯完了,開始寫今天要總結的基礎知識。 基本型別: undefined、Null、Boolean、Number、String五種 (簡單的資料段); 引用型別: object (由多個值構成)。 兩種型別在使用上的區別: 複製變數 這塊好理解,看一

    重寫Math 中sin cos asin  acos 方法將其入或者返回 從弧度改為角度

    Math 中sin cos 方法的入參 單位是弧度,而我們在數學公式中填寫的都是角度; Math 中asin  acos 方法的返回值 單位是弧度,而我們在數學公式中arcsin  arccos返回

    4. 陣列int[] intArr = new int[]{5,9,3,7,2,6}寫出一個函式可根據傳(引數為需要獲取的陣列型別:1:正序排序陣列;2:倒序排序陣列;)來進行排序返回為int

    4. 陣列int[] intArr = new int[]{5,9,3,7,2,6},寫出一個函式可根據傳參(引數為需要獲取的陣列型別:1:正序排序陣列;2:倒序排序陣列;)來進行排序,返回值為int陣

    python練習:編寫一個函數isIn接受兩個字符串作為如果一個字符串是另一個字符串的一部分返回True否則返回False。

    code pri 兩個 find int 字符 字符串 return 輸出 python練習:編寫一個函數isIn,接受兩個字符串作為參數,如果一個字符串是另一個字符串的一部分,返回True,否則返回False。 重難點:定義函數的方法。使用str類型的find()函數,可

    C++基礎知識(八)---函式返回返回返回指標返回物件返回引用)---引用---複製建構函式(拷貝建構函式)

    一、函式返回值   1.返回值: int test () { int a=1; return a; }   返回值時最簡單的方式,它的操作主要在棧上,變數a在函式結束後會刪除,為了返回a的值,系統會在內部建立一個臨時變數儲存a的值,以返回給呼叫該函式的表示式,呼叫結束後變數便