mybatis通用mapper_全網最全Mapper解析,附實操代碼幫你更好理解

今天給大家介紹一位老朋友

當你第一次接觸Java開發的時候,這個老朋友就和你形影不離,當你要進行ORM的時候,單表的增刪改查,這位老朋友給了你極大的幫助,不知道你想到他了嗎?對,這就是通用mapper,這也是對于這位老朋友最簡單的介紹

如果你是新來做客的程序猿,我給你詳細的介紹一下它;你要是老牌程序員,我們來重新認識一下

代碼結構

8c9c887ce0a0819ab4ec2f5f9bef9803.png

庫表

ec6fbfa68df393c8ce9d5e396e1100c6.png

配置文件

在applicationContext會話工廠里配置通用mapper插件。

<!--配置SqlSessionFactory,通過Spring來管理會話工廠--><bean id="SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><!--配置數據源:因為要使用SqlSession操作數據庫--><property name="dataSource" ref="dataSource"></property><!--加載mybatis的全局配置文件--><!--<property name="configLocation" value="classpath:mybatis.xml"></property>--><!--Spring起別名--><property name="typeAliasesPackage" value="com.me.pojo"></property><!-- 通用mapper插件的配置 --><property name="plugins"><array><!--pagehelper分頁配置。 --><bean class="com.github.pagehelper.PageInterceptor"><property name="properties"><value>helperDialect=mysqloffsetAsPageNum=true<!-- 防止出現小于第一頁,大于最后一頁的異常情況出現。 -->reasonable=true</value></property></bean><bean class="com.github.abel533.mapperhelper.MapperInterceptor"><property name="properties"><value><!-- 主鍵自增回寫方法,默認值MYSQL -->IDENTITY=MYSQLmappers=com.github.abel533.mapper.Mapper</value></property></bean></array></property></bean>

UserInfoMapper.java

不用配置pojo類的接口,mapper文件也極大簡化了。只需繼承Mapper(applicationContext.xml里配置的)就可以。Mapper里封裝了很多對單表操作的方法。

import com.github.abel533.mapper.Mapper;
import com.me.pojo.UserInfo;public interface UserInfoMapper extends Mapper<UserInfo> {}

UserInfoServiceImpl.java

@Service
public class UserInfoServiceImpl implements UserInfoService {@Autowiredprivate UserInfoMapper userInfoMapper;@Overridepublic List<UserInfo> select(UserInfo userInfo) {return userInfoMapper.select(userInfo);}
}

測試類

@Autowiredprivate UserInfoService userInfoService;@Testpublic void test(){UserInfo user=new UserInfo();user.setSex("男");List<UserInfo> userInfos=userInfoService.select(user);System.err.println(userInfos.toString());}

但是,這一些是Mapper的基礎操作,在Mapper中,有一個很重要的概念,動態代理實現,這里也給大家展示一下

優點

開發者只需聲明mapper接口(也就是dao接口),無需聲明接口的實現類,而由mybatis框架創建接口的代理對象,就和實現類類似。

規范

  • 映射文件mapper.xml和接口名稱一致
  • 映射文件的namespace是接口的全路徑
  • 映射文件的sql statement的id是接口的方法名稱
  • 映射文件的輸入參數類型和接口方法的參數類型一致
  • 映射文件的輸出結果類型和接口方法的返回類型一致

mybatis.xml加載映射文件

<mappers><!--<mapper resource="UsersMapper.xml"></mapper>--><!--批量加載映射文件--><package name="com.me.mapper"/></mappers>

接口:UsersMapper.class

import com.me.pojo.Users;public interface UsersMapper {public Users selectById(int id);
}

mapper文件:UsersMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.me.mapper.UsersMapper"><select id="selectById" parameterType="int" resultType="Users">select * from users where id=#{id}</select>
</mapper>

測試類:MapperTest

import com.me.mapper.UsersMapper;
import com.me.pojo.Users;
import com.me.utils.MybatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;public class MapperTest {@Testpublic void test(){SqlSession sqlSession=MybatisUtils.getSqlSessionFactory().openSession();UsersMapper usersMapper=sqlSession.getMapper(UsersMapper.class);Users user =usersMapper.selectById(1);sqlSession.close();}
}

根據map查詢

參數是hashmap。

接口

public List<Users> selectByMap(Map<String,Object> map);

mapper

  • 注意接收的第二個參數,如果寫成’%#{addr}%‘無法獲取;如果寫成’${value}%'也無法獲取,因為不是簡單類型。
  • “#{?}”中要和傳遞過來map的key一致。
<select id="selectByMap" parameterType="map" resultType="Users">select * from users where sex=#{sex} and address like '${addr}%'
</select>

