6.1、创建接口、映射文件和测试类

++++++++++++++++++++++++++分割线++++++++++++++++++++++++++

注意namespace属性值为对应接口的全限定类名

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!DOCTYPE mapper
  3. PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  4. "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  5. <mapper namespace="org.rain.mybatis.mapper.SelectMapper">
  6. </mapper>

++++++++++++++++++++++++++分割线++++++++++++++++++++++++++

6.2、查询一个实体类对象

6.2.1、接口方法

  1. User getUserById(@Param("id") Integer id);

6.2.2、映射文件

  1. <!--User getUserById(@Param("id") Integer id);-->
  2. <select id="getUserById" resultType="User">
  3. select * from t_user where id = #{id}
  4. </select>

6.2.3、测试方法

  1. @Test
  2. public void testGetUserById(){
  3. SqlSession sqlSession = SqlSessionUtils.getSqlSession();
  4. SelectMapper selectMapper = sqlSession.getMapper(SelectMapper.class);
  5. User user = selectMapper.getUserById(1);
  6. System.out.println(user);
  7. sqlSession.close();
  8. }

6.2.4、执行效果

6.3、查询一个list集合

6.3.1、接口方法

  1. List<User> getAllUser();

6.3.2、映射文件

  1. <!--List<User> getAllUser();-->
  2. <select id="getAllUser" resultType="User">
  3. select * from t_user
  4. </select>

6.3.3、测试方法

  1. @Test
  2. public void testGetAllUser(){
  3. SqlSession sqlSession = SqlSessionUtils.getSqlSession();
  4. SelectMapper selectMapper = sqlSession.getMapper(SelectMapper.class);
  5. List<User> users = selectMapper.getAllUser();
  6. for (User user : users) {
  7. System.out.println(user);
  8. }
  9. }

6.3.4、执行效果

6.4、查询单个数据

6.4.1、接口方法

  1. Integer getCount();

6.4.2、映射文件

注意:resultType属性的值除了可以是java.lang.Integer之外,还可以是Integer、integer、int或INT等;

这是因为mybatis对Java中常用的类型都设置了类型别名。

  1. <!--Integer getCount();-->
  2. <select id="getCount" resultType="java.lang.Integer">
  3. select count(*) from t_user
  4. </select>

6.4.3、测试方法

  1. @Test
  2. public void testGetCount(){
  3. SqlSession sqlSession = SqlSessionUtils.getSqlSession();
  4. SelectMapper selectMapper = sqlSession.getMapper(SelectMapper.class);
  5. Integer count = selectMapper.getCount();
  6. System.out.println(count);
  7. sqlSession.close();
  8. }

6.4.4、执行效果

6.5、查询一条数据为map集合

6.5.1、接口方法

  1. Map<String,Object> getUserByIdToMap(@Param("id") Integer id);

6.5.2、映射文件

  1. <!--Map<String,Object> getUserByIdToMap(@Param("id") Integer id);-->
  2. <select id="getUserByIdToMap" resultType="map">
  3. select * from t_user where id = #{id}
  4. </select>

6.5.3、测试方法

  1. @Test
  2. public void testGetUserByIdToMap(){
  3. SqlSession sqlSession = SqlSessionUtils.getSqlSession();
  4. SelectMapper selectMapper = sqlSession.getMapper(SelectMapper.class);
  5. Map<String, Object> userByIdToMap = selectMapper.getUserByIdToMap(1);
  6. System.out.println(userByIdToMap);
  7. sqlSession.close();
  8. }

6.5.4、执行效果

注意:当某个字段值为null时,该字段不会放进map集合中

6.6、查询多条数据为map集合

6.6.1、接口方法

  1. List<Map<String,Object>> getAllUserToMap();

6.6.2、映射文件

  1. <!--List<Map<String,Object>> getAllUserToMap();-->
  2. <select id="getAllUserToMap" resultType="map">
  3. select * from t_user
  4. </select>

6.6.3、测试方法

  1. @Test
  2. public void testGetAllUserToMap(){
  3. SqlSession sqlSession = SqlSessionUtils.getSqlSession();
  4. SelectMapper selectMapper = sqlSession.getMapper(SelectMapper.class);
  5. List<Map<String, Object>> allUserToMap = selectMapper.getAllUserToMap();
  6. for (Map<String, Object> map : allUserToMap) {
  7. System.out.println(map);
  8. }
  9. sqlSession.close();
  10. }

6.6.4、执行效果

6.6.5、嵌套map方式存储

6.6.5.1、接口方法

可以通过@MapKey注解设置大map集合的键为数据中的某个字段值(该字段值不能存在重复),值是每条数据所对应的小map集合

  1. @MapKey("ID")
  2. Map<String,Object> getAllUserToMap();

6.6.5.2、测试方法

  1. @Test
  2. public void testGetAllUserToMap(){
  3. SqlSession sqlSession = SqlSessionUtils.getSqlSession();
  4. SelectMapper selectMapper = sqlSession.getMapper(SelectMapper.class);
  5. Map<String, Object> allUserToMap = selectMapper.getAllUserToMap();
  6. System.out.println(allUserToMap);
  7. sqlSession.close();
  8. }

6.6.5.3、执行效果

