Mybatis3系列课程8-带参数查询

简介

上节课内容中讲解了查询全部, 不需要带条件查, 这节我们讲讲 带条件查询

目标 

1. 带一个条件查询-基本数据类型

2.带两个条件查询-连个基本数据类型

3.带一个对象类型查询 

为了实现目标, 我们要实现 按照主键 查询某个学生信息, 按照姓名和年级编号查询学生信息

按照学生部分信息查询完整信息

实现步骤 

按照主键查询学生信息

主键是唯一的,如果按照主键查, 最多查询到一位同学信息

修改 StudentMapper.java 增加以下代码

  /**
     * 按照主键查询学生信息
     * @param id  学生编号
     * @return   学生信息
     */
    Student findById(int id);

修改StudentMapper.xml增加 select

 <!--按照主键查询-->
    <select id="findById" parameterType="int" resultType="student">
        select * from student where sid=#{id}
    </select>

一个参数查询的说明:

   select 标签的id 属性值         对应 接口中 方法的名字

                      parameterType 对应 接口中 参数的类型

                     resultType         对应 接口中的返回值类型

一个参数的查询, 在mybatis中 可以使用 #{任意字符} 来获取,

但 为了与接口一致, 一般使用接口中参数的名字来代替  即 #{参数名}

测试 代码 

import entity.Student;
import mapper.StudentMapper;
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.Before;
import org.junit.Test;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

public class TestStudent {

    private  SqlSessionFactory sqlSessionFactory;
    @Before
    public void init() throws IOException {
        // mybatis 配置文件的文件名
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
         sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    @Test
    public void testFindAll() throws IOException {
        //获得SqlSession
        SqlSession session = sqlSessionFactory.openSession();
        StudentMapper mapper = session.getMapper(StudentMapper.class);
        List<Student> list = mapper.findAll();
        list.forEach((e)->System.out.println(e));
    }

    @Test
    public void testFindById(){
        //获得SqlSession
        SqlSession session = sqlSessionFactory.openSession();
        StudentMapper mapper = session.getMapper(StudentMapper.class);
        Student student = mapper.findById(2);
        System.out.println(student);
    }
}

 运行结果

按照姓名和年级编号查询学生信息

按照姓名和年级编号查, 可以查询多个学生信息, (一个年级中可以出现同名学生)

修改StudentMapper.java 增加

/**
     * 按照 姓名及年级编号查询学生信息
     * @param name  姓名
     * @param gid  年级编号
     * @return   学生信息
     */
    List<Student> findBy(String name,int gid);

修改StudentMapper.xml 增加 select 标签

 <!--按照姓名及年级编号查询-->
    <select id="findBy"  resultType="student">
        select * from student where gid=#{param2} and sname=#{param1}
    </select>

编写测试类

 @Test
    public void testFindBy() throws IOException {
        //获得SqlSession
        SqlSession session = sqlSessionFactory.openSession();
        StudentMapper mapper = session.getMapper(StudentMapper.class);
        List<Student> list = mapper.findBy("王凯",7);
        list.forEach((e)->System.out.println(e));
    }

结果如下

 使用 arg0 测试

两个参数总结:

对应 select标签id的值         对应  接口中   方法名

                         不需要配置 paramterType

                        通过 #{arg0}或#{param1} 引用获得第一个参数

                         通过 #{arg1}或#{param2} 引用获得第二个参数, 以此类推

按照多条件查询学生信息

多条件查询 一般推荐 参数使用 实体类本身

修改StudentMapper.java 增加

 /**
     * 多条件查询
     * @param student  多条件
     * @return
     */
    List<Student> find(Student student);

修改StudentMapper.xml 增加

    <!--按照多条件查询-->
    <select id="find"  resultType="student" parameterType="student">
        select * from student where gid=#{gid} and sname=#{sname} and phone=#{phone}
    </select>

 @Test
    public void testFind() throws IOException {
        //获得SqlSession
        SqlSession session = sqlSessionFactory.openSession();
        StudentMapper mapper = session.getMapper(StudentMapper.class);
        Student stu = new Student();
        stu.setPhone("13852615963");
        stu.setSname("王凯");
        stu.setGid(7);
        List<Student> list = mapper.find(stu);
        list.forEach((e)->System.out.println(e));
    }

 

总结:

使用对象类型作为参数