測試類

Map<String,Object> map=new HashMap<String,Object>();
map.put("sex","男");
map.put("addr","北");
List<Users> usersList=usersMapper.selectByMap(map);

傳遞多參數

傳遞多參數有兩種方式。

  • 方法一

接口

@Param()就相當于將參數封裝到map中去

public List<Users> selectByParams(@Param("sex") String sex, @Param("addr") String addr);

mapper

傳遞多參數時無需配置參數類型

<select id="selectByParams" resultType="Users">select * from users where sex=#{sex} and address like '${addr}%'
</select>

測試類

List<Users> usersList=usersMapper.selectByParams("男","北");
  • 方法二

接口

public List<Users> selectByParams2( String sex, String addr);

mapper

第二個參數如果寫成’%${1}%'無法獲取。

<select id="selectByParams2" resultType="Users">select * from users where sex=#{0} and address like #{1}
</select>

測試類

List<Users> usersList=usersMapper.selectByParams2("男","%濟%");

好啦,這位老朋友就已經介紹給你認識了,不知道他能不能成為你的好朋友

一個腦回路清奇的程序猿,總是有一些神奇的想法,分享技術經驗給大家,一起學習進步

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370496.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370496.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370496.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

初嘗微信小程序2-基本框架

基本框架&#xff1a; .wxml &#xff1a;頁面骨架 .wxss &#xff1a;頁面樣式 .js &#xff1a;頁面邏輯 描述一些行為 .json &#xff1a;頁面配置 創建一個小程序之后&#xff0c;app.js,app.json,app.wxss是必須的&#xff0c;而且名字也不能隨意更改&#xff0c;…

JSP內置對象,動作,指令總結

總的來說關于JSP界面有九大內置對象,7大動作,三大指令,現在博主就將這些粘貼出來,此文是很久前整理的學習筆記,如有雷同請諒解! jsp九大內置對象:1>out 向客戶端輸出數據,字節流.如out.print(" dgaweyr"); 2>request 接收客戶端的http請求.String getParameter…

洛谷 P1795 無窮的序列_NOI導刊2010提高(05)

P1795 無窮的序列_NOI導刊2010提高&#xff08;05&#xff09; 題目描述 有一個無窮序列如下&#xff1a; 110100100010000100000… 請你找出這個無窮序列中指定位置上的數字 輸入輸出格式 輸入格式&#xff1a;第一行一個正整數N&#xff0c;表示詢問次數&#xff1b; 接下來的…

java 取字符串中的數字_java截取字符串中的數字

隨便給你一個含有數字的字符串&#xff0c;比如&#xff1a;String s"eert343dfg56756dtry66fggg89dfgf";那我們如何把其中的數字提取出來呢&#xff1f;大致有以下幾種方法&#xff0c;正則表達式&#xff0c;集合類&#xff0c;還有就是String類提供的方法。1 Stri…

番石榴的對象類:Equals,HashCode和ToString

如果您有幸使用JDK 7 &#xff0c;那么新的可用Objects類 &#xff08; 至少對我來說 &#xff09;是實現“通用” Java對象方法&#xff08;例如equals&#xff08;Object&#xff09; [with Objects.equals&#xff08;Object&#xff0c;Object &#xff09; ]&#xff0c; …

此服務器的時鐘與主域控制器的時鐘不一致_中移動“超高精度時間同步服務器”開標,兩家中標...

8月25日&#xff0c;中國移動發布《2020年至2022年同步網設備集中采購_中標候選人公示》公告。兩家中標。同步網技術比較小眾&#xff0c;但是同步網是5G承載網的重要一環&#xff0c;分享一下&#xff0c;供大家參考。中標情況 標包1-時鐘同步設備中標候選人依次排序為&#x…

java 異常管理員_GitHub - kangZan/JCatch: Exception異常管理平臺,支持Java、PHP、Python等多種語言...

什么是JCatch當程序發生異常(Exception)&#xff0c;處理方式一般是通過日志文件記錄下來&#xff0c;這種方式很容易被忽略&#xff0c;而且查詢起來比較麻煩。JCatch提供了一種方案&#xff0c;當程序發生異常時&#xff0c;通過JCatch平臺接口提交到JCatch平臺&#xff0c;由…

oled

gnd、vcc、clk、miso、rst、mosi、cs 轉載于:https://www.cnblogs.com/scrazy/p/7892733.html

使用html css js實現計算器

使用html css js實現計算器&#xff0c;開啟你的計算之旅吧 效果圖&#xff1a; 代碼如下&#xff0c;復制即可使用&#xff1a; <!DOCTYPE html><html lang"en"> <head> <meta charset"utf-8"> <style> /* 主體 */ .co…

