Mybatis的综合案例-学生信息查询系统 用于校验是否真正学习掌握了动态SQL
Mybatis的综合案例-学生信息查询系统
需求一:当用户输入的学生姓名不为空,则只根据学生信息进行查询;
当用户输入的学生姓名为空,且专业不为空,那么就根据学生专业进行学生的查询
需求二:查询所有id值小于5的学生信息
1.搭建项目环境:
往pom中写入依赖引入,引入我们所需要的各个架包:Mybatis3.5.2、Mysql8.0、Junit4.12、log4j1.2.17、(若是无法使用maven方式导入的话,我会带上项目需要的所有离线jar架包,可以自行导入到自己项目的lib下进行安装)
<!--pom.xml--><dependencies><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.2</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.11</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><!-- <scope>test</scope>--><scope>compile</scope></dependency><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies><build><resources><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build>
2.数据库准备
我们这次的项目是学生信息查询系统,因此我们需要准备名为:studentinfoselectsystem的数据库(也可缩写为studentiss,命名规则:项目名称要全小写),其中的表为:dm_student
SQL语句如下(若是不能使用,也可以在文章头下载数据库文件sql):
Create table dm_student(
id int(32) PRIMARY KEY AUTO_INCREMENT,
name varchar(50),
major varchar(50),
sno varchar(16)
);insert into dm_student VALUES('1','Stevedash','数学','100');
insert into dm_student VALUES('2','Steve','语文','100');
insert into dm_student VALUES('3','Kdash','英语','100');
insert into dm_student VALUES('4','wgd','数学','80');
insert into dm_student VALUES('5','dxm','语文','90');
insert into dm_student VALUES('6','god','英语','60');
3.配置文件准备
准备好所有的配置文件:mybatis-config.xml(mybatis的核心配置文件)、db.properties(jdbc链接数据库配置文件)、log4j.propertie(log4j日志导出配置文件)

具体代码如下:
mybatis-config.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration><!-- 环境配置 --><!-- 加载类路径下的属性文件 --><properties resource="db.properties"/><!-- 设置别名为pojo--><typeAliases><package name="pojo"/></typeAliases><environments default="development"><environment id="development"><transactionManager type="JDBC"/><!-- 数据库连接相关配置 ,db.properties文件中的内容--><dataSource type="POOLED"><property name="driver" value="${driver}"/><property name="url" value="${url}"/><property name="username" value="${username}"/><property name="password" value="${password}"/></dataSource></environment></environments><!-- mapping文件路径配置 --><mappers><mapper resource="mapper/StudentMapper.xml"/></mappers>
</configuration>
db.properties
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/studentinfoselectsystem?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
username=root
password=root
log4j.propertie
###\u6839logger\u8BBE\u7F6E###
log4j.rootLogger = debug,console,file###
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.Threshold = DEBUG
log4j.logger.java.sql.Statement=debug
log4j.appender.console.layout.ConversionPattern = [%p] %d %c - %m%n###
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
###
log4j.appender.file.File = D:/log/web.log
log4j.appender.file.Append = true
log4j.appender.file.Threshold = warn
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = [%p] %d %c - %m%n
4.编写pojo类
pojo(普通java对象),创建出持久化类Student与数据库dm_student进行映射关联,要在类中声明好变量和数据库表中的字段一一对应,并且生成getter和setter方法。
Student.java具体代码如下:
package pojo;public class Student {private int id;//对应数据库字段idprivate String name;//姓名 对应数据库字段nameprivate String major;//专业 对应数据库字段majorprivate String sno;学号 对应数据库字段sno//生成getter和setter方法public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getMajor() {return major;}public void setMajor(String major) {this.major = major;}public String getSno() {return sno;}public void setSno(String sno) {this.sno = sno;}/*重写toString()方法,让其变成输出我们想要的信息,方便我们检查测试功能需求是否满足*/@Overridepublic String toString(){return "Student{"+"id="+id+",name="+name+",major="+major+",sno="+sno+"}";}
}
5.编写StudentMapper.xml
在resources下新建一个package:mapper,在mapper 包下新建一个StudentMapper.xml。
①StudentMapper.xml具体代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="mapper.StudentMapper"><select id="selectStudentByNameOrMajor" parameterType="Student" resultType="Student">select * from dm_student where 1=1<choose><when test="name!=null and name!=''">and name=#{name}</when><when test="major!=null and major!=''">and major=#{major}</when><otherwise>and sno is not null</otherwise></choose></select><select id="selectAllIdSmallThanNumber" parameterType="int" resultType="Student">SELECT * FROM dm_student WHERE id IN<foreach item="id" collection="list" open="(" separator="," close=")">#{id}</foreach></select><insert id="addStudent" parameterType="Student">insert into dm_student(id,name,marjor,sno) values(#{id},#{name},#{marjor},#{sno})</insert><delete id="deleteStudent" parameterType="Student">delete from dm_student where id = #{id}</delete><select id="getStudentByList" resultType="Student">select * from dm_student where id in<foreach collection="list" item="id" open="(" separator="," close=")">#{id}</foreach></select><select id="selectByIdLessThan" parameterType="int" resultType="Student">SELECT * FROM dm_student WHERE id < #{id}</select></mapper>
②编写测试类StudentTest.java
package Test;import org.apache.ibatis.session.SqlSession;
import org.apache.log4j.Logger;
import org.junit.jupiter.api.Test;
import pojo.Student;
import utils.MyBatisUtil;import java.util.ArrayList;
import java.util.List;class StudentTest {private Logger logger= Logger.getLogger(StudentTest.class);/*当用户输入的学生姓名不为空,则只根据学生信息进行查询;当用户输入的学生姓名为空,且专业不为空,那么就根据学生专业进行学生的查询*/@Testvoid selectByNameOrMajor() {SqlSession session= MyBatisUtil.createSqlSession();Student student=new Student();//student.setName("SteveDash");//student.setMajor("数学");List<Student> list=session.selectList("selectStudentByNameOrMajor",student);for (Student student1:list){logger.info(student1.toString());}}/*查询所有id值小于5的学生信息*/@Testvoid selectAllIdSmallThanNumber() {SqlSession session= MyBatisUtil.createSqlSession();List<Integer> intList=new ArrayList<Integer>();for(int i=1;i<5;i++){intList.add(i);}List<Student> list=session.selectList("selectAllIdSmallThanNumber",intList);for (Student student1:list){logger.info(student1.toString());}}/*查询所有id值小于number的学生信息*/@Testvoid selectAllIdNumber() {SqlSession session= MyBatisUtil.createSqlSession();List<Student> list=session.selectList("selectByIdLessThan",5);for (Student student1:list){logger.info(student1.toString());}}
}
反思:需求二是不是可以更改成自己想输入那个数字就输入哪个数字去查询小于该数字的学生信息?
那么最简单的编写SQl语句就是这个了吧?

但是你会发现,不可以 <报错了,是因为它识别不出来,所以我们得用其他字符来替代
<select id="selectByIdLessThan" parameterType="int" resultType="Student">SELECT * FROM dm_student WHERE id < #{id}</select>
解释一下这串代码:
<select>元素:这是 MyBatis 中用于定义查询语句的标签。通过id属性指定查询语句的唯一标识符,parameterType属性指定查询语句的输入参数类型,resultType属性指定查询结果的返回类型。id属性:指定查询语句的唯一标识符,可以在 Java 代码中通过这个标识符来调用对应的查询语句。parameterType属性:指定查询语句的输入参数类型,我们指定为int,表示我们将传入一个 int 类型的参数。resultType属性:指定查询结果的返回类型,我们指定为Student,表示查询结果将被映射为Student类型的对象。- SQL 查询语句:
SELECT * FROM dm_student WHERE id < #{id}。这是实际的 SQL 查询语句。其中,SELECT * FROM dm_student表示从名为dm_student的表中查询所有列的数据。WHERE id < #{id}表示筛选条件,只查询满足 id 小于传入的参数的记录。 <:这是 HTML 实体编码,表示小于符号<。在 XML 中,<有特殊的含义,因此需要使用实体编码表示。#{id}:这是 MyBatis 的参数占位符,会在查询执行时被实际的参数值替代。在这个例子中,#{id}表示传入的 int 类型的参数值。
作者:Stevedash
发表于:2023年8月23日 16点28分
注:本文内容基于个人学习理解,如有错误或疏漏,欢迎指正。感谢阅读!如果觉得有帮助,请点赞和分享。
相关文章:
Mybatis的综合案例-学生信息查询系统 用于校验是否真正学习掌握了动态SQL
Mybatis的综合案例-学生信息查询系统 需求一:当用户输入的学生姓名不为空,则只根据学生信息进行查询; 当用户输入的学生姓名为空,且专业不为空,那么就根据学生专业进行学生的查询 需求二:查询所有id值小于5的学生信息…...
力扣:70. 爬楼梯(Python3)
题目: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 来源:力扣(LeetCode) 链接:力扣(LeetCode)官网 - 全球极客…...
陕西广电 HG6341C FiberHome烽火 光猫获取超级密码 改桥接模式 提升网速
光猫默认的路由模式实测在100M宽带下只能跑到60M左右,只有改成桥接模式才能跑满,不损失性能。但是改桥接需要给运营商打电话,有的时候不想麻烦他们,这时获取超级密码进行更改就是一个不错的选择了 分析 之前写了一篇HGU B2 光猫的…...
无涯教程-PHP - 移除的扩展
以下扩展已从PHP 7开始删除- eregmssqlmysqlsybase_ct 以下SAPI已从PHP 7开始删除- aolserverapacheapache_hooksapache2filtercaudiumcontinuityisapimilternsapiphttpdpi3webroxenthttpdtuxwebjames PHP - 移除的扩展 - 无涯教程网无涯教程网提供以下扩展已从PHP 7开始删除…...
笔记:transformer系列
1、和其他网络的比较 自注意力机制适合处理长文本,并行度好,在GPU上,CNN和Self-attention性能差不多,在TPU(Tensor Processing Uni)效果更好。 总结: 自注意力池化层将当做key,value,query来…...
Mysql socket连接测试
配置如下: socket /data/mysql/data/mysql.sock //套接字文件 在数据库没有任何连接的情况下,可以看到3306端口和socket端口都在监听 [mysqlt3-dtpoc-dtpoc-web04 bin]$ netstat -an | grep -i 3306 tcp 0 0 0.0.0.0:3306 0.…...
探究分布式操作系统的本质
探究分布式操作系统的本质 有一位网友问,分布式操作系统的本质是什么,今天就来说说这个话题。 首先,我们需要明确什么是分布式操作系统。 从大范围来理解,分布式操作系统是传统单机操作系统的延伸,可以看作是在多台独…...
opencv-dnn
# utils_words.txt 标签文件 import osimage_types (".jpg", ".jpeg", ".png", ".bmp", ".tif", ".tiff")def list_images(basePath, containsNone):# return the set of files that are validreturn list_file…...
如何选择合适的开源许可证?
🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…...
【前端】深入解析CSS:选择器、显示模式、背景属性和特征剖析
目录 一、前言二、CSS的复合选择器1、后代选择器①、语法②、注意事项 2、子选择器①、语法②、注意事项 3、并集选择器①、语法②、注意事项 4、链接伪类选择器①、语法②、注意事项 三、CSS元素显示模式转换1、转换为块元素display:block2、转换为行内元素display:inline3、转…...
算法训练营第三十四天(8.23)| 动态规划Part04:01背包
目录 Leecode 1049.最后一块石头的重量II Leecode 494.目标和 Leecode 474.一和零 Leecode 1049.最后一块石头的重量II 题目地址:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目类型:01背包 class Solution { public:int…...
【python】tkinter使用多进程打包成exe后multiprocessing无法关闭对应进程
这是由于multiprocessing模块在Windows操作系统下使用fork方法创建子进程时会导致打包成exe后无法正常运行的问题。 可以尝试使用freeze_support函数来解决这个问题。freeze_support函数是在Windows操作系统下用于支持multiprocessing模块的函数。 下面是一个示例代码&#x…...
Redis工具类(缓存操作,Object转换成JSON数据)
依赖spring-data-redis-2.4.1.jar Component Data public class RedisUtils {Autowiredprivate RedisTemplate<String, Object> redisTemplate;Resource(name "stringRedisTemplate")private ValueOperations<String, String> valueOperations;/*** 默…...
Linux 下 Java Socket 编程报 java.net.Exception:Permission denied (权限不足)
本人用Linux部署springboot项目时遇见这个错误,原因很简单,就是端口号没有选对。 在linux系统中,端口号再1024以下的需要root权限,只要把端口改成大于1024的就可以了,但避开一些软件的默认端口,如Tomcat的8…...
IDEA项目实践——VUE介绍与案例分析
系列文章目录 IDEA项目实践——JavaWeb简介以及Servlet编程实战 IDEA项目实践——Spring集成mybatis、spring当中的事务 IDEA项目实践——Spring当中的切面AOP IDEWA项目实践——mybatis的一些基本原理以及案例 IDEA项目实践——Spring框架简介,以及IOC注解 I…...
vue-canvas基本使用和注意事项-动画闪烁效果-自适应适配不同分辨率问题
前言 canvas画布是html的新特性,熟悉画布我们可以完成很多拖拽,标注,动画的功能 使用canvas实现一个小例子很容易,但是真正在项目中使用时,我们需要注意的地方有很多 canvas基本原理就是它基于渲染方法,根…...
Jmeter 如何才能做好接口测试?
现在对测试人员的要求越来越高,不仅仅要做好功能测试,对接口测试的需求也越来越多! 所以也越来越多的同学问,怎样才能做好接口测试? 要真正的做好接口测试,并且弄懂如何测试接口,需要从如下几…...
电商平台京东平台获得京东商品描述API接口演示案例
京东商品描述API接口可以获取京东商品描述: 详细介绍商品的特点和功能,让消费者能够了解商品的具体用途和效果。 使用简洁明了的语言,避免使用过于专业的术语和长句子,让消费者能够轻松理解。 重点突出商品的卖点和优势,让消费者能够更加清晰地了解商品的价值 …...
《算法竞赛·快冲300题》每日一题:“单位转换”
《算法竞赛快冲300题》将于2024年出版,是《算法竞赛》的辅助练习册。 所有题目放在自建的OJ New Online Judge。 用C/C、Java、Python三种语言给出代码,以中低档题为主,适合入门、进阶。 文章目录 题目描述题解C代码Java代码Python代码 “ 单…...
R语言13-R语言中的数据导入导出和批量导入
数据导入 CSV 文件: 使用 read.csv() 函数导入逗号分隔的文本文件。 data <- read.csv("data.csv")Excel 文件: 使用 readxl 包中的函数 read_excel() 导入 Excel 文件。 install.packages("readxl") # 安装 readxl 包&#…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
MySQL 8.0 OCP 英文题库解析(十三)
Oracle 为庆祝 MySQL 30 周年,截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始,将英文题库免费公布出来,并进行解析,帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