         #{属性名}   ,  要注意  属性名区分大小写

本文只是为了 讲解 接口中方法参数的写法,

例如像 电话,姓名应该用模糊查询写法, 本文目前先不涉及,后续更新模糊查询 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis中延迟加载,全局和局部的开启使用与关闭

文章目录 MyBatis中延迟加载&#xff0c;全局和局部的开启使用与关闭1、问题提出2、延迟加载和立即加载延迟加载立即加载 3、三种对应的表关系中的加载4、打开全局延迟加载&#xff08;实现一对一的延迟加载&#xff09;5、实现一对多的延迟加载&#xff08;将上面设置的全局延…

渲染控制之条件渲染

目录 1、使用规则 2、更新机制 3、使用if进行条件渲染 4、if ... else ...语句和子组件状态 5、嵌套if语句 ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态&#xff0c;使用if、else和else if渲染对应状态下的UI内容。 1、使用规则 支持if、else和else if语句…

pip 常用指令 pip list 命令用法介绍

&#x1f4d1;pip 常用命令归类整理 pip list 是一个用于列出已安装的 Python 包的命令。这个命令会显示出所有已安装的包&#xff0c;以及它们的版本号。 pip list 命令有以下参数 -o, --outdated&#xff1a;列出所有过时的包&#xff0c;即有新版本可用的包。-u, --uptod…

DPDK单步跟踪(3)-如何利用visual studio 2019和visual gdb来单步调试dpdk

准备工作 因为时间的关系&#xff0c;我想到哪说到哪&#xff0c;可能没那么高的完成度。 但其实有心的人&#xff0c;看到这个标题&#xff0c;就关了本文自己能做了。 why和how to build debug version DPDK,见前两篇。这里我们准备开始。 首先&#xff0c;你有一台linux机…

什么是“人机协同”机器学习?

“人机协同”&#xff08;HITL&#xff09;是人工智能的一个分支&#xff0c;它同时利用人类智能和机器智能来创建机器学习模型。在传统的“人机协同”方法中&#xff0c;人们会参与一个良性循环&#xff0c;在其中训练、调整和测试特定算法。通常&#xff0c;它的工作方式如下…

《软件方法(下)》8.2.4 类和属性的命名

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 8.2 建模步骤C-1 识别类和属性 8.2.4 类和属性的命名 8.2.4.2 关于DDD话语中的“通用语言” DDD&#xff08;领域驱动设计&#xff09;话语中有“通用语言&#xff08;Ubiquitous L…

【JAVA面试题】什么是代码单元?什么是码点?

&#x1f34e;个人博客&#xff1a;个人主页 &#x1f3c6;个人专栏&#xff1a; JAVA ⛳️ 功不唐捐&#xff0c;玉汝于成 目录 目录 前言 思路 代码单元&#xff08;Code Unit&#xff09;&#xff1a; 码点&#xff08;Code Point&#xff09;&#xff1a; 作…

vscode | python | remote-SSH | Debug 配置 + CLIP4Clip实验记录

安装Extension 本地安装Remote-SSH、python 远程服务器上安装Python 难点&#xff1a;主机和远程服务器上安装Python扩展失败&#xff0c;可能是网络、代理等原因导致解决方法&#xff1a; 主机在官方网站下载Python扩展&#xff1a;https://marketplace.visualstudio.com/it…

RobotFramework 自动化测试实战进阶篇

工具 Robotframework, 采用PO设计模式 PO模型 PO模型即Page Objects&#xff0c;直译意思就是“页面对象”&#xff0c;通俗的讲就是把一个页面&#xff0c;或者说把一个页面的某个区域当做一个对象&#xff0c;通过封装这个对象可以实现调用。 PO设计的好处 代码复用&…

【沁恒蓝牙mesh】CH58x DataFlash 详解

本文主要介绍了 沁恒蓝牙芯片 CH58x 的 DataFlash 分区以及读写操作以及原理 &#x1f4cb; 个人简介 &#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是喜欢记录零碎知识点的小菜鸟。&#x1f60e;&#x1f4dd; 个人主页&#xff1a;欢迎访问我的 Ethernet_Comm 博…

P3375 【模板】KMP

【模板】KMP 题目描述 给出两个字符串 s 1 s_1 s1​ 和 s 2 s_2 s2​&#xff0c;若 s 1 s_1 s1​ 的区间 [ l , r ] [l, r] [l,r] 子串与 s 2 s_2 s2​ 完全相同&#xff0c;则称 s 2 s_2 s2​ 在 s 1 s_1 s1​ 中出现了&#xff0c;其出现位置为 l l l。 现在请你求…

链表常见题型(1)

1.反转链表 1.1反转链表 如果我们想要反转链表&#xff0c;那应该有head的next指针指向空&#xff0c;其余结点的next指针反过来&#xff0c;指向它的上一个结点&#xff0c;那我们在执行该操作的时候就需要定义变量cur(current)表示我们当前遍历到的结点&#xff0c;变量pre(…

Linux应用程序管理(rpm yum 源码安装)

一.Linux应用程序基础 当我们主机安装Linux操作系统时候&#xff0c;也会同时安装一些软件或网络服务等等&#xff0c;但是随着系统一起安装的软件包毕竟他是少数的&#xff0c;能够实现的功能也是有限的&#xff0c;如果需要实现更丰富的功能&#xff0c;那就需要安装应用程序…

vue2 el-table 行按钮过多,按钮超出指定个数,显示为下拉菜单(简单的自定义组件)01

vue2 el-table 行按钮过多&#xff0c;按钮超出指定个数&#xff0c;显示为下拉菜单&#xff08;简单的自定义组件01&#xff09; 上图 优化前 按钮太多不美观 优化后 默认展示三个按钮 超出显示下拉菜单 上代码 封装按钮组件 OperateBtn.vue // OperateBtn.vue<templ…

【Linux】归档和备份

简介 计算机系统管理员的一个主要任务就是保护系统的数据安全&#xff0c;其中一种方法是通过时时备份系 统文件&#xff0c;来保护数据。即使你不是一名系统管理员&#xff0c;也经常会处理大量文件&#xff0c;在这里我们看看常见的管理文件集合命令。 压缩命令&#xff1a…

2016年第五届数学建模国际赛小美赛A题臭氧消耗预测解题全过程文档及程序

2016年第五届数学建模国际赛小美赛 A题 臭氧消耗预测 原题再现&#xff1a; 臭氧消耗包括自1970年代后期以来观察到的若干现象&#xff1a;地球平流层&#xff08;臭氧层&#xff09;臭氧总量稳步下降&#xff0c;以及地球极地附近平流层臭氧&#xff08;称为臭氧空洞&#x…

十.MySQL数据类型精讲(二)

MySQL数据类型精讲 6.日期与时间类型6.1YEAR类型6.2DATE类型6.3TIME类型6.4DATETIME类型6.5TIMESTAMP类型6.6开发经验 7.文本字符串类型7.1CHAR与VARCHAR类型7.2TEXT类型 8.ENUM类型9.SET类型10.二进制字符串类型11.JSON类型12.空间类型13.小结及选择建议 6.日期与时间类型 日…

Gartner2023数据库魔力象限发布 阿里云依旧领导者 腾讯退出 EDB/Yugabyte进入

这是一个跨越数年的系列&#xff0c;历史文章参考&#xff1a; * 数据库魔力象限2022&#xff1a;阿里领先、腾讯再次进入 * 2021 藏在魔力象限中的数据库江湖 * Gartner云计算魔力象限2018 概述 Gartner云数据库魔力象限&#xff08;后简称“象限”或“MQ”&#xff09;一…

【数据结构之单链表】

数据结构学习笔记---003 数据结构之单链表1、什么是单链表?1.1、概念及结构 2、单链表接口的实现2.1、单链表的SList.h2.1.1、定义单链表的结点存储结构2.1.2、声明单链表各个接口的函数 2.2、单链表的SList.c2.2.1、遍历打印链表2.2.2、销毁单链表2.2.3、打印单链表元素2.2.4…

图数据库NebulaGraph学习

1.图空间(Space)操作 1.1创建图空间&#xff0c;指定vid_type为整形 CREATE SPACE play_space (partition_num 10, replica_factor 1, vid_type INT64) COMMENT "运动员库表空间"; 1.2创建图空间&#xff0c;指定vid_type为字符串 CREATE SPACE play_space (…