面向對象的三個基本特征

面向對象的三個基本特征是&#xff1a;封裝、繼承、多態。封裝 封裝最好理解了。封裝是面向對象的特征之一&#xff0c;是對象和類概念的主要特性。封裝&#xff0c;也就是把客觀事物封裝成抽象的類&#xff0c;并且類可以把自己的數據和方法只讓可信的類或者對象操作&#xff…

Spring構造函數注入和參數名稱

在運行時&#xff0c;除非在啟用了調試選項的情況下編譯類&#xff0c;否則Java類不會保留構造函數或方法參數的名稱。 這對于Spring構造函數注入有一些有趣的含義。 考慮以下簡單的類 package dbg; public class Person {private final String first;private final String …

java學習文檔_資深程序員帶你深入了解JAVA知識點,實戰篇,PDF文檔

JAVA 集合JAVA 集合面對浩瀚的網絡學習資源&#xff0c;您是否為很難找到適合自己的學習資源而感到苦惱過&#xff1f;那么&#xff0c;您來對地方了。在這里我們幫助大家整理了一份適于輕松學習 Java 文章的清單。JVM文字太多&#xff0c;不便之處敬請諒解JAVA 集合文字太多&a…

java程序員電影_Java程序員必看電影:Java 4-ever

(Scene: A father and his son playing "throw-and-catch")(場景: 一位父親和兒子玩丟接球游戲)Narrator: They appear to be a perfect family旁白: 他們看起來像是一個完美的家庭(Scene: bedtime story)(場景: 床邊故事)Father: Export all OLE objects with the c…

深入理解softmax函數

Softmax回歸模型&#xff0c;該模型是logistic回歸模型在多分類問題上的推廣&#xff0c;在多分類問題中&#xff0c;類標簽 可以取兩個以上的值。Softmax模型可以用來給不同的對象分配概率。即使在之后&#xff0c;我們訓練更加精細的模型時&#xff0c;最后一步也需要用soft…

《第二章:深入了解超文本》

從本章開始要去除無用的話&#xff0c;只在筆記中記載要點----- 使用<a>元素創建一個超文本鏈接&#xff0c;鏈接到另一個Web頁面。 <a>元素的內容會成為Web頁面中可單擊的文本。 href屬性告訴瀏覽器鏈接的目標文件。 了解屬性 例&#xff1a;style的type屬性指定…

strcpy函數_錯誤更正(拷貝賦值函數的正確使用姿勢)

這是一篇對什么是C的The Rule of Three的錯誤更正和詳細說明。閱讀時間7分鐘。難度???雖然上一篇文章的閱讀量只有凄慘的兩位數&#xff0c;但是懷著對小伙伴負責的目的&#xff0c;必須保證代碼的正確性。這是大廚做技術自媒體的態度。前文最后一段代碼是這樣的&#xff1a…

將Java應用程序打包為一個(或胖)JAR

這篇文章的目標是一個有趣但非常強大的概念&#xff1a;將應用程序打包為單個可運行的JAR文件&#xff0c;也稱為一個或胖 JAR文件。 我們習慣了大型WAR歸檔文件&#xff0c;其中包含所有打包在某些公用文件夾結構下的依賴項。 使用類似于JAR的打包&#xff0c;情況有所不同&a…

學習java的第三天,猜字符的小程序

關于猜字符的小程序 主要實現&#xff1a;隨機輸出5個字母&#xff0c;用戶輸入猜測的字母&#xff0c;進行對比得出結果 主要有3個方法&#xff1a;主方法main(); 產生隨機字符的方法generate(); 比較用戶輸入的字符與隨機產生的字符的方法check&#xff08;&#xff09;&…

《Linux命令行與shell腳本編程大全 第3版》創建實用的腳本---10

以下為閱讀《Linux命令行與shell腳本編程大全 第3版》的讀書筆記&#xff0c;為了方便記錄&#xff0c;特地與書的內容保持同步&#xff0c;特意做成一節一次隨筆&#xff0c;特記錄如下&#xff1a;轉載于:https://www.cnblogs.com/guochaoxxl/p/7894995.html

python安裝包找不到setup_如何安裝沒有setup.py的Python模塊?

在系統上開始使用該代碼的最簡單的方法是&#xff1a;>將文件放入機器上的目錄中,>將該目錄的路徑添加到您的PYTHONPATH步驟2可以從Python REPL完成如下&#xff1a;import syssys.path.append("/home/username/google_search")您的文件系統的外觀示例&#xf…