2.4 利用MyBatis实现条件查询

news2025/7/19 1:56:24

一、打开MyBatisDemo项目

在这里插入图片描述

二、对学生表实现条件查询

1、创建学生映射器配置文件

在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.hf.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>

2、配置学生映射器文件

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

3、创建学生映射器接口

在net.hf.mybatis.mapper包里创建学生映射器接口 - StudentMapper
在这里插入图片描述

package net.hf.mybatis.mapper;

import net.hf.mybatis.bean.Student;

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

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

对应关系图
![在这里插入图片描述](https://img-blog.csdnimg.cn/e39cfeb336824beda84a6bd008397ed1.png

4、测试学生映射器接口

在test/java的net.hf.mybatis.mapper包里创建TestStudentMapper类

在这里插入图片描述

package net.hf.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;

/**
 * 功能:测试学生映射器接口
 * 作者:hf
 * 日期:2023年04月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();
    }
}

任务1、查询女生记录

添加测试方法testFindByCondition()
在这里插入图片描述

@Test // 测试按条件查询学生记录
    public void tstFindByCondition() {
        // 创建条件对象
        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/619295.html

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

相关文章

2023年十大最佳自动化测试工具(建议收藏)

Best Automation Testing Tools for 2023 对更快交付高质量软件&#xff08;或"快速质量"&#xff09;的需求要求组织以敏捷&#xff0c;持续集成&#xff08;CI&#xff09;和DevOps方法论来寻找解决方案。测试自动化是这些方面的重要组成部分。最新的《 2018-2019…

2023接口自动化测试,完整入门篇(超详细~)

一、自动化测试 众所周知&#xff0c;自动化测试已经成为软件项目中不可或缺的测试方法。基于用户交互界面&#xff08;GUI&#xff09;的自动化测试方法具有模拟用户行为和过程可视化的特点&#xff0c;因此受到了广大入门自动化人士的喜爱。诸如&#xff1a;QTP、Selenium等…

问题记录:K8s中安装calico,calico反复重启,原因:版本未匹配

问题描述 K8s版本1.23.6 calico-node-反复重启&#xff0c;READY状态一直为0&#xff0c;STATUS为CrashLoopBackOff&#xff0c; 查看节点日志 #calico-node-xxx 对应pod名称 kubectl logs calico-node-xxxx -n kube-system 没有错误&#xff0c;只有info信息 但是一直反…

代码随想录算法训练营15期 Day 14 | 理论基础、递归遍历、迭代遍历、统一迭代

理论基础 二叉树的种类 需要了解 二叉树的种类&#xff0c;存储方式&#xff0c;遍历方式 以及二叉树的定义 满二叉树 满二叉树&#xff1a;如果一棵二叉树只有度为0的结点和度为2的结点&#xff0c;并且度为0的结点在同一层上&#xff0c;则这棵二叉树为满二叉树。 完全二叉树…

十年寒冰,IT老鸟告诉你如何快速入门一个编程语言 #如何系统学习一门it技术#

我个人算是学了非常多的各类编程语言了&#xff0c;从最早的.NET到后面的PHP、数据库MySQL、Redis、前端&#xff08;HTML、CSS、JS&#xff09;、公众号开发、再到后面因为工作的需要&#xff0c;学习前端工程化、NodeJs、Vue、React、以及个人学习爬虫的时候把Python也学了&a…

复合材料压缩模拟探究:选取应变分量的区别,与实验结果的对比分析

复合材料压缩模拟探究&#xff1a;选取应变分量的区别&#xff0c;与实验结果的对比分析 一、模型介绍 6641的试验件模拟。加强片是采用continuum shell&#xff0c;试验件采用每层一个单元&#xff0c;并且采用一层一个材料&#xff0c;并定义方向。 试验件材料为X850材料&a…

做接口测试必须要弄明白的7个问题

1. 为什么要进行接口测试 接口测试是软件测试中必不可少的环节之一。在软件开发过程中&#xff0c;不同的模块之间需要通过接口进行交互&#xff0c;因此对接口进行测试可以有效地检测模块间的交互是否正常&#xff0c;从而保证整个系统的质量和稳定性。 2. 接口测试的作用 接…

跨境必看!FP独立站必备安全支付方式

收款对于做F牌独立站的卖家来说至关重要&#xff0c;收款的方式有很多种&#xff0c;卖家在选择收款方式时需要关注什么&#xff1f;FP独立站必备的支付收款方式又有哪些&#xff1f;卖家又该如何选择呢&#xff1f; 一、在选择支付方式时要注意什么&#xff1f;1.安全合规&…

RPC、HTTP、DSF、Dubbo,每个都眼熟,就是不知道有什么联系?

一、HTTP 和 RPC 首先&#xff0c;http 与 rpc 有什么区别这个问题不太严谨&#xff0c;因为这俩就不是一个层级的东西。 HTTP 这个大家太熟悉了吧&#xff1f;日常接触最多的恐怕就是各种http协议的接口了。 没错&#xff0c;http它是一个协议。 其他在这里就不打算铺开了…

Nginx+Tomcat实现负载均衡、动静分离

目录 一、Nginx负载均衡实现原理 1.Nginx 实现负载均衡是通过反向代理实现 2、Nginx配置反向代理主要参数 3、动静分离原理 4、Nginx静态处理优势 5、并发量和吞吐量计算 二&#xff1a;7层反向代理 1、环境准备 ​2、配置Nginx Server 3、tomcat1 和tomcat2配置 4、 搭…

Jmeter性能测试 (入门)

Jmeter是一款优秀的开源测试工具&#xff0c; 是每个资深测试工程师&#xff0c;必须掌握的测试工具&#xff0c;熟练使用Jmeter能大大提高工作效率。 熟练使用Jmeter后&#xff0c; 能用Jmeter搞定的事情&#xff0c;你就不会使用LoadRunner了。 本文将通过一个实际的测试例…

浪涌保护器的选型和原理(SPD)

SPD是Surge Protective Device的简写&#xff0c;中文名称有&#xff1a;电涌保护器、浪涌保护器、防雷栅、雷电浪涌防护器、防雷器等。 SPD浪涌保护器其内部包含至少一个非线性元件。当电涌出现时&#xff0c;SPD能在极短的时间导通&#xff0c;将电流泄放到地&#xff0c;其…

如何有效的提升餐饮油烟的监控力度

摘要&#xff1a;现阶段餐饮行业发展十分迅速&#xff0c;为了更好地提升餐饮油烟的监控力度&#xff0c;强化餐饮业油烟在线监控系统的设计成为重中之重。油烟在线监控系统的强化可以降低油烟的排放量&#xff0c;同时在排烟的过程中&#xff0c;还可搜集到更多的数据和信息。…

用“Function“替代“eval“进行动态代码生成

一、背景 在JavaScript中我们有时会遇到这么一个场景&#xff1a;“函数可能要根据不可预知的条件执行代码”。比如说计算器中的加减乘除&#xff0c;用户无法直接将操作符"、-、*、/"作为参数传入函数中&#xff0c;因此我们一般会采取字符串形式的操作符&#xff0…

asp.net高校食谱管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net高校食谱管理系统 是一套完善的web设计管理系统&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为vs2010&#xff0c;数据库为sqlserver2008&#xff0c;使用c#语言 开发 asp.net高校食谱管理系统VS开发s…

Spring - Bean的实例化流程及生命周期

文章目录 Bean的实例化流程及生命周期一、Bean实例化基本流程1.1 Bean实例化基本流程1.2 总结 二、 Bean 后处理器2.1 介绍2.2 BeanFactoryPostProcessor Bean工厂后处理器2.2.1 入门2.2.2 Bean工厂后处理器注册BeanDefinition2.2.3 BeanDefinitionRegistryPostProcessor专门注…

2023年软件测试工程师如何提升?测试工程师破局进阶...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 熟练掌握基本的测…

Java反编译工具Jad的下载与使用示例

场景 Java反编译工具-JD-GUI下载以及使用&#xff1a; Java反编译工具-JD-GUI下载以及使用_霸道流氓气质的博客-CSDN博客 上面讲过Java反编译工具JD-GUI的使用&#xff0c;如果使用jad并通过命令如何实现反编译。 为了验证Java开发手册中为什么不推荐使用进行字符串拼接&…

基于轻量级卷积神经网络模型开发构建中国象棋棋子识别系统

关于棋类相关的AI类型的项目在我之前的文章中也有过不少的实践开发经历&#xff0c;这里就不再赘述了&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《YOLOV5融合SE注意力机制和SwinTransformer模块开发实践的中国象棋检测识别分析系统》 《基于轻量级YOLO开发构建…

【IP技术】什么是IP地址?

一、IP地址概念 IP地址是一个32位的二进制数&#xff0c;它由网络ID和主机ID两部份组成&#xff0c;用来在网络中唯一的标识的一台计算机。网络ID用来标识计算机所处的网段&#xff1b;主 机ID用来标识计算机在网段中的位置。IP地址通常用4组3位十进制数表示&#xff0c;中间用…