【MyBatis】学习笔记06:各种查询所返回数据的数据类型
【MyBatis】学习笔记03:配置文件进一步解读(非常重要)
【总结】
1.查询出的数据只有一条:
(1)可以通过实体类对象接收
(2)可以通过List集合接收(Eg1)
(3)可以通过map接收(Eg4)
2.若查询的数据有多条:
(1)可以通过List集合接收(Eg2)
(2)可以通过map类型的List集合接收(Eg5(1))
(3)可以在mapper接口的方法上添加
@MapKey注解,此时就可以将每条数据转为map集合作为值,以某个字段的值作为键,放在同一个map集合里面。(Eg5(2))(注意)|(一定不能通过实体类对象接收,否则会抛出异常TooManyResultsException)
准备
(1)创建接口

(2)创建对应的映射文件


查询一个实体类对象
//SelectMapper 接口
public interface SelectMapper {
/**
* 查询用户信息
* @param id 用户id
* @return 用户对象
*/
User getUserById(Integer id);
}
<!-- User getUserById(Integer id);-->
<select id="getUserById" resultType="User">
select * from t_users where id= #{id}
</select>
@Test
public void getUserById(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
User result = mapper.getUserById(4);
System.out.println(result);
}
cc.mllt.sky.utils.SqlSessionUtils.java
package cc.mllt.sky.utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder; import java.io.IOException;
import java.io.InputStream; public class SqlSessionUtils {
public static SqlSession getSqlSession(){
SqlSession sqlSession = null;
try{
InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);
sqlSession = sqlSessionFactory.openSession(true); }catch (IOException e){
e.printStackTrace();
} return sqlSession;
}
}
查询返回一个List集合
Eg1:查询出的数据只有一条
//SelectMapper 接口
public interface SelectMapper {
/**
* 查询用户信息
* @param id 用户id
* @return 用户对象
*/
List<User> getUserById(Integer id);
}
<!-- User getUserById(Integer id);-->
<select id="getUserById" resultType="User">
select * from t_users where id= #{id}
</select>
@Test
public void getUserById(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
List<User> result = mapper.getUserById(4);
System.out.println(result);
}
Eg2:查询出的数据有多条
//SelectMapper 接口
/**
* 查询所有用户
* @return List<User>
*/
List<User> getUsers();
<!-- List<User> getUsers();-->
<select id="getUsers" resultType="User">
select * from t_users
</select>
@Test
public void getUsers(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
List<User> result = mapper.getUsers();
System.out.println(result);
}
其他返回数据类型(补充:MyBatis类型别名)
Eg3:返回数据为一行一列
//SelectMapper 接口
/**
* 查询用户表行数
* @return Integer
*/
Integer getCount();
<!-- Integer getCount();-->
<select id="getCount" resultType="java.lang.Integer">
select count(*) from t_users
</select>
resultType中填写
Integer、integer、int、Int、_int都不会报错原因在 官方手册
Configuration XML>typeAliases(类型别名)因为MyBatis中设置默认的类型别名
Alias Mapped Type _int int int Integer integer Integer Alias:别名
Mapped Type:映射地址
java.lang.Integer --> int , Integer
int --> _int , _integer
Map --> map
String --> string
@Test
public void getCount(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
Integer result = mapper.getCount();
System.out.println(result);
}
Eg4:返回一条数据 返回数据类型为Map集合
//SelectMapper 接口
/**
* 根据用户id获取Map类型的信息
* @param id 用户id
* @return Map类型用户信息 Map<String,Object>
*/
Map<String,Object> getUserByIdToMap(@Param("id") Integer id);
<!-- Map<String,Object> getUserByIdToMap(@Param("id") Integer id);-->
<select id="getUserByIdToMap" resultType="map">
select * from t_users where userId= #{id}
</select>
@Test
public void getUserByIdToMap(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
Map<String, Object> result = mapper.getUserByIdToMap(4);
System.out.println(result);
}
获得的map集合结果以字段为键
输出结果如下
{userPassword=123456改了密码, userCount=test001, userGrade=1, userRegDate=2022-03-01T00:00, userName=测试用户改了名, userId=4, userBlance=0}
Eg5:返回多条数据 返回数据类型为map集合
(1)方式1: 将多个Map放在List中
//SelectMapper 接口
/**
* 获取所有用户信息
* @return Map类型用户信息 Map<String,Object>
*/
List<Map<String,Object>> getusersToMap();
}
<!-- Map<String,Object> getusersToMap();-->
<select id="getusersToMap" resultType="map">
select * from t_users
</select>
@Test
public void getUsersToMap(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
List<Map<String, Object>> result = mapper.getusersToMap();
System.out.println(result);
}
(2)方式2: @MapKey()注解
//SelectMapper 接口
/**
* 获取所有用户信息
* @return Map类型用户信息 Map<String,Object>
*/
@MapKey("userId")//MySQl中字段名,最好为key
Map<String,Object> getusersToMap();
<!-- Map<String,Object> getusersToMap();-->
<select id="getusersToMap" resultType="map">
select * from t_users
</select>
@Test
public void getUsersToMap(){
SqlSession sqlSession = SqlSessionUtils.getSqlSession();
SelectMapper mapper = sqlSession.getMapper(SelectMapper.class);
// List<Map<String, Object>> result = mapper.getusersToMap();
Map<String, Object> result = mapper.getusersToMap();
System.out.println(result);
}
输出结果如下
{1={userPassword=qq2686485465, userCount=mllt9920, userGrade=999, userRegDate=2022-03-20T00:00, userName=萌狼蓝天, userId=1, userBlance=100000000}, 2={userPassword=134679852, userCount=xrilang, userGrade=888, userRegDate=2022-03-25T00:00, userName=向日狼, userId=2, userBlance=10240000}, 4={userPassword=123456改了密码, userCount=test001, userGrade=1, userRegDate=2022-03-01T00:00, userName=测试用户改了名, userId=4, userBlance=0}, 5={userPassword=123, userCount=mllt@xrilang.com, userGrade=0, userName=张三, userId=5, userBlance=0}}
【MyBatis】学习笔记06:各种查询所返回数据的数据类型的更多相关文章
- MyBatis:学习笔记(3)——关联查询
MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统, ...
- mybatis学习笔记(10)-一对一查询
mybatis学习笔记(10)-一对一查询 标签: mybatis mybatis学习笔记10-一对一查询 resultType实现 resultMap实现 resultType和resultMap实 ...
- Mybatis学习笔记(七) —— 关联查询
一.一对多查询 需求:查询所有订单信息,关联查询下单用户信息. 注意:因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询.如果从用户信息出发查询用户下的订单信息则 ...
- Mybatis学习笔记7 - select查询的相关属性使用
1.当接口的返回类型是集合List时,resultType要写集合中元素的类型 示例如下: 接口定义: package com.mybatis.dao; import com.mybatis.bean ...
- mybatis学习笔记(14)-查询缓存之中的一个级缓存
mybatis学习笔记(14)-查询缓存之中的一个级缓存 标签: mybatis mybatis学习笔记14-查询缓存之中的一个级缓存 查询缓存 一级缓存 一级缓存工作原理 一级缓存測试 一级缓存应用 ...
- Mybatis学习笔记(二) 之实现数据库的增删改查
开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...
- MyBatis:学习笔记(1)——基础知识
MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...
- Mybatis学习笔记之二(动态mapper开发和spring-mybatis整合)
一.输入映射和输出映射 1.1 parameterType(输入类型) [传递简单类型] 详情参考Mybatis学习笔记之一(环境搭建和入门案例介绍) 使用#{}占位符,或者${}进行sql拼接. [ ...
- mybatis学习笔记--常见的错误
原文来自:<mybatis学习笔记--常见的错误> 昨天刚学了下mybatis,用的是3.2.2的版本,在使用过程中遇到了些小问题,现总结如下,会不断更新. 1.没有在configurat ...
- mybatis学习笔记(五):mybatis 逆向工程
mybatis学习笔记(五):mybatis 逆向工程 在日常开发中,如果数据库中存在多张表,自己手动创建 多个pojo 类和编写 SQL 语法配置文件,未免太过繁琐,mybatis 也提供了一键式生 ...
随机推荐
- Uefi ABL读取XBL设置的标志位
PBL(启动固化程序)-> XBL(扩展引导加载程序,负责初始化芯片驱动和核心应用功能.XBL通常会加载一些平台相关的驱动程序,并提供通用接口)-> ABL(应用引导加载程序,负责引导操作 ...
- EAS(能量感知调度)绿色节能调度器
能量感知调度(EAS)使调度程序能够预测其决策对 CPU 消耗的电量的影响. EAS 依赖于 CPU 的能量模型 (EM) 来为每个任务选择省电的 CPU,同时要求对执行任务的吞吐量的影响最小. EA ...
- permission 文件 - 后台管理 element-admin 模板 作用-前置路由守卫
import router from "./router"; import { getToken } from "./utils/auth"; import N ...
- Win11使用Translucent TB设置Windows导航栏透明失败解决方案
Win11使用Translucent TB设置Windows导航栏透明失败解决方案 Translucent TB下载方式:直接在Windows自带的Microsoft应用商店里面搜索下载就可以了 1. ...
- Qunar 云原生容器化落地实践
作者|邹晟 去哪儿网基础平台技术专家 背景 近几年,云原生和容器技术非常火爆,且日趋成熟,众多企业慢慢开始容器化建设,并在云原生技术方向上不断的探索和实践.基于这个大的趋势, 2020 年底 Quna ...
- 防火墙NAT配置与DHCP下发
该实验如果有做的不足的地方请见谅 实验目标: 按要求划分区域,公司内部办公区为trust,服务器区为dmz,外部网络为untrust. PC1和PC2为公司内部办公区,需要从防火墙中的DHCP服务获取 ...
- 等保测评FAQ
之前写过一篇关于等保测评的相关介绍<一起聊聊等保测评>,发现大家对于等保测评这个还是很关注的,有些人问等保测评这份工工作的,也有些人问关于等保测评一些指导意见的,这篇文章我想把大家的问题来 ...
- h5+ 检测 APP 是否开启应用通知权限
h5+ 检测 APP 是否开启应用通知权限 原文可查看此处,搜索 h5+ 检测 APP 是否开启应用通知权限 https://mp.weixin.qq.com/mp/profile_ext?actio ...
- go高并发之路——本地缓存
一.使用场景 试想一个场景,有一个配置服务系统,里面存储着各种各样的配置,比如直播间的直播信息.点赞.签到.红包.带货等等.这些配置信息有两个特点: 1.并发量可能会特别特别大,试想一下,一个几十万人 ...
- react hooks + ts 封装组件
react hooks+ts组件封装 简介 在react使用ts封装组件,需要注意类型, 使用 forwardRef 方法包起来 子组件 import * as React from "re ...