后端技術:mybatis中resultMap用法示例筆記


1、概念

resultMap屬于mybatis返回操作結果的一個標簽,可以用來映射select查詢出來結果的集合,主要作用是將實體類中的字段與數據庫表中的字段進行關聯映射。并且支持復雜的返回結果類型。

2、使用場景

2.1 屬性映射

當數據庫字段和項目中的實體屬性不一致時,可以使resultMap進行數據庫字段和實體類屬性的映射關系

比如:

     column="id" jdbcType="integer" property="id" />         column="user_name" jdbcType="VARCHAR" property="userName" />

說明:如果數據庫字段和實體類屬性一致的情況下,可以省略不寫。

2.2 實現Java復雜實體類用法

a.初始化腳本

DROP TABLE IF EXISTS `t_user`;CREATE TABLE `t_user` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `user_name` varchar(255) CHARACTER SET armscii8 DEFAULT NULL,  `password` varchar(255) CHARACTER SET armscii8 DEFAULT NULL,  `last_login_time` datetime DEFAULT NULL,  `sex` tinyint(4) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;-- ------------------------------ Records of t_user-- ----------------------------INSERT INTO `t_user` VALUES ('1', 'xiaoxin', '123', '2019-07-27 16:01:21', '1');INSERT INTO `t_user` VALUES ('2', 'jack jo', '123', '2019-07-24 16:01:37', '1');INSERT INTO `t_user` VALUES ('4', 'landengdeng', '123', '2019-07-24 16:01:37', '1');INSERT INTO `t_user` VALUES ('5', 'max', '123', '2019-07-24 16:01:37', '1');INSERT INTO `t_user` VALUES ('6', 'liua11', '123456', null, '1');INSERT INTO `t_user` VALUES ('7', 'xiaozhang', '888888', null, '1');DROP TABLE IF EXISTS `t_hobby`;CREATE TABLE `t_hobby` (  `id` int(11) NOT NULL,  `hobbyName` varchar(50) CHARACTER SET utf8 DEFAULT NULL,  `userId` int(11) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;-- ------------------------------ Records of t_hobby-- ----------------------------INSERT INTO `t_hobby` VALUES ('0', '音樂', '2');INSERT INTO `t_hobby` VALUES ('1', '籃球', '1');INSERT INTO `t_hobby` VALUES ('2', '讀書', '1');

b.定義實體類

定義實體 UserDO.java

public class UserDO {private Integer id;private String userName;private String password;private Integer sex;private Date lastLoginTime;public Integer getId() {return id;    }public void setId(Integer id) {this.id = id;    }public String getUserName() {return userName;    }public void setUserName(String userName) {this.userName = userName;    }public String getPassword() {return password;    }public void setPassword(String password) {this.password = password;    }public Integer getSex() {return sex;    }public void setSex(Integer sex) {this.sex = sex;    }public Date getLastLoginTime() {return lastLoginTime;    }public void setLastLoginTime(Date lastLoginTime) {this.lastLoginTime = lastLoginTime;    }@Override    public String toString() {return "UserDO{" +"id=" + id +", userName='" + userName + '\'' +", password='" + password + '\'' +", sex=" + sex +", lastLoginTime=" + lastLoginTime +'}';    }

定義實體類 HobbyDO.java

public class HobbyDO {private Integer id;private String hobbyName;private Integer userId;public Integer getId() {return id;    }public void setId(Integer id) {this.id = id;    }public String getHobbyName() {return hobbyName;    }public void setHobbyName(String hobbyName) {this.hobbyName = hobbyName;    }public Integer getUserId() {return userId;    }public void setUserId(Integer userId) {this.userId = userId;    }@Override    public String toString() {return "HobbyDO{" +"id=" + id +", hobbyName='" + hobbyName + '\'' +", userId=" + userId +'}';    }

c.定義model類

定義類 HobbyVO.java? 用來演示一對一

public class HobbyVo extends HobbyDO {private UserDO user ;public UserDO getUser() {return user;    }public void setUser(UserDO user) {this.user = user;    }}定義類 UserVO.java 用來演示1對多public class UserVO extends UserDO {private Listlist;public ListgetList() {return list;    }public void setList(Listlist) {this.list = list;    }}

d.定義mapper類文件

定義UserInfoMapper.java文件

package my.springboot.mybatis.dao;import java.util.List;import java.util.Map;import my.springboot.mybatis.entity.HobbyDO;import my.springboot.mybatis.entity.UserDO;import my.springboot.mybatis.model.UserVO;import org.apache.ibatis.annotations.Mapper;@Mapperpublic interface UserInfoMapper {    UserDO get(Integer id);    List getUserVOMap(Integer id);    List getHobbyByUserId(Integer userId);}

定義HobbyMapper.java文件

package my.springboot.mybatis.dao;import my.springboot.mybatis.entity.HobbyDO;import my.springboot.mybatis.entity.UserDO;import my.springboot.mybatis.model.HobbyVo;import org.apache.ibatis.annotations.Mapper;import java.util.List;import java.util.Map;@Mapperpublic interface HobbyMapper {    List getHobbyByUserId(Integer userId);    List getHobbyVOMap();}

e.定義service服務

定義IUserInfoService.java

package my.springboot.mybatis.service;import my.springboot.mybatis.entity.UserDO;import my.springboot.mybatis.model.HobbyVo;import my.springboot.mybatis.model.UserVO;import java.util.List;public interface IUserInfoService {     List getUserVOMap(Integer userId);    List getHobbyMap();}

定義UserInfoService.java

package my.springboot.mybatis.service.impl;import my.springboot.mybatis.dao.HobbyMapper;import my.springboot.mybatis.dao.UserInfoMapper;import my.springboot.mybatis.entity.UserDO;import my.springboot.mybatis.model.HobbyVo;import my.springboot.mybatis.model.UserVO;import my.springboot.mybatis.service.IUserInfoService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;@Servicepublic class UserInfoService implements IUserInfoService {@Autowired    private UserInfoMapper mapper;@Autowired    private HobbyMapper hobbyMapper;@Override    public  List getUserVOMap(Integer id)    {return this.mapper.getUserVOMap(id);    }@Override    public ListgetHobbyMap() {return hobbyMapper.getHobbyVOMap();    }}

f.定義測試控制器

HomeController.java

package my.springboot.mybatis.controller;import my.springboot.mybatis.entity.UserDO;import my.springboot.mybatis.model.HobbyVo;import my.springboot.mybatis.model.UserVO;import my.springboot.mybatis.service.IUserInfoService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.ResponseBody;import javax.jws.soap.SOAPBinding;import java.util.Date;import java.util.List;@Controllerpublic class HomeController {@Autowired    private IUserInfoService userInfoService;@RequestMapping("index") //注解映射請求路徑    @ResponseBody //可以將java對象轉為json格式的數據    public String index()    {        List vo=userInfoService.getUserVOMap(1);        List list=userInfoService.getHobbyMap();        return "Hello World !";    }}

g.定義xml文件

定義HobbyMapper.xml文件

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="my.springboot.mybatis.dao.HobbyMapper"><select id="getHobbyByUserId" resultType="my.springboot.mybatis.entity.HobbyDO" parameterType="integer">       select  * from t_hobby where userId= #{id}</select><resultMap id="hobbyVOMap" type="my.springboot.mybatis.model.HobbyVo"><id property="id" column="id"/><association property="user" column="userId" javaType="my.springboot.mybatis.entity.HobbyDO"                     select="my.springboot.mybatis.dao.UserInfoMapper.get"></association></resultMap><select id="getHobbyVOMap" resultMap="hobbyVOMap" parameterType="integer">       select  * from t_hobby</select></mapper>

定義UserInfoMapper.xml

?

<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="my.springboot.mybatis.dao.UserInfoMapper"><select id="get" resultType="my.springboot.mybatis.entity.UserDO">   select `id`,`user_name`,`password`,`last_login_time`,`sex` from t_user where id = #{value}</select><!--跨xml文件寫法 my.springboot.mybatis.dao.HobbyMapper.getHobbyByUserId-->    <resultMap id="userVOMap" type="my.springboot.mybatis.model.UserVO"><id property="id" column="id"/><collection property="list" column="id" ofType="my.springboot.mybatis.entity.HobbyDO" select="my.springboot.mybatis.dao.HobbyMapper.getHobbyByUserId"></collection></resultMap><select id="getUserVOMap" resultMap="userVOMap" parameterType="integer">       select  * from t_user</select><select id="getHobbyByUserId" resultType="my.springboot.mybatis.entity.HobbyDO" parameterType="integer">       select  * from t_hobby where userId= #{id}</select>
</mapper>

訪問地址:http://localhost:8090/index

項目結構:

3、總結

resultMap用途主要有一下兩點:

1、數據庫字段和Java類屬性映射

2、實現復雜的model類的查詢

model中包含實體類使用關鍵字:association

<select id="getHobbyByUserId" resultType="my.springboot.mybatis.entity.HobbyDO" parameterType="integer">select  * from t_hobby where userId= #{id}
</select>
<resultMap id="hobbyVOMap" type="my.springboot.mybatis.model.HobbyVo">
<id property="id" column="id"/>
<association property="user" column="userId" javaType="my.springboot.mybatis.entity.HobbyDO"select="my.springboot.mybatis.dao.UserInfoMapper.get">
<!-- 說明:如果調用的方法不在當前xml里面,需要指明完整的mapper路徑 my.springboot.mybatis.dao.UserInfoMapper.get -->           </association>
</resultMap>
<select id="getHobbyVOMap" resultMap="hobbyVOMap" parameterType="integer">select  * from t_hobby
</select>

model中包含集合使用:collection 關鍵代碼

<resultMap id="userVOMap" type="my.springboot.mybatis.model.UserVO">
<id property="id" column="id"/>
<collection property="list" column="id" ofType="my.springboot.mybatis.entity.HobbyDO" select="my.springboot.mybatis.dao.HobbyMapper.getHobbyByUserId">
</collection>
</resultMap>
<select id="getUserVOMap" resultMap="userVOMap" parameterType="integer">select  * from t_user
</select>
<select id="getHobbyByUserId" resultType="my.springboot.mybatis.entity.HobbyDO" parameterType="integer">select  * from t_hobby where userId= #{id}
</select>

注意:實際的查詢過程當中,并不是必須要保證數據庫字段名稱和實體的屬性名稱保持一致,如果查詢語句查詢字段指定別名,也是可以正常做映射的,要會靈活使用。

IT技術分享社區

個人博客網站:https://programmerblog.xyz

文章推薦程序員效率:畫流程圖常用的工具程序員效率:整理常用的在線筆記軟件遠程辦公:常用的遠程協助軟件,你都知道嗎?51單片機程序下載、ISP及串口基礎知識硬件:斷路器、接觸器、繼電器基礎知識

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

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

相關文章

將mysql服務移除_怎么將mysql服務移除?

將mysql服務移除的方法&#xff1a;1、進入“控制面板->程序->卸載或更改程序”&#xff0c;刪除mysql程序&#xff1b;2、刪除MySQL文件夾下的【my.ini】文件&#xff0c;如果備份好&#xff0c;可以直接將文件夾全部刪除 &#xff1b;3、進入注冊表&#xff0c;將相關M…

程序人生:程序員的9個層次,你屬于哪個層次

目錄 第一級&#xff1a;糟糕的程序員 第二級&#xff1a;菜鳥級程序員 第三級&#xff1a;碼農 第四級&#xff1a;普通程序員 第五級&#xff1a;中級程序員 第六級&#xff1a;骨干程序員 第八級&#xff1a;著名程序員 第九級&#xff1a;祖師爺級別 . 第一級&#xff1a;糟…

lsof -i:port 的作用

lsof&#xff08;list open files&#xff09;是一個列出當前系統打開文件的工具。在linux環境下&#xff0c;任何事物都以文件的形式存在&#xff0c;通過文件不僅僅可以訪問常規數據&#xff0c;還可以訪問網絡連接和硬件。如TC和UDP等&#xff0c;系統在后臺都為該應用程序分…

SpringBoot定時任務實現的兩種方式介紹

今天給大家介紹SpringBoot定時任務實現的幾種方式&#xff0c;希望對大家能有所幫助&#xff01;1、SpringTask 用法框架介紹&#xff1a;SpringTask是Spring自帶的輕量級定時任務工具&#xff0c;相比于Quartz使用更加簡單方便&#xff0c;并且不需要不需要引入其他依賴即可使…

mvc調用mysql存儲過程_使用.NET MVC +EF調用oracle的存儲過程

題記&#xff1a;需求如題&#xff0c;在網上搜索了一下&#xff0c;沒有特別貼合我需求的資料&#xff0c;只好自己摸索&#xff0c;東拼西湊了解了一點東西慢慢嘗試做了出來。難點&#xff1a;.NET是微軟產品&#xff0c;主要支持Sql Server數據庫&#xff0c;對于Oracle的數…

Oracle12c:安裝后新建用戶及其默認表空間,并創建表測試

環境&#xff1a;操作系統&#xff1a;Windows Server2008 R2 X64 Oracle版本&#xff1a;12c 如何安裝&#xff1f; -- oracle 12c在oracle linux 6.6 x64上的安裝 -- Windows x64位下完美安裝winx64_oracle_12c_database 如何使用DataBase Cofiguration Assistant 創建數據庫…

數據庫:Redis相關知識梳理

1、數據類型string&#xff08;字符串&#xff09;&#xff1a;最基本的k-v存儲 &#xff0c;適合驗證碼、配置信息等list&#xff08;列表&#xff09;&#xff1a;適合有序/固定的列表。比如行政區、字典表、消息隊列等。set&#xff08;集合&#xff09;&#xff1a;支持交集…

python線性回歸分析看相關性_機器學習入門-相關分析之簡單線性回歸

一.什么是機器學習&#xff1f;簡單來說&#xff0c;機器學習是一類算法的總稱&#xff0c;這些算法企圖從大量歷史數據中挖掘出其中隱含的規律&#xff0c;并用于預測或者分類&#xff0c;更具體的說&#xff0c;機器學習可以看作是尋找一個函數&#xff0c;輸入是樣本數據&am…

Android Listview 性能優化

首先我一般使用的適配器是BaseAdapter,其中有兩個方法最主要,分別是: getCount,getView,在對Listview 進行優化的時候,首先使用 convertview 和viewHolder 配合進行優化,使用convertview的母的是控件復用,從而加到減少內存的使用,使用viewHolder 的是減少findbyid 的次數.但是在…

前端:JS實現數組去重常用的六種方法介紹

今天給大家分享JS實現數組去重常用的六種方法&#xff0c;希望對大家能有所幫助&#xff01;定義變量let arr [20,6,13,20,100,8,13,11]; let newArr [];1、兩層循環去重 for(let i 0;i < arr.length;i){for(let j i 1;j < arr.length;j){if(arr[i] arr[j]){arr.sp…

python自定義colorbar_python可視化 matplotlib畫圖使用colorbar工具自定義顏色

python matplotlib畫圖使用colorbar工具自定義顏色 colorbar(draw colorbar without any mapple/plot)自定義colorbar可以畫出任何自己想要的colorbar&#xff0c;自由自在、不受約束&#xff0c;不依賴于任何已有的圖(plot/mappable)。這里使用的是mpl.colorbar.ColorbarBase類…

不能讀取文件“itunes.library.itl”因為它是由更高級別的itunes所創建的

轉自&#xff1a;https://zhidao.baidu.com/question/80796363.html 是因為你安裝過高版本的后又裝你版本的itunes. 你在電腦上搜索所有硬盤上的itunes library.itl這個文件.搜到就刪了&#xff0c;而且搜索里選擇“高級選項”除了區分大小寫其它幾個都鉤上。這樣注消下&#x…

路由器:什么是軟路由,看完本篇文章你就懂了

今天小編給大家介紹一下軟路由具體是什么&#xff0c;有什么實際用途&#xff0c;看完本篇你就懂了&#xff01; 一、軟路由與硬路由概念介紹 硬路由&#xff1a;目前我們家里普遍使用的路由器&#xff0c;有廠家提供整體的解決方案&#xff0c;包括處理器、電源供應、嵌入式軟…

c#form+mysql儲存讀取圖片_C#從SQL server數據庫中讀取l圖片和存入圖片

本實例主要介紹如何將圖片存入數據庫。將圖片存入數據庫,首先要在數據庫中建立一張表,將存儲圖片的字段類型設為Image類型,用FileStream類、BinaryReader把圖片讀成字節的形式,賦給一個字節數組,然后用ADO.SqlCommand對象的ExecuteNonQuery()方法來把數據保存到數據庫中。主要代…

if...else..的錯誤用法

1.最近在寫js代碼完成一個前段DOM操作的函數時&#xff0c;自己錯誤的使用了if..else..控制體。為什么是錯誤的呢&#xff1f;看看我的 代碼你就明白了&#xff1a; 1 document.getElementsByClassName(eButton)[0].οnclickfunction(){2 var checkeddocument.getElementsB…

Git服務器報錯:host key for (ip地址) has changed and you have requested strict checking

一:報錯提示 如下&#xff1a; WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! It is also possible that a host key …

軟件:常用 Linux 軟件匯總,值得收藏

目錄 1、音頻軟件 2、聊天軟件 3、數據備份與恢復 4、桌面個性化工具 5、開發必備 6、 電子書工具 7、 編輯器軟件 8、教育軟件 9、電子郵件軟件 10、文件管理器 11、娛樂游戲 12、 圖形工具 13、互聯網瀏覽 14、 辦公效率工具 15、 生產力效率工具 16、 安全防護 17、文件共享…

java上下文即ServletContext

上下文即ServletContext,是一個全du局的儲存信zhi息的空間&#xff0c;服務器啟動&#xff0c;其就dao存zhuan在&#xff0c;服務器關閉&#xff0c;其才釋放。 所有用戶共用一個ServletContext。所以&#xff0c;為了節省空間&#xff0c;提高效率&#xff0c;ServletContext中…

數據幀,數據包,報文段,報文,分組,數據包的概念和區別

應用層——消息傳輸層——數據段(segment)網絡層——分組、數據包&#xff08;packet&#xff09;鏈路層——幀&#xff08;frame&#xff09;物理層——P-PDU&#xff08;bit&#xff09;分組、包&#xff0c;packet&#xff0c;信息在互聯網當中傳輸的單元&#xff0c;網絡層…