【Mybatis】学习笔记01:连接数据库,实现增删改

【Mybatis】学习笔记02:实现简单的查

【MyBatis】学习笔记03:配置文件进一步解读(非常重要)

【MyBatis】学习笔记04:配置文件模板

【MyBatis】学习笔记05:获取参数值的两种方式

【总结】

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:各种查询所返回数据的数据类型的更多相关文章

  1. MyBatis:学习笔记(3)——关联查询

    MyBatis:学习笔记(3)--关联查询 关联查询 理解联结 SQL最强大的功能之一在于我们可以在数据查询的执行中可以使用联结,来将多个表中的数据作为整体进行筛选. 模拟一个简单的在线商品购物系统, ...

  2. mybatis学习笔记(10)-一对一查询

    mybatis学习笔记(10)-一对一查询 标签: mybatis mybatis学习笔记10-一对一查询 resultType实现 resultMap实现 resultType和resultMap实 ...

  3. Mybatis学习笔记(七) —— 关联查询

    一.一对多查询 需求:查询所有订单信息,关联查询下单用户信息. 注意:因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询.如果从用户信息出发查询用户下的订单信息则 ...

  4. Mybatis学习笔记7 - select查询的相关属性使用

    1.当接口的返回类型是集合List时,resultType要写集合中元素的类型 示例如下: 接口定义: package com.mybatis.dao; import com.mybatis.bean ...

  5. mybatis学习笔记(14)-查询缓存之中的一个级缓存

    mybatis学习笔记(14)-查询缓存之中的一个级缓存 标签: mybatis mybatis学习笔记14-查询缓存之中的一个级缓存 查询缓存 一级缓存 一级缓存工作原理 一级缓存測试 一级缓存应用 ...

  6. Mybatis学习笔记(二) 之实现数据库的增删改查

    开发环境搭建 mybatis 的开发环境搭建,选择: eclipse j2ee 版本,mysql 5.1 ,jdk 1.7,mybatis3.2.0.jar包.这些软件工具均可以到各自的官方网站上下载 ...

  7. MyBatis:学习笔记(1)——基础知识

    MyBatis:学习笔记(1)--基础知识 引入MyBatis JDBC编程的问题及解决设想 ☐ 数据库连接使用时创建,不使用时就释放,频繁开启和关闭,造成数据库资源浪费,影响数据库性能. ☐ 使用数 ...

  8. Mybatis学习笔记之二(动态mapper开发和spring-mybatis整合)

    一.输入映射和输出映射 1.1 parameterType(输入类型) [传递简单类型] 详情参考Mybatis学习笔记之一(环境搭建和入门案例介绍) 使用#{}占位符,或者${}进行sql拼接. [ ...

  9. mybatis学习笔记--常见的错误

    原文来自:<mybatis学习笔记--常见的错误> 昨天刚学了下mybatis,用的是3.2.2的版本,在使用过程中遇到了些小问题,现总结如下,会不断更新. 1.没有在configurat ...

  10. mybatis学习笔记(五):mybatis 逆向工程

    mybatis学习笔记(五):mybatis 逆向工程 在日常开发中,如果数据库中存在多张表,自己手动创建 多个pojo 类和编写 SQL 语法配置文件,未免太过繁琐,mybatis 也提供了一键式生 ...

随机推荐

  1. 前端导出excel文件,后端返回二进制文件 application/octet-stream 前端处理数据并下载excel文件

    通过URL.createObjectURL(blob)可以获取当前文件的一个内存URL const href = URL.createObjectURL(res.data); const box = ...

  2. document.designMode 设计模式

    document.designMode 的默认值是 off 关闭: 在控制台输入 document.designMode = 'on' 就可以编辑页面内容:

  3. Vue 中的key 值的作用是什么?

    使用 v-for 渲染列表的时候会使用 key 给标签一个唯一标识符  ,为了能够高效的跟新虚拟 dom  : 如果没有使用 key 或者key值相同,就不能准确复用虚拟 dom :

  4. EAFP 与 LBYL 风格

    EAFP 与 LBYL 是两种"防御性处理机制",相信你一定接触过,只是可能没有深入思考过这个问题. 输入两个数,要输出相除后的结果: a, b = map(int, input( ...

  5. H5移动端字体自适应(也适用于宽高)

    原文地址: https://mp.weixin.qq.com/s/hhmav2sbAgb7w17ipVZiTw 方法一:纯css方法, 精确度高,IOS 和 安卓 字体大小同等比例1.1 以16px为 ...

  6. Go语言学习 _基础02 _条件表达式、分支、循环

    Go语言学习 _基础02 _条件表达式.分支.循环 条件表达式和switch package condition import "testing" func TestCondict ...

  7. 3.14 深度剖析Linux硬链接和软链接,直击它们的本质!

    建立硬链接和软链接非常简单,那这两种链接有什么区别?它们都有什么作用?这才是链接文件最不容易理解的地方,我们分别来讲讲. ln创建硬链接 我们再来建立一个硬链接文件,然后看看这两个文件的特点. [ro ...

  8. Docker容器制作DockerFile

    Docker换国内源和简单操作 vim /etc/docker/daemon.json { "registry-mirrors": ["http://hub-mirror ...

  9. 基于Java+SpringBoot心理测评心理测试系统功能实现八

    一.前言介绍: 1.1 项目摘要 心理测评和心理测试系统在当代社会中扮演着越来越重要的角色.随着心理健康问题日益受到重视,心理测评和心理测试系统作为评估个体心理状态.诊断心理问题.制定心理治疗方案的工 ...

  10. NOIP2023模拟2联测23 T2 害怕

    NOIP2023模拟2联测23 T2 害怕 好像写了一种出题人意料之外的算法. 思路 在生成树上加入白边,白边和若干条蓝色边形成环,环上的蓝色边必须要分配比该白色边更小的边权(最小生成树). 给每一条 ...