MyBatis输出映射

1 resultType

resultType: 执行 sql 得到 ResultSet 转换的类型,使用类型的完全限定名或别名。如果返回的是集合,设置的是集合元素的类型,而不是集合本身。resultType 和 resultMap,不能同时使用。

1.1 输出简单类型

案例:返回球队的总记录数

TeamMapper接口添加如下内容:

int getCount();

TeamMapper.xml配置文件中添加如下:

<!-- 只有返回的结果是单行的时候,返回值类型才可以指定为基本类型如果是单行多列,也取不到后面的列的值;如果返回多行会报异常:TooManyResultsException-->
<select id="getCount" resultType="java.lang.Integer">select count(teamId) from team
</select>

测试类添加方法:

 @Testpublic void test07(){int count = teamMapper.getCount();System.out.println("总共的行数:"+count);}

1.2 输出pojo类型

案例:参考之前的查询所有球队信息

List<Team> queryAll();
<!--接口方法返回是集合类型,但是映射文件中的resultType需要指定集合中的类型,不是集合本身。-->
<select id="queryAll" resultType="com.AE.pojo.Team">select * from team;
</select>

1.3 输出Map类型

当我们只需要查询表中几列数据的时候可以将sql的查询结果作为Map的key和value。一般使用的是Map<Object,Object>.

Map 作为接口返回值,sql 语句的查询结果最多只能有一条记录。大于一条记录会抛出TooManyResultsException异常。

如果有多行,使用List<Map<Object,Object>>.

案例:根据id查询球队名称和位置。

TeamMapper接口添加如下内容:

Map<Object,Object> queryTwoColumn(int teamId);
List<Map<Object,Object>> queryTwoColumnList();

TeamMapper.xml配置文件中添加如下:

<select id="queryTwoColumn"  resultType="java.util.HashMap">select teamName,location from team where teamId=#{id}
</select>
<select id="queryTwoColumnList"  resultType="java.util.HashMap">fselect teamName,location from team
</select>

测试类添加方法:

@Testpublic void test08(){Map<String, Object> map = teamMapper.queryTwoColumn();System.out.println(map);}@Testpublic void test09(){List<Map<String, Object>> list = teamMapper.queryTwoColumnList();for (Map<String, Object> map : list) {System.out.println(map);}
​}

2 resultMap

resultMap 可以自定义 sql 的结果和 java 对象属性的映射关系。更灵活的把列值赋值给指定属性。

常用在列名和 java 对象属性名不一样的情况。

使用方式:

1.先定义 resultMap,指定列名和属性的对应关系。

2.在<select>中把 resultType 替换为 resultMap。

TeamMapper.java接口中添加方法:

List<Team> queryAll2();

TeamMapper.xml映射文件添加:

<!--resultMap 和resultType不能同时出现resultMap:是引用的自己创建resultMap的id--><select id="queryAll2" resultMap="baseResultMap">select * from team;</select><!--创建resultMap:相当于自己编写表中的列与实体类中的属性的映射id:resultMap的名称,要求唯一type:期待要映射为java的类型--><resultMap id="baseResultMap" type="com.AE.pojo.Team"><!--一般主键列用id,其余列用resultcolumn:表示数据库表中的列名,不区分大小写property:表示实体类中的对应的属性名,区分大小写javaType:实体类中的对应的属性的类型,可以省略,mybatis会自己推断jdbcType="数据库中的类型column的类型" 一般省略--><id column="teamId" property="teamId" javaType="java.lang.Integer" ></id><result column="teamName" property="teamName" javaType="java.lang.String"></result><result column="location" property="location" javaType="java.lang.String"></result><result column="createTime" property="createTime" javaType="java.util.Date"></result></resultMap>

测试:

    @Testpublic void test10(){List<Team> teams = teamMapper.queryAll2();teams.forEach(team-> System.out.println(team));}

3 数据库表中列与实体类属性不一致的处理方式

案例准备工作:创建表:

