【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 也提供了一键式生 ...
随机推荐
- HTTP三次握手
转载:http://blog.163.com/wangzhenbo85@126/blog/static/1013632822013423502833/?suggestedreading&wum ...
- 什么是WebRTC
背景:webrtc web real-time communication 实时通信标准,提供了音视频通话系统的能力. 应用场景: 点对点视频聊天,如 微信视频,等实时视频通话应用. 多人视频会议,企 ...
- C#扩展方法 Where Any Count Signal SignalOrDefault First 等方法的使用
using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using Syst ...
- 6. CSS有哪些方法可以提升层级
1. 使用 z-index 2. 使用定位,脱离标准流
- 双通道MIL-STD-1553B总线通讯模块
* 双通道MIL-STD-1553B总线通讯模块 * 32bi,33 MHz CPCI/PCI/总线* 每个通道为A.B双冗余总线* 单功能可设置BC/RT/BM一种工作模式* 数据传输率: 4Mb ...
- 【小 w 的代数】(提供一种 n^2 log 的解法)
前言: 卖点 记录 CTH 的发言 CTH:你这真是 n^3 的 CTH:我也不知道你线段树优化个啥,\(n^3 \log n\) CTH:你优化到哪了啊 CTH:······你从赛时打这个题到现在 ...
- 布局(LinearLayout,RelativeLayout,FrameLayout,TableLayout,GridLayout,ConstraintLayout)
LinearLayout layout_gravity:组件在父容器里的对齐方式 gravity:组件包含的所有子元素的对齐方式 layout_weight:在原有基础上分配剩余空间,一般把layou ...
- WEB 新手篇
xctf在线场景以使用了,一直想写web题来着 001 view_scoure X老师让小宁同学查看一个网页的源代码,但小宁同学发现鼠标右键好像不管用了. 解: 查看网站源码,注释里有 flag 00 ...
- http协议、web服务器-并发服务器1
阅读目录: 1.http协议 2.Web静态服务器-1-显示固定的页面 3.Web静态服务器-2-显示需要的页面 4.Web静态服务器-3-多进程 5.Web静态服务器-4-多线程 一.HTTP协议简 ...
- 「模拟赛」多校 A 层联训 15
比赛链接 A. 追逐游戏 (chase) 没啥意义的水题,但赛时没调出来. 分讨,LCA 设 \(S\) 和 \(T\) 的 LCA 为 \(lca\) \(S'\) 为 \(lca\) 的祖先节点的 ...