6、Mybatis之高级查询的更多相关文章

  1. MyBatis高级查询

    -------------------------siwuxie095 MyBatis 高级查询 1.MyBatis 作为一个 ORM 框架,也对 SQL 的高级查询做了支持, MyBatis 高级查 ...

  2. mybatis中的高级查询

    Mybatis作为一个ORM框架,肯定是支持sql高级查询的. 下面的一个案例来为大家详细讲解mybatis中的高级查询. 案例说明: 此案例的业务关系是用户,订单,订单详情与商品之间的关系. 以订单 ...

  3. MyBatis从入门到精通(第6章):MyBatis 高级查询->6.1.2高级结果映射之一对多映射

    jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.IntelliJ IDEA 2019.3.1 本章主要包含的内容为 MyBatis 的高级结果映射,主要处理数据库一对一.一对多的 ...

  4. MyBatis从入门到精通(第6章):MyBatis 高级查询->6.1.1高级结果映射之一对一映射

    jdk1.8.MyBatis3.4.6.MySQL数据库5.6.45.IntelliJ IDEA 2019.2.4 本章主要包含的内容为 MyBatis 的高级结果映射,主要处理数据库一对一.一对多的 ...

  5. 持久层之 MyBatis: 第三篇 :缓存 And 高级查询

    MyBatis入门到精通3 缓存机制 Mybatis一级缓存测试 Mybatis二级缓存测试 高级查询 表关系说明 一对一查询 一对多查询 多对多查询 缓存机制 正如大多数持久层框架一样,MyBati ...

  6. MyBatis 高级查询之多对多查询(十一)

    高级查询之多对多查询 查询条件:根据玩家名,查询游戏信息 我们在之前创建的映射器接口 GameMapper.java 中添加接口方法,如下: /** * 根据玩家名查询游戏 * @param name ...

  7. MyBatis 高级查询之一对多查询(十)

    高级查询之一对多查询 查询条件:根据游戏名称,查询游戏账号信息 我们在之前创建的映射器接口 GameMapper.java 中添加接口方法,如下: /** * 根据游戏名查询游戏账号 * @param ...

  8. MyBatis 高级查询之一对一查询(九)

    高级查询之一对一查询 查询条件:根据游戏角色ID,查询账号信息 我们在之前创建的映射器接口 GameMapper.java 中添加接口方法,如下: /** * 根据角色ID查询账号信息 * @para ...

  9. MyBatis 高级查询环境准备(八)

    MyBatis 高级查询 之前在学习 Mapper XML 映射文件时,说到 resultMap 标记是 MyBatis 中最重要最强大也是最复杂的标记,而且还提到后面会详细介绍它的高级用法. 听到高 ...

  10. MyBatis(7)高级查询

    本次全部学习内容:MyBatisLearning 高级查询:   对于整体的工程是时候增加一点文件了: 具体用到那个类再去说明类的内容   一对一查询: 1.resultType进行实现: 执行的sq ...

随机推荐

  1. 2021-10-31:移动零。给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]。输出: [1,3,12,0,0]。说

    2021-10-31:移动零.给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序.示例:输入: [0,1,0,3,12].输出: [1,3,12,0,0].说 ...

  2. Django-1:安装、更新、查看版本

    安装: pip install Django 更新: pip3 install -U Django 或者 python -m pip install -U Django 查看: python -m d ...

  3. ModuleNotFoundError: No module named 'flask_wtf'

    ModuleNotFoundError: No module named 'flask_wtf' 解决: pip install flask_wtf

  4. pupstudy的使用

    打开环境 点击管理--打开根目录 把靶场放在www文件夹里 网页打开127.0.0.1/靶场文件名即可

  5. 前端学习 node 快速入门 系列 —— 事件循环

    事件循环 本篇将对以下问题进行讨论: 浏览器有事件循环,node 也有事件循环,两者有什么异同? node 核心特性(事件驱动和非阻塞 I/O )和事件循环有什么关系? node 中的高并发和高性能和 ...

  6. drf——反序列化校验源码(了解)、断言、drf之请求和响应、视图之两个视图基类

    1.模块与包 # 模块与包 模块:一个py文件 被别的py文件导入使用,这个py文件称之为模块,运行的这个py文件称之为脚本文件 包:一个文件夹下有__init__.py # 模块与包的导入问题 '' ...

  7. \n被当成回车处理

    Regex.Escape   C# 字符串变量str 的值为"a\nb"如果直接输出显示的话,就成了:ab需要输出显示为:a\nb string str = "a\nb& ...

  8. Weblogic反序列化(CVE-2023-21839)漏洞复现

    前言 序列化(Serialization):将对象的状态信息转换为可以存储或传输的形式的过程,一般将对象转换为字节流.序列化时,对象的当前状态被写入到临时或持久性存储区(文件.内存.数据库等). 反序 ...

  9. GitHub 私有仓库完全免费且不限制协作人数

    GitHub is now free for teams GitHub CEO Nat Friedman 在 2020.04.14 宣布已面向全体 GitHub 用户和团队提供不限制协作人数的私有仓库 ...

  10. mimikatz

    mimikatz 来源:https://github.com/gentilkiwi/mimikatz Mimikatz 是由法国人 Benjamin Delpy 编写的 Windows 密码提取工具, ...