后端技术: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.mzph.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;糟…

SpringBoot定时任务实现的两种方式介绍

今天给大家介绍SpringBoot定时任务实现的几种方式&#xff0c;希望对大家能有所帮助&#xff01;1、SpringTask 用法框架介绍&#xff1a;SpringTask是Spring自带的轻量级定时任务工具&#xff0c;相比于Quartz使用更加简单方便&#xff0c;并且不需要不需要引入其他依赖即可使…

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…

前端: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类…

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

今天小编给大家介绍一下软路由具体是什么&#xff0c;有什么实际用途&#xff0c;看完本篇你就懂了&#xff01; 一、软路由与硬路由概念介绍 硬路由&#xff1a;目前我们家里普遍使用的路由器&#xff0c;有厂家提供整体的解决方案&#xff0c;包括处理器、电源供应、嵌入式软…

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、文件共享…

SpringBoot集成Redis用法笔记

今天给大家整理一下SpringBoot集成Redis用法笔记&#xff0c;希望对大家能有所帮助&#xff01;一、Redis优点介绍1、速度快不需要等待磁盘的IO&#xff0c;在内存之间进行的数据存储和查询&#xff0c;速度非常快。当然&#xff0c;缓存的数据总量不能太大&#xff0c;因为受到…

tomcat和servlet的关系

tomcat和servlet的关系 Tomcat 是Web应用服务器,是一个Servlet/JSP容器. Tomcat 作为Servlet容器,负责处理客户请求,把请求传送给Servlet,并将Servlet的响应传送回给客户.而Servlet是一种运行在支持Java语言的服务器上的组件. Servlet最常见的用途是扩展Java Web服务器功能,提…

Linux常用远程连接工具介绍,总有一款适合你

目录 1、xshell 2、winscp 3、PuTTY 4、MobaXterm 5、FinalShell 今天给大家推荐Linux常用远程连接工具&#xff0c;希望对大家能有所帮助&#xff01; 1、xshell 介绍&#xff1a; xshell是一个非常强大的安全终端模拟软件&#xff0c;它支持SSH1, SSH2, 以及Windows平台的TEL…

Linux远程管理协议相关知识介绍

一、什么是远程管理远程管理&#xff0c;实际上就是计算机&#xff08;服务器&#xff09;之间通过网络进行数据传输&#xff08;信息交换&#xff09;的过程&#xff0c;与浏览器需要 HTTP 协议&#xff08;超文本传输协议&#xff09;浏览网页一样&#xff0c;远程管理同样需…

潜力的监控mysql_Grafana 数据库监控平台

Grafana 数据库监控平台简介Grafanademo 地址&#xff1a;官方demo文档可以下载pdf离线阅读Percona监控和管理(PMM)是一个用于管理和监控MySQL和MongoDB性能的开源平台。它由Percona与托管数据库服务&#xff0c;支持和咨询领域的专家合作开发。PMM是一种免费的开源解决方案&am…

PC软件:推荐七款Windows下宝藏软件

目录 一、uTools 效率神器 二、Groupy 窗口切换神器 三、Revo Uninstaller 卸载神器 四、Universal Viewer 五、VectorMagic 六、QuickLook 文件预览神器 七、Bandizip 压缩神器 今天给大家推荐七款Windows下软件&#xff0c;每一个都值得拥有。 一、uTools 效率神器 一个可以帮…

Linux计划任务(at,crontab)

在LINUX中&#xff0c;我们通过crontab和at这两个东西来实现 at&#xff1a;它是一个可以处理仅执行一次就结束的指令 crontab&#xff1a;它是会把你指定的工作或任务&#xff0c;比如&#xff1a;脚本等&#xff0c;按照你设定的周期一直循环执行下去 1.at计划任务的使用 语…