我的编程空间,编程开发者的网络收藏夹
学习永远不晚

mybatis处理返回结果集

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

mybatis处理返回结果集

结果处理

1 简单类型输出映射

返回简单基本类型

//查询管理员总数int adminCount();
        select count(*) from admin
  • 返回结果需要定义后才能使用简称

    • eg:resultType="Admin" 已经定义过别名了,所以就可以使用简称

    • 那么java中其它常用类型简称如何使用?(不使用简称就需要用全类名,eg:java.util.List)

      • 在mybatis底层源码中定义了一些常用的类型的简称

794769acd7964b44bb646cee0d315342.png

dc81f836aa394b8faec49d21ea023cca.png

dc987f4058494cfc935327cdc9978b91.png

  • 也可以在官网中查看定义好的类型简称或者自己可以重写已有的类型处理器或创建自己的类型处理器来处理不支持的或非标准的类型,具体参考mybatis – MyBatis 3 | 配置

2 对象映射

  • mybatis会将查询到的结果自动封装到一个对象中,会自己创建给定类型的类的对象(通过是否执行无参构造方法我们可以看到)

  • 自动封装的条件:

    • 开启了全局的自动结果映射,PARTIAL默认是单张表开启的a940773f98644fdea54f5730f0e1c5ee.png

    • 数据库列名与属性名名字相同,mybatis会自动将查询结果封装到pojo对象中;如果不一样,比如java中使用标准驼峰命名,数据库中使用下划线连接命名,这个时候可以通过开启驼峰命名自动映射或开启全局设置实现自动转换98bd7ae4827b4f609913b89495bd4780.png

例如: 

定义的类中的属性名:

a79aa7fbe9c545aeb913a61e3ec3cfef.png

     select id,account,password,admin_gender from admin

420e8f96e86c48f294092cc8121f0023.png

3 特殊处理定义 resultMap

定义 resutlMap

  • 在resutlMap 标签中,我们可以自定义结果映射

                      

  (1) resutlMap 的 id 属性是 resutlMap 的唯一标识,本例中定义为“adminMap”

  (2) resutlMap 的 id 属性是映射的 POJO 类

  (3) id 标签映射主键,result 标签映射非主键

  (4) property 设置 POJO 的属性名,column 数据库中列名

使用 resutlMap

    SELECT         s.id,        s.num,        s.name,        s.gender,        s.birthday,        d.num dormNum,        a.account,        s.oper_time    FROM student s              LEFT JOIN dorm d ON s.dormid = d.id              LEFT JOIN admin a ON s.adminid = a.id              WHERE s.id = #{id}

测试:

@Testpublic void find() {    SqlSession sqlSession = MybatisUtil.getSqlSession();    StudentDao studentDao = sqlSession.getMapper(StudentDao.class);        Student student = studentDao.findStudentById(1);        sqlSession.commit();    sqlSession.close();}

c98d4c824a6b4410869d4076354dd5cf.png

  • 在这里还要补充一点:如果在拿到学生信息后,需要获取学生的宿舍号,首先要拿到学生对象中的Dorm对象,然后再获取Dorm对象中属性

    System.out.println(student.getDorm().getNum());
    • 前端也一样30fbc45db6de43528ec4d4cc69db3538.png

  • 注意:查询多个学生信息只需要将sq语句中的WHERE s.id = #{id}这个条件给去掉,resultMap和查询一个是一样的

    List findStudents();

方法二:嵌套查询(把sql分成多次查询,先查询学生信息,再通过外键查询宿舍和操作人信息)

                                    
     select num from dorm where id = #{dormid}
        SELECT            d.id,            d.num,            s.num,            s.name,            a.account       FROM dorm d       LEFT JOIN admin a ON d.adminid = a.id       LEFT JOIN student s ON d.id = s.dormid                  WHERE d.id = 1

测试:

