使用MyBatis实现条件查询

news2024/11/27 10:30:54

文章目录

  • 一,查询需求
  • 二,打开MyBatisDemo项目
  • 三,对学生表实现条件查询
    • (一)创建学生映射器配置文件
    • (二)在MyBatis配置文件里注册学生映射器配置文件
    • (三)创建学生映射器接口
    • (四)创建测试类TestStudentMapper
      • 1,查询女生记录
      • 2,查询19岁的女生
      • 3,查询姓吴的19岁女生
      • 4,查找姓张的19岁女生


一,查询需求

在这里插入图片描述

对学生表进行条件查询,涉及姓名、性别和年龄三个字段。
在这里插入图片描述

比如查询姓“吴”,性别为“女”,同时年龄为19的学生记录。
在这里插入图片描述

注意:注意:通配符%与_的区别。

二,打开MyBatisDemo项目

打开MyBatisDemo项目
在这里插入图片描述

三,对学生表实现条件查询

(一)创建学生映射器配置文件

在resources/mapper目录里创建学生映射器配置文件 - StudentMapper.xml
在这里插入图片描述
代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="net.army.mybatis.mapper.StudentMapper">
    <!--按编号查询班级-->
    <select id="getClazz" resultType="Clazz">
        SELECT c_id id, c_name name FROM t_class WHERE c_id = #{id}
    </select>

    <!--定义学生结果映射-->
    <resultMap id="studentMap" type="Student">
        <result column="s_id" property="id"/>
        <result column="s_name" property="name"/>
        <result column="s_gender" property="gender"/>
        <result column="s_age" property="age"/>
        <!--通过子查询getClazz关联到班级实体-->
        <association column="class_id" property="clazz" javaType="Clazz" select="getClazz"/>
    </resultMap>

    <!--按条件查询学生记录,涉及姓名、性别与年龄的联合查询-->
    <select id="findByCondition" parameterType="java.util.Map" resultMap="studentMap">
        SELECT * FROM t_student
        <trim prefix="WHERE" prefixOverrides="AND|OR"> <!--删除条件中多余的AND或OR-->
            <!--关于姓名的条件,模糊查询-->
            <if test="name != null">
                s_name LIKE CONCAT(#{name}, '%')
            </if>
            <!--关于性别的条件-->
            <if test="gender != null">
                AND s_gender = #{gender}  <!--注意AND不能少-->
            </if>
            <!--关于年龄的条件-->
            <if test="age != null">
                AND s_age = #{age} <!--注意AND不能少-->
            </if>
        </trim>
    </select>
</mapper>

(二)在MyBatis配置文件里注册学生映射器配置文件

在MyBatis配置文件的元素里添加子元素
在这里插入图片描述

(三)创建学生映射器接口

在net.army.mybatis.mapper包里创建学生映射器接口 - StudentMapper
在这里插入图片描述
代码如下:

package net.army.mybatis.mapper;

import net.army.mybatis.bean.Student;

import java.util.List;
import java.util.Map;

/**
 * 作者:梁辰兴
 * 日期:2023/4/18
 * 功能:学生映射器接口
 */
public interface StudentMapper {
    List<Student> findByCondition(Map<String, Object> condition); // 按条件查询学生记录
}

(四)创建测试类TestStudentMapper

在test/java的net.huawei.mybatis.mapper包里创建TestStudentMapper类
在这里插入图片描述
代码如下:

package net.army.mybatis.mapper;

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 org.junit.After;
import org.junit.Before;

import java.io.IOException;
import java.io.Reader;

/**
 * 作者:梁辰兴
 * 日期:2023/4/18
 * 功能:
 */
public class TestStudentMapper {
    private SqlSession sqlSession; // SQL会话
    private StudentMapper studentMapper; // 学生映射器

    @Before
    public void init() {
        try {
            // 读取MyBatis配置文件
            Reader reader = Resources.getResourceAsReader("mybatis-config.xml");
            // 基于MyBatis配置文件构建SQL会话工厂
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
            // 利用SQL会话工厂获取SQL会话
            sqlSession = factory.openSession();
            // 利用SQL会话获取学生映射器对象
            studentMapper = sqlSession.getMapper(StudentMapper.class);
            // 提示用户SQL会话创建成功
            System.out.println("SQL会话创建成功~");
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @After
    public void destroy() {
        // 关闭SQL会话
        sqlSession.close();
        // 提示用户SQL会话关闭
        System.out.println("SQL会话已经关闭~");
    }
}

1,查询女生记录

添加测试方法testFindByCondition()

// 按条件查询记录
@Test                                                
public void testFindByCondition() {                                    
    // 创建条件对象                                                         
    Map<String, Object> condition = new HashMap<>();                  
    // 设置性别条件(女)                                                      
    condition.put("gender", "女");                                     
    // 按条件查询学生记录                                                      
    List<Student> students = studentMapper.findByCondition(condition);
    // 判断是否查询到满足条件的记录                                                 
    if (students.size() > 0) {                                        
        // 使用列表的遍历算子输出全部记录                                            
        students.forEach(student -> System.out.println(student));     
    } else {                                                          
        // 提示用户没有找到满足条件的记录                                            
        System.out.println("遗憾,没找到满足条件的记录~");                         
    }                                                                 
}                                                                     

运行测试方法testFindByCondition(),查看结果
在这里插入图片描述

2,查询19岁的女生

修改测试方法里的查询条件
在这里插入图片描述运行测试方法testFindByCondition(),查看结果
在这里插入图片描述

3,查询姓吴的19岁女生

修改测试方法里的查询条件
在这里插入图片描述

运行测试方法testFindByCondition(),查看结果
在这里插入图片描述

4,查找姓张的19岁女生

修改测试方法里的查询条件
在这里插入图片描述

运行测试方法testFindByCondition(),查看结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/428964.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

kaggle数据集下载

一、首先需要安装kaggle winR→cmd→pip install kaggle 问题&#xff1a;安装到哪来&#xff1f;都说在c盘。可是我找不到&#xff0c;可能因为之前担心c负荷更改路径了&#xff0c;再安装一下发现已经安装成功&#xff0c;且给出了安装路径。 二、注册 (1387条消息) 最新k…

VS Code 最新 Java 编码体验更新

大家好&#xff0c;欢迎来到我们的三月更新&#xff01;我们将为您带来一系列基础编码体验的改进&#xff0c;例如运行 Java 程序的更流畅体验、AWT 项目相关的代码补全优化以及更好的 Spring Boot 项目与 Azure 的集成&#xff0c;让我们开始吧&#xff01; 运行 Java 程序的用…

开启虚拟机出现报错:“此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态”

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录报错原因解决方式&#xff08;这里以联…

Python办公自动化之PostgreSQL篇1——PostgreSQL安装(保姆级教程)

我们在办公中会经常用到数据量比较大的表&#xff0c;打开、保存都会相对比较卡顿。那么我们可以安装一个PostgreSQL&#xff0c;然后利用Python进行读取&#xff0c;或者再写入。最后可以将最终的数据表进行导出。 肯定会有小伙伴问&#xff0c;那么利用MySQL不行吗&#xff…

wps宏编辑器-js宏录制运行

WPS开放平台如下描述JS宏录制和运行。 WPS宏编辑器提供了一个自动生成JS代码的功能&#xff0c;即录制宏。录制宏功能通过宏录制器捕捉用户与WPS交互的操作&#xff0c;并以JS代码的形式记录下来&#xff0c;整个过程是自动的&#xff0c;不需要用户写代码。在实际的WPS二次开发…

D. Odd-Even Subsequence(二分 + 奇偶下标的取法)

Problem - D - Codeforces Ashish有一个大小为n的数组a。A的子序列被定义为一个序列&#xff0c;该序列可以通过删除一些元素(可能是不删除)从A中获得&#xff0c;而不改变剩余元素的顺序。考虑a的子序列s。他将s的代价定义为以下两者之间的最小值:在s的奇数指数下所有元素中的…

SAR ADC系列27:实践讲解1

Latch比较器Noise仿真 比较器后面加RS触发器&#xff0c;当比较器复位时&#xff0c;OUTP和OUTN输出为11&#xff0c;RS触发器锁存&#xff1b;当比较器比较时&#xff0c;OUTP和OUTN输出一正一负&#xff0c;RS触发器相当于反相器。 做法&#xff1a;改变Vin的值&#xff0c;…

SAM(Segment Anything Model)让CV走到尽头?学CV的研究生还能正常毕业吗?怎么使用SAM?

SAM&#xff08;Segment Anything Model&#xff09;让CV走到尽头&#xff1f;学CV的研究生还能正常毕业吗&#xff1f;怎么使用SAM&#xff1f; 1. 引言 最近无论是在B站、知乎还是论坛、微博&#xff0c;都看了一些有关SAM的讨论。这个号称“CV界ChatGPT”的模型从出生起就…

x86中断基础

x86中断基础 原文&#xff1a;Basic x86 interrupts 作者&#xff1a;Alex Dzyoba 原文发表日期&#xff1a;2016年4月2日 在我的关于多重引导内核的文章中&#xff0c;我们看到了如何加载内核、打印文本&#xff0c;然后停止。然而要让操作系统可用&#xff0c;需要支持键…

[chapter 26][PyTorch][MNIST 测试实战】

前言 这里面结合手写数字识别的例子&#xff0c;讲解一下训练时候注意点 目录 训练问题解决方案参考代码一 训练问题 训练的时候,我们的数据集分为Train Data 和 validation Data。 随着训练的epoch次数增加&#xff0c;我们发现Train Data 上精度 先逐步增加&#xff0c;但…

协议篇之以太网ARP协议

协议篇之以太网ARP协议一、什么是ARP协议&#xff1f;作用是什么&#xff1f;二、ARP请求与ARP应答三、以太网ARP数据报格式四、总结一、什么是ARP协议&#xff1f;作用是什么&#xff1f; ARP&#xff08;Address Resolution Protocol&#xff09;&#xff0c;地址解析协议&am…

GUID分区与MBR分区有什么区别? 操作系统知识

GUID分区与MBR分区有什么区别&#xff1f; 操作系统知识 1、MBR分区表类型的磁盘 主引导记录&#xff08;Master Boot Record&#xff0c;缩写&#xff1a;MBR&#xff09;&#xff0c;又叫做主引导扇区&#xff0c;它仅仅包含一个64个字节的硬盘分区表。由于每个分区信息需要…

以ChatGPT为例进行自然语言处理学习——入门自然语言处理

⭐️我叫忆_恒心&#xff0c;一名喜欢书写博客的在读研究生&#x1f468;‍&#x1f393;。 如果觉得本文能帮到您&#xff0c;麻烦点个赞&#x1f44d;呗&#xff01; 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧&#xff0c;喜欢的小伙伴给个三…

Python办公自动化之PostgreSQL篇2——利用Python连接PostgreSQL并读取一张表

在上一篇我们已经安装好了最新的PostgreSQL&#xff0c;以及最方便的可视化工具&#xff0c;Navicat 如果错过的小伙伴&#xff0c;可以去上一篇查看&#xff1a;点我查看 今天我们来用Python连接一下PostgreSQL&#xff0c;然后准备一张测试表&#xff0c;导入PostgreSQL&am…

elasticsearch 拼音分词器 自动补全。

elasticsearch 拼音分词器 & 自动补全。 文章目录elasticsearch 拼音分词器 & 自动补全。2. 自动补全。2.1. 拼音分词器。2.2. 自定义分词器。2.3. 自动补全查询。2.4. 实现酒店搜索框自动补全。2.4.1. 修改酒店映射结构。2.4.2. 修改 HotelDoc 实体。2.4.3. 重新导入。…

Shader Graph10-Min, Max, Clamp, Saturate节点

打开UE&#xff0c;新建Material叫做DemoMinMaxClamp&#xff0c;双击打开 一、Minimum节点&#xff0c;两个值比较取较小的。 Min的含义是&#xff0c;红框的0.5为参数B的值&#xff0c;1.0为白色圆形的值&#xff0c;下面的0.5为背景颜色值。图片中每个像素值与0.5进行比较&a…

java基于mvc的停车收费系统mysql

系统需要解决的主要问题有&#xff1a; (1)车位管理模块 添加车位、查看车位状态、车位信息查询等。 (2)客户信息管理模块 客户基本信息录入、客户信息查询等。 (3)卡业务办理 添加卡信息、查余额查询、卡充值。 (4)车辆信息管理模块 车牌信息录入等。 (5)收费管理 可以调整相应…

【Java 数据结构】集合类 (精华篇)

&#x1f389;&#x1f389;&#x1f389;点进来你就是我的人了 博主主页&#xff1a;&#x1f648;&#x1f648;&#x1f648;戳一戳,欢迎大佬指点!人生格言&#xff1a;当你的才华撑不起你的野心的时候,你就应该静下心来学习! 欢迎志同道合的朋友一起加油喔&#x1f9be;&am…

一本通 3.4.3 图的连通性

1383&#xff1a;刻录光盘(cdrom) 【题目描述】 在FJOI2010夏令营快要结束的时候&#xff0c;很多营员提出来要把整个夏令营期间的资料刻录成一张光盘给大家&#xff0c;以便大家回去后继续学习。组委会觉得这个主意不错&#xff01;可是组委会一时没有足够的空光盘&#xff…

数学术语——指数的发展历程

指数的发展历程 指数(exponents)的历史可以追溯到许多世纪以前&#xff0c;欧几里德(Euclid)被认为是第一个已知的指数用法。他用“幂(power)”这个词来表示我们今天所知的一个数自乘的次数(注&#xff1a;底数连同其右上角的指数一起的整体形式称为“幂”)。古希腊数学家使用…