use mybatis;
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users`  (`user_id` int NOT NULL AUTO_INCREMENT COMMENT '用户id',`user_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '用户姓名',`user_age` int NULL DEFAULT NULL COMMENT '用户年龄',PRIMARY KEY (`user_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
​
INSERT INTO `users` VALUES (1, '贾宝玉', 14);
INSERT INTO `users` VALUES (2, '林黛玉', 13);
INSERT INTO `users` VALUES (3, '薛宝钗', 15);
​
SET FOREIGN_KEY_CHECKS = 1;

3.1 使用列别名和resultType

实体类Users.java

public class Users {private Integer userId;private String userName;private Integer userAge;
​@Overridepublic String toString() {return "Users{" +"userId=" + userId +", userName='" + userName + '\'' +", userAge=" + userAge +'}';}

接口UsersMapper.java

public interface UsersMapper {Users queryByID(int userId);
}

映射文件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.lina.mapper.UsersMapper"><!--方式1:resultType中的实体类的属性作为查询语句中的别名,让别名和属性保持一致--><select id="queryByID" resultType="com.lina.pojo.Users">select user_id as userId,user_name as userName,user_age as userAge from users where user_id=#{id};</select>
</mapper>

测试类TestUsersMapper.java

/*** ClassName: TestUsersMapper* 测试类* @author wanglina* @version 1.0*/
public class TestUsersMapper {private UsersMapper usersMapper= MybatisUtil.getSqlSession().getMapper(UsersMapper.class);
​@Testpublic void test01(){Users user = usersMapper.queryByID(1);System.out.println(user);}
}

3.2 使用resultMap

接口UsersMapper.java添加方法

Users queryByID2(int userId);

映射文件UsersMapper.xml添加如下内容:

    <!--方式2:通过resultMap自行映射--><select id="queryByID2" resultMap="baseMap">select * from users where user_id=#{id};</select><resultMap id="baseMap" type="com.lina.pojo.Users"><id column="user_id" property="userId"/><result column="user_name" property="userName"/><result column="user_age" property="userAge"/></resultMap>

测试:

@Testpublic void test02(){Users user = usersMapper.queryByID2(1);System.out.println(user);}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/804028.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记Kubernetes(k8s):访问 Prometheus UI界面:Warning: Error fetching server time

记Kubernetes&#xff08;k8s&#xff09;&#xff1a;访问 Prometheus UI界面:Warning: Error fetching server time 1、报错详情2、解决3、再次访问 PrometheusUI界面 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 1、报错详情 Warning:…

软件杯 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满…

MyBatis事务管理

MyBatis的事务管理是由TransactionFactory和Transaction两个接口定义的&#xff0c;TransactionFactory负责生成Transaction&#xff0c;这是一个典型的工厂模式。 官方提供了事务管理的两种模式&#xff1a; Managed&#xff1a;对应ManagedTransactionFactory和ManagedTran…

第四百四十一回 再谈flutter_native_splash包

文章目录 1. 知识回顾2. 使用方法3. 示例代码4. 经验与总结4.1 经验分享4.2 内容总结 我们在上一章回中介绍了"overlay_tooltip简介"相关的内容&#xff0c;本章回中将 再谈flutter_native_splash包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 知识回顾 我…

视频插针调研

视频插针 1、评估指标2、准确度3、实时4、视频流处理3、实时RIFE视频插帧测试 1、评估指标 参考&#xff1a;https://blog.csdn.net/weixin_43478836/article/details/104159648 https://blog.csdn.net/weixin_43605641/article/details/118088814 PSNR和SSIM PSNR数值越大表…

面试准备 集合 List

ArrayList 底层实现 使用Object[] 动态数组进行存储 特性 支持存储null值非线程安全支持快速访问 初始化方法 无参–返回一个空的列表&#xff08;DEFAULTCAPACITY_EMPTY_ELEMENTDATA&#xff09;指定初始容量&#xff1a; new ArrayList(20);指定集合 new ArrayList(col…

Opencv驱动摄像头

Opencv驱动摄像头&#xff0c;此段代码只能驱动电脑自带摄像头&#xff0c;目前没有分析出为何不能驱动另外连接的相机&#xff01; #include<iostream> #include<opencv2\core.hpp> #include<opencv2\highgui.hpp> #include<opencv2\imgproc.hpp> #i…

ubuntu下NTFS分区无法访问挂载-解决办法!

Ubuntu系统下&#xff0c;有的时候发现&#xff0c;挂载的NTFS文件系统硬盘无法访问。点击弹出类似问题&#xff1a; Error mounting /dev/sda1 at /media/root/新加卷: Command-line mount -t "ntfs" -o "uhelperudisks2,nodev,nosuid,uid0,gid0" "/…

Linux下的C语言文件编程

概念引入 window &#xff0c;linux如何修改一个文件&#xff0c;比如写一个word文档&#xff1a; 打开/创建文件 -->编辑文件 -->保存文件 -->关闭文件 我们需要使用代码自动化完成以上操作: 操作系统(linux)给我们提供了一系列的API: 打开&#xff1a; open 读写:…

【攻防世界】mfw(.git文件泄露)

首先进入题目环境&#xff0c;检查页面、页面源代码、以及URL&#xff1a; 发现页面无异常。 使用 dirsearch 扫描网站&#xff0c;检查是否存在可访问的文件或者文件泄露&#xff1a; 发现 可访问界面/templates/ 以及 .git文件泄露&#xff0c;故使用 GItHack 来查看泄露的 …

C语言奇技淫巧之--用宏定义替换函数名的另外一种思路

时间有限&#xff0c;简要记录原理。 快速回忆要点&#xff1a; #if definde(FEATURE_A) #define myfunc _myfunc #endif int myfunc(int a, int b) 场景&#xff1a; 假设某个功能函数针对不同的makefile配置需要有不同的函数名字&#xff0c;通常做法如下&#xff1a; #if …

传统方法(OpenCV)_车道线识别

一、思路 基于OpenCV的库&#xff1a;对视频中的车道线进行识别 1、视频处理&#xff1a;视频读取 2、图像转换&#xff1a;图像转换为灰度图 3、噪声去除&#xff1a;高斯模糊对图像进行去噪&#xff0c;提高边缘检测的准确性 4、边缘检测&#xff1a;Canny算法进行边缘检测…

状态模式(行为型)

目录 一、前言 二、状态模式 三、总结 一、前言 状态模式(State Pattern&#xff09;是一种行为型设计模式&#xff0c;它允许一个对象在其内部状态改变时改变它的行为。对象看起来好像修改了它的类&#xff0c;但实际上&#xff0c;由于状态模式的引入&#xff0c;行为的变…

Python单元测试pytest捕获日志输出

使用pytest进行单元测试时&#xff0c;遇到了需要测试日志输出的情况&#xff0c;查看了文档 https://docs.pytest.org/en/latest/how-to/capture-stdout-stderr.html https://docs.pytest.org/en/latest/how-to/logging.html 然后试了一下&#xff0c;捕捉logger.info可以用…

CentOS 7.9 额外安装一个Python3.x版本详细教程

Centos7默认的python版本是2.7&#xff0c;根据需要我们额外安装一个Python3.x版本。 1、安装基础环境 yum update -yyum -y groupinstall "Development tools"yum install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel psmisc …

ArchiveBo

目录 1、 ArchiveBo 2、 BackResponseBo 3、 RelationshipVoKey 3.1、 * 内容主键 3.2、 * 项目主键

大语言模型及提示工程在日志分析任务中的应用 | 顶会IWQoS23 ICPC24论文分享

本文是根据华为技术专家陶仕敏先生在2023 CCF国际AIOps挑战赛决赛暨“大模型时代的AIOps”研讨会闪电论文分享环节上的演讲整理成文。 BigLog&#xff1a;面向统一日志表示的无监督大规模预训练方法 BigLog: Unsupervised Large-scale Pre-training for a Unified Log Represen…

【azure笔记 1】容器实例管理python sdk封装

容器实例管理python sdk封装 测试结果 说明 这是根据我的需求写的&#xff0c;所以有些参数是写死的&#xff0c;比如cpu核数和内存&#xff0c;你可以根据你的需要自行修改。前置条件&#xff1a; 当前环境已安装python3.8以上版本和azure cli并且已经登陆到你的账户 依赖安…

学习java第三十八天

Spring事务传播行为&#xff1a; PROPAGATION_REQUIRED(默认) 如果当前没有事务&#xff0c;就新建一个事务&#xff0c;如果已经存在一个事务中&#xff0c;加入到这个事务中 PROPAGATION_SUPPORTS 支持当前事务&#xff0c;如果当前没有事务&#xff0c;就以非事务方式执行…

RocketMQ之Topic和Tag最佳实践

一、Topic是什么&#xff1f;它的作用&#xff1f; Topic即主题&#xff0c;是消息队列中用于对消息进行分类和组织的一种机制&#xff0c;它有以下三种作用&#xff1a; 标识消息分类&#xff1a;RocketMQ的主题用于对消息进行分类和组织。通过为不同类型的消息分配不同的主题…