@Testpublic void find(){    SqlSession sqlSession = MybatisUtil.getSqlSession();    DormDao dormDao = sqlSession.getMapper(DormDao.class);    //通过id查询宿舍和这个宿舍中所住学生的信息    Dorm dorm = dormDao.findDormById(1);    sqlSession.close();}

3fe786f7017d4affad6e0cebc3f3b0fd.png

方法2:嵌套查询

                
    SELECT account FROM admin WHERE id = #{adminid}     SELECT            d.id,            d.num,            s.num,            s.name,            a.account       FROM dorm d       LEFT JOIN admin a ON d.adminid = a.id       LEFT JOIN student s ON d.id = s.dormid

测试:

@Testpublic void find(){    SqlSession sqlSession = MybatisUtil.getSqlSession();    DormDao dormDao = sqlSession.getMapper(DormDao.class);    //查询每个宿舍,并关联每个宿舍中有多少个学生    List dorms = dormDao.findDorms();        // 遍历所有宿舍    for (Dorm dorm:dorms){        System.out.println(dorm);        // 获取到宿舍中所有学生信息        for (Student student:dorm.getStudents()){            System.out.println(student.getNum()+":"+student.getName());        }    }    sqlSession.close();}

可以看到查询出了所有的宿舍以及宿舍所住学生的信息:

2c07788c7ef44cceb651d6a8efafeb47.png

方法2:嵌套查询

                
    SELECT account FROM admin WHERE id = #{adminid}

测试:806ac0c3e5de483b845b73056249e1fb.png

 

来源地址:https://blog.csdn.net/m0_58450531/article/details/128510519

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

mybatis处理返回结果集

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

mybatis怎么返回结果集

MyBatis可以通过以下方式返回结果集:查询单个结果:使用`selectOne`方法执行查询,并返回一个对象作为结果。User user = sqlSession.selectOne("UserMapper.getUserById",
2023-10-25

mybatis怎么返回多个结果集

MyBatis是一个持久化框架,用于将数据库操作与Java对象的映射进行分离。在MyBatis中返回多个结果集可以通过以下两种方式实现:1. 使用存储过程:存储过程可以返回多个结果集。在MyBatis中,可以通过调用存储过程并使用`sele
2023-09-29

mybatis如何处理结果集

MyBatis处理结果集的方式取决于SQL语句的类型和返回类型的配置。对于查询语句,MyBatis通常将结果集映射到一个对象或集合中。可以通过以下方式配置结果集的映射:使用ResultMap:使用ResultMap配置可以将结果集的列映射
2023-10-25

jdbc返回结果集怎么分页

在使用JDBC查询数据库并返回结果集时,可以使用LIMIT和OFFSET来实现分页。LIMIT用于限制返回的数据行数,OFFSET用于指定从结果集的第几行开始返回数据。例如,假设要查询名为"users"的表,并返回第2页,每页显示10条记录
2023-10-25

Golang 函数对返回结果的处理方式

go 函数可以通过 return 语句返回结果,返回结果类型由函数签名中的最后一个参数列表决定。处理返回结果的方法包括:无返回结果:无须处理。单一返回值:使用赋值运算符分配给变量。多个返回值:使用多个变量接收,顺序与函数签名一致。命名字段返
Golang 函数对返回结果的处理方式
2024-05-23

mybatis返回的map结果怎么设置有序

今天给大家介绍一下mybatis返回的map结果怎么设置有序。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。mybatis返回的map结果设置有序mybatis
2023-06-28

jdbc返回结果集的方法是什么

在Java中,使用JDBC(Java Database Connectivity)连接数据库并执行查询语句时,可以通过以下方法来返回结果集:1. 使用Statement对象的executeQuery()方法:通过创建Statement对象,
jdbc返回结果集的方法是什么
2023-10-30

Android中activity处理返回结果的实现方式

大家在网上购物时都有这样一个体验,在确认订单选择收货人以及地址时,会跳转页面到我们存入网站内的所有收货信息(包含收货地址,收货人)的界面供我们选择,一旦我们点击其中某一条信息,则会自动跳转到订单提交界面,此时的收货信息已经变为我们之前选择的
2022-06-06

Springboot项目异常处理及返回结果统一

这篇文章主要介绍了Springboot项目异常处理及返回结果统一,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
2022-11-13

Mybatis怎么把返回结果封装成map类型

这篇文章主要讲解了“Mybatis怎么把返回结果封装成map类型”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Mybatis怎么把返回结果封装成map类型”吧!一、Mybatis把返回结果封
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录