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

2023-12-22 20:01

本文主要是介绍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;@Beforepublic void init() throws IOException {// mybatis 配置文件的文件名String resource = "mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);}@Testpublic void testFindAll() throws IOException {//获得SqlSessionSqlSession session = sqlSessionFactory.openSession();StudentMapper mapper = session.getMapper(StudentMapper.class);List<Student> list = mapper.findAll();list.forEach((e)->System.out.println(e));}@Testpublic void testFindById(){//获得SqlSessionSqlSession 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>

编写测试类

 @Testpublic void testFindBy() throws IOException {//获得SqlSessionSqlSession 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>

 @Testpublic void testFind() throws IOException {//获得SqlSessionSqlSession 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));}

 

总结:

使用对象类型作为参数

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

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

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

这篇关于Mybatis3系列课程8-带参数查询的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/525281

相关文章

MySQL中like模糊查询的优化方案

《MySQL中like模糊查询的优化方案》在MySQL中,like模糊查询是一种常用的查询方式,但在某些情况下可能会导致性能问题,本文将介绍八种优化MySQL中like模糊查询的方法,需要的朋友可以参... 目录1. 避免以通配符开头的查询2. 使用全文索引(Full-text Index)3. 使用前缀索

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

基于Redis实现附近商铺查询功能

《基于Redis实现附近商铺查询功能》:本文主要介绍基于Redis实现-附近商铺查询功能,这个功能将使用到Redis中的GEO这种数据结构来实现,需要的朋友可以参考下... 目录基于Redis实现-附近查询1.GEO相关命令2.使用GEO来实现以下功能3.使用Java实现简China编程单的附近商铺查询4.Red

mysql递归查询语法WITH RECURSIVE的使用

《mysql递归查询语法WITHRECURSIVE的使用》本文主要介绍了mysql递归查询语法WITHRECURSIVE的使用,WITHRECURSIVE用于执行递归查询,特别适合处理层级结构或递归... 目录基本语法结构:关键部分解析:递归查询的工作流程:示例:员工与经理的层级关系解释:示例:树形结构的数

SQL常用操作精华之复制表、跨库查询、删除重复数据

《SQL常用操作精华之复制表、跨库查询、删除重复数据》:本文主要介绍SQL常用操作精华之复制表、跨库查询、删除重复数据,这些SQL操作涵盖了数据库开发中最常用的技术点,包括表操作、数据查询、数据管... 目录SQL常用操作精华总结表结构与数据操作高级查询技巧SQL常用操作精华总结表结构与数据操作复制表结

MySQL 复合查询案例详解

《MySQL复合查询案例详解》:本文主要介绍MySQL复合查询案例详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录基本查询回顾多表笛卡尔积子查询与where子查询多行子查询多列子查询子查询与from总结合并查询(不太重要)union基本查询回顾查询

MySQL复合查询从基础到多表关联与高级技巧全解析

《MySQL复合查询从基础到多表关联与高级技巧全解析》本文主要讲解了在MySQL中的复合查询,下面是关于本文章所需要数据的建表语句,感兴趣的朋友跟随小编一起看看吧... 目录前言:1.基本查询回顾:1.1.查询工资高于500或岗位为MANAGER的雇员,同时还要满足他们的姓名首字母为大写的J1.2.按照部门

史上最全nginx详细参数配置

《史上最全nginx详细参数配置》Nginx是一个轻量级高性能的HTTP和反向代理服务器,同时也是一个通用代理服务器(TCP/UDP/IMAP/POP3/SMTP),最初由俄罗斯人IgorSyso... 目录基本命令默认配置搭建站点根据文件类型设置过期时间禁止文件缓存防盗链静态文件压缩指定定错误页面跨域问题

MyBatis模糊查询报错:ParserException: not supported.pos 问题解决

《MyBatis模糊查询报错:ParserException:notsupported.pos问题解决》本文主要介绍了MyBatis模糊查询报错:ParserException:notsuppo... 目录问题描述问题根源错误SQL解析逻辑深层原因分析三种解决方案方案一:使用CONCAT函数(推荐)方案二:

MySQL 中的 JSON 查询案例详解

《MySQL中的JSON查询案例详解》:本文主要介绍MySQL的JSON查询的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录mysql 的 jsON 路径格式基本结构路径组件详解特殊语法元素实际示例简单路径复杂路径简写操作符注意MySQL 的 J