本文主要实现本文主要实现《Java EE企业级应用开发教程(Spring+SpringMVC+Mybatis)》第2版中的第3章课后习题:学生信息管理系统。
(1)多条件查询
当用户输入的学生姓名不为空时,则只根据学生姓名进行学生信息的查询
当用户输入的学生姓名为空而学生专业不为空时,则只根据学生专业进行学生信息的查询
当用户输入的学生姓名和专业都为空,则要求查询出所有的学号不为空的学生信息
(2)单条件查询出所有id值小于5的学生的信息
前面的搭建过程参考第一章代码:IDEA(2020版)实现MyBatis入门程序 – 每天进步一点点
本文源代码:https://box356.lanzoub.com/iV8C42t1vdwj
1.数据库部分
# 使用mybatis数据库
USE mybatis;
# 创建一个名称为dm_student的表
CREATE TABLE dm_student(
id int(32) PRIMARY KEY AUTO_INCREMENT,
name varchar(50),
major varchar(50),
sno varchar(16)
);
# 插入7条数据
INSERT INTO dm_student VALUES ('1', '张三', '数学', '10001');
INSERT INTO dm_student VALUES ('2', '李四', '英语', '10002');
INSERT INTO dm_student VALUES ('3', '王五', '计算机', '10003');
INSERT INTO dm_student VALUES ('4', '王刚', '化学', '10004');
INSERT INTO dm_student VALUES ('5', '李华', '物理', '10005');
INSERT INTO dm_student VALUES ('6', '李雷', '中文', '10006');
INSERT INTO dm_student VALUES ('7', '张飞', '英语', '10007');
执行结果如下:

2.创建实体类
右击pojo文件夹,New—>Java Class,名字写Student

参考代码如下:
package com.itheima.pojo;
/**
* 学生持久化类
*/
public class Student {
private Integer id; //主键id
private String name; // 姓名
private String major; // 专业
private String sno; // 学号
public Integer getId() {
return id;
}
public void setId(Integer 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;
}
@Override
public String toString() {
return "Student{" + "id=" + id +
", name='" + name + ", major=" + major +
", sno=" + sno + '}';
}
}
创建完后如下:

3.创建mapper文件
右击mapper文件夹,选择New—>File

名字输入 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="com.itheima.mapper.StudentMapper">
<select id="findStudentByNameAndMajor"
parameterType="com.itheima.pojo.Student"
resultType="com.itheima.pojo.Student">
select * from dm_student where 1=1
<choose>
<when test="name !=null and name !=''">
and name like concat('%',#{name}, '%')
</when>
<when test="major !=null and major !=''">
and major= #{major}
</when>
<otherwise>
and sno is not null
</otherwise>
</choose>
</select>
<!--<foreach>遍历List -->
<select id="findByList" parameterType="java.util.List"
resultType="com.itheima.pojo.Student">
select * from dm_student where id in
<foreach item="id" index="index" collection="list"
open="(" separator="," close=")">
#{id}
</foreach>
</select>
</mapper>
添加后如下:

4.修改mybatis-config.xml文件
打开mybatis-config.xml配置文件,添加内容如下:
<mapper resource="mapper/StudentMapper.xml"/>

5.修改测试类
打开测试类,修改代码如下:
package Test;
import com.itheima.pojo.Student;
import com.itheima.utils.MyBatisUtils;
import org.apache.ibatis.session.SqlSession;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
public class MyBatisTest {
/**
* 根据学生姓名或职业查询学生信息列表
*/
@Test
public void findStudentByNameOrMajorTest() {
// 通过工具类生成SqlSession对象
SqlSession session = MyBatisUtils.getSession();
// Student,封装需要组合查询的条件
Student student = new Student();
// student.setName("张三");
// student.setMajor("英语");
// 执行SqlSession的查询方法,返回结果集
List<Student> students = session.selectList("findStudentByNameAndMajor", student);
// 输出查询结果信息
for (Student student2 : students) {
// 打印输出结果
System.out.println(student2);
}
// 关闭SqlSession
session.close();
}
/**
* 根据学生id批量查询学生信息
*/
@Test
public void findByListTest() {
// 获取SqlSession
SqlSession session = MyBatisUtils.getSession();
// 创建List集合,封装查询id
List<Integer> ids = new ArrayList<Integer>();
// 将小于5的id值放入list中
for (int i = 1; i < 5; i++) {
ids.add(i);
}
// 执行SqlSession的查询方法,返回结果集
List<Student> students = session.selectList("findByList", ids);
// 输出查询结果信息
for (Student student : students) {
// 打印输出结果
System.out.println(student);
}
// 关闭SqlSession
session.close();
}
}
6.进行测试
(1)当用户输入的学生姓名不为空时,则只根据学生姓名进行学生信息的查询
修改测试类后,实现效果如下:

(2)当用户输入的学生姓名为空而学生专业不为空时,则只根据学生专业进行学生信息的查询
修改测试类后,实现效果如下:

(3)当用户输入的学生姓名和专业都为空,则要求查询出所有的学号不为空的学生信息

(4)单条件查询出所有id值小于5的学生的信息
执行findByListTest方法后,执行结果如下:
