1. 程式人生 > >MyBatis關於Mapper配置檔案知識集合

MyBatis關於Mapper配置檔案知識集合

(1)MyBatis多引數傳遞之預設命名方式

      對於對映器中的方法,MyBatis預設從左到右給方法的引數命名為param1、param2…,依次類推。我們可以無需藉助註解,直接在SQL語句中使用這些預設名稱。

package com.abc.mapper;
import com.abc.domain.Teacher;
import org.springframework.stereotype.Component;
import java.util.List;
//@Component指定對映器名稱為myTeacherMapper
//相關內容,可參考筆者部落格:
//http://legend2011.blog.51cto.com/3018495/980150
@Component("myTeacherMapper")
public interface TeacherMapper {
public Teacher getById(int id);
//分頁查詢教師資訊
public List<Teacher> findTeacherByPage(
String sort,//排序欄位
String dir,  //排序方向
int start, //起始記錄
int limit  //記錄條數
);
}

       按照上述的預設命名方式,MyBatis對findTeacherByPage方法的引數從左到右的預設命名依次是:sort為param1,dir為param2,start為param3,limit為param4。然後,就可以在對映檔案TeacherMapper.xml裡的、與此方法相對應的SQL語句中以#{引數名}的方式來使用這些名稱了。如下第25行所示:

<?xml version="1.0" encoding="utf8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--與以前一樣,namespace的值是對應的對映器介面的完整名稱-->
<mapper namespace="com.abc.mapper.TeacherMapper">
<!--教師實體對映-->
<resultMap id="supervisorResultMap" type="Teacher">
<id property="id"/>
<result property="name"/>
<result property="gender"/>
<result property="researchArea"column="research_area"/>
<result property="title"/>
<!--collection元素對映教師的指導學生集合的屬性。這裡採用了
“名稱空間名.select語句id”的形式來引用StudentMapper.xml中的
select語句getStudents。關於這種collection元素使用巢狀的
select語句的詳情,請參考筆者部落格:
http://legend2011.blog.51cto.com/3018495/985907
-->
<collection property="supStudents" column="id" ofType="Student"
select="com.abc.mapper.StudentMapper.getStudents"/>
</resultMap>
<!--param1、param2等是MyBatis對對映器方法引數的預設命名-->
<select id="findTeacherByPage" resultMap="supervisorResultMap">
select * from teacher
order by ${param1} ${param2} limit #{param3},#{param4}
</select>
</mapper>


      和利用註解的方式一樣,在order by子句中使用#{引數名}的方式無效,讀者可自行實驗。所以,這裡仍然使用${引數名}的方式。

(2)MyBatis多引數傳遞之Map方式

前面的文章介紹了MyBatis多引數傳遞的註解、引數預設命名等方式,今天介紹Map的方式。仍然以前面的分頁查詢教師資訊的方法findTeacherByPage為例(示例原始碼下載地址:http://down.51cto.com/data/546809)。

      首先修改對映器介面TeacherMapper中的findTeacherByPage方法如下:

1 2 //分頁查詢教師資訊 public List<Teacher> findTeacherByPage(Map<String, Object> map);

      相應地,這裡用到了Map介面,就應該引入此介面:import java.util.Map。

在執行類CollectionDemo中,呼叫findTeacherByPage方法的相關程式碼如下:

Map<String, Object> params = new HashMap<String, Object>();
//以name欄位升序排序,
params.put("sort", "name");
params.put("dir", "asc");
//查詢結果從第0條開始,查詢2條記錄
params.put("start", 0);
params.put("limit", 2);
//查詢職稱為教授或副教授的教師
params.put("title", "%教授");
//分頁查詢教師資訊
List<Teacher> teachers = mapper.findTeacherByPage(params);


      可以看出,我們先把引數放在了一個Map中,這樣我們就可以在相應的SQL語句中以#{…}的形式引用這些引數了。如下所示:

<select id="findTeacherByPage" resultMap="supervisorResultMap"
parameterType="java.util.Map">
select * from teacher where title like #{title}
order by ${sort} ${dir} limit #{start},#{limit}
</select>


       與以前一樣,在order by子句中應使用${…}的方式。實際上,這裡的parameterType="java.util.Map"可以不要。

(3)MyBatis多引數傳遞之混合方式

網友mashiguang提問如下的方法如何傳遞引數:public List findStudents(Map conditions, int page, int pageSize)。這是一種混合形式,亦即既有Map型別的引數,也有類似int這種普通型別的引數。經過一番摸索,筆者還比較順利地找到了這種情況的處理方法。

      其實也很簡單。在預設命名方式(MyBatis多引數傳遞之預設命名方式示例)一文中,介紹了MyBatis對引數的預設命名,這種命名在這種情況下依然有效。我們需要做的,就是如何根據這個命名讀出Map中的引數值。這裡就採用這種方式來實現教師分頁查詢。先修改對映器介面(TeacherMapper.java)中的教師分頁查詢方法的宣告如下(完整原始碼下載:http://down.51cto.com/data/742758): 

//分頁查詢教師資訊
public List<Teacher> findTeacherByPage(
Map params, //查詢條件
int start, //起始記錄
int limit  //記錄條數
);


 (程式碼1)

      那麼MyBatis將會對此方法的三個引數依次命名為param1、param2和param3,其中第一個引數為Map型別,後兩個引數為int型別。

      執行類(CollectionDemo.java)中的查詢程式碼片段如下: 

Map<String, Object> params =
new HashMap<String, Object>();
//以name欄位升序排序,
params.put("sort", "name");
params.put("dir", "asc");
//查詢職稱為教授或副教授的教師
params.put("title", "%教授");
//查詢教師分頁資訊
List<Teacher> teachers =
//以name欄位升序排序,從第0條記錄開始查詢。
//查詢2條記錄
mapper.findTeacherByPage(params,0, 2);


  (程式碼2)

      相應的對映配置(TeacherMapper.xml)檔案片段如下: 

<selectid="findTeacherByPage"resultMap="supervisorResultMap">
select * from teacher where teacher.title like
#{param1.title} order by ${param1.sort} ${param1.dir} limit #{param2},#{param3}
</select>


 (程式碼3)

      在以上的對映檔案中,使用#{param1.title}的形式就能訪問Map中title屬性的值。當然,在order by子句中應使用${param1.sort}的形式(可參見本系列博文中的“MyBatis多引數傳遞之註解方式示例”一文,第二部分“可能會遇到的錯誤”第一個就是關於order by的。不過經筆者驗證,在本例中使用“#”也是可以的)。由此我們可以總結出,我們使用#{引數預設命名.屬性名}的形式,就可以在對映檔案訪問Map引數的屬性值。


相關推薦

MyBatis關於Mapper配置檔案知識集合

(1)MyBatis多引數傳遞之預設命名方式      對於對映器中的方法,MyBatis預設從左到右給方法的引數命名為param1、param2…,依次類推。我們可以無需藉助註解,直接在SQL語句中使用這些預設名稱。 package com.abc.mapper; i

Redis安裝與配置檔案和啟動方式以及基本知識

下載解壓到自己喜歡的目錄後進入到redis資料夾編譯安裝: 安裝後進入到src目錄看到: redis-server  ------------>啟動redis伺服器 redis-cli-------------------->Redis命令客戶端 redi

mybatis的配置檔案中使用兩個或多個foreach進行多個集合遍歷的問題

<select id="selectTrafficEventIngByType" resultMap="BaseResultMap"> select <include refid="Base_Column_List"/> f

$Django importlib與dir知識,手寫配置檔案, 配置查詢順序 drf分頁器&drf版本控制

1  importlib與dir知識 # importlib簡介動態匯入字串模組 # 常規匯入 from ss.aa import b from ss import a print(b,type(b)) #<module 'ss.aa.b' from 'F:\\python3

分享知識-快樂自己:微服務配置檔案 (整合)

單機版 dubbo 配置: 釋出服務:   <!-- 釋出dubbo服務 --> <!-- 提供方應用資訊,用於計算依賴關係 名稱可以自擬 --> <dubbo:application name="taotao_manager" />

Spring中使用Map、Set、List、陣列、屬性集合的注入方法配置檔案

(1)下邊的一個java類包含了所有Map、Set、List、陣列、屬性集合等這些容器,主要用於演示Spring的注入配置; package com.lc.collection; import java.util.List; import java.util.Map;

在springboot2.0的配置檔案yml自定義陣列或List集合

#### 自定義List集合,首先在application.yml檔案中配置 custom: mail[0]: username: [email protected] password: axxx mail[1]: username: xx

Spring裝配各種集合型別的配置檔案

1、 list集合 <bean id="userService" class="com.spring.service.UserService"> <property name="l

Spring Boot 基礎知識學習(二)——配置檔案多環境配置

     SpringBoot 基礎知識學習(二)——配置檔案多環境配置           通過上一篇《Spring Boot 基礎知識學習(一)——快速入門》我們知道SpringBoot使用預設配

一分鐘掌握Linux系統grub.conf配置核心知識

Linux grub grub.con 老男孩IT教育 引導加載程序(Boot loader)是在計算機在加載操作系統內核之前運行的一段小程序。通過這段小程序,可以初始化硬件設備、建立內存空間的映射圖,從而將系統的軟硬件環境加載到一個適合的狀態,以便為最終調用操作系統內核做好準備。通常,引導

python基礎知識 - 集合與random

() 刪除 sam rand 浮點數 orm shuff 處理 列表 集合 集合是一種數據類型,一個類似列表的東西,特點是無序的,不重復的。 集合的作用: 可以把一個列表中的重復數據去除 定義集合: lowerLetterSet = set(string.ascii_lo

三大框架(ssh)學習——配置檔案詳解(一)

配置檔案詳解 指定web應用預設字符集 <constant name="struts.i18n.encoding" value="gbk" /> 此配置相當於: request.setCharacterEncoding(“gbk”); r

三大框架(ssh)學習——配置檔案詳解(二)

多配置檔案實現 專案經常需要多人協作開發,但是如果大家都是用同一個struts.xml檔案,會互相影響不利於開發的正常開展。這樣,我們可以通過<include>元素指定多個配置檔案。 可以在src下面建立多個struts配置檔案。然後再struts.xml中分別引入: str

nginx、thinkphp3.2、linux配置檔案配置

nginx.conf配置檔案:     server {         listen 9001;         server_name 127

iOS使用 xcconfig配置檔案的若干坑

有一些文章介紹.xconfig檔案的使用,如這篇,但是經過親自實踐,發現還是有一些坑,這裡記錄下。 構建新的configuration 這一步在“project-info-configuration”位置進行,點選“+”構建“-”消除,沒什麼問題,這個很簡單也不會出錯。 只是原來使用xc

DVA知識集合

react與dva 原文地址:https://github.com/dvajs/dva-knowledgemap 1.變數宣告 const DELAY = 1000 let count = 0 count = count + 1 2. 模板字串 con

第二十篇-如何寫配置檔案

配置檔案不同的格式所用不同函式,可能可以優化 WriteData.java package com.example.aimee.logtest; import android.os.Build; import android.support.annotation.RequiresA

[Golang] 從零開始寫Socket Server(4):將執行引數放入配置檔案(XML/YAML)

    為了將我們寫好的Server釋出到伺服器上,就要將我們的程式碼進行build打包,這樣如果以後想要修改一些程式碼的話,需要重新給程式碼進行編譯打包並上傳到伺服器上。     顯然,這麼做過於繁瑣。。。因此常見的做法都是將Server執行中

mongodb配置檔案.conf

轉自:https://www.cnblogs.com/xuange306/p/6074078.html 配置檔案在  /etc/mongod.conf檔案裡 啟動方式 ./bin/mongod -f MongoDB.conf  會看到  abo

天天生鮮(二) 配置檔案

1.  __init__.py import pymysql pymysql.install_as_MySQLdb() """ Django settings for ttxs project. Generated by 'django-admin startp