MyBatis——学生信息查询系统
- Resource
- pojo层
- utils层
- 测试层
实验要求
本实验要求根据表1在数据库中创建一个t_student表,并利用动态SQL进行条件查询、更新和复杂查询操作的相关知识完成一个学生信息查询系统。
实验内容
表1 学生表(t_student)
学生编号(id) | 学生姓名(sname) | 学生学号(sno) | 学生专业(smajor) |
---|---|---|---|
1 | 张三 | 001 | 电气工程及自动化 |
2 | 李四 | 002 | 自动化 |
3 | 王五 | 003 | 测控 |
4 | 悟空 | 999 | 降妖除魔 |
5 | Hades | 985 | 计算机科学与技术 |
该学生信息查询系统需要实现以下几个功能:
- 多条件查询。
- 当用户输入的学生姓名不为空时,则只根据学生姓名进行学生信息的查询。
- 当用户输入的学生姓名为空而学生专业不为空时,则只根据学生专业进行学生信息的查询。
- 当用户输入的学生姓名和学生专业都为空时,则要求查询出所有学号不为空的学生信息。
- 单条件查询出所有id值小于5的学生的信息。
实验分析
本实验主要考查对MyBatis的动态SQL的掌握。
- 建立好实验所需的数据库及表。
- 需要在项目的src/main/resource目录下创建数据库连接的配置文件和MyBatis的核心配置文件和mapper文件夹。
- 再在src/main/java下创建一个实体类Student,编写学生的基本信息;再创建工具类MyBatisUtils。
- 最后在src/test/java下创建一个测试类Test1完成实验内容。
代码实现
Resource
db.properties(数据库连接配置文件)
driver=com.mysql.cj.jdbc.Driverurl=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&\ characterEncoding=utf8&useUnicode=true&useSSL=falseusername=rootpassword=1
mybatis-config.xml(MyBatis的核心配置文件)
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <properties resource="db.properties"> </properties> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <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> <mappers> <mapper resource="mapper/StudentMapper.xml"/> </mappers></configuration>
StudentMapper.xml(映射文件)
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mapper namespace="com.cqust.pojo.Student"> <select id="findStudentBySnameAndSmajor" parameterType="com.cqust.pojo.Student" resultType="com.cqust.pojo.Student"> select * from t_student where 1=1 <choose> <when test="sname !=null and sname !='' "> and sname like concat ('%',#{sname},'%') </when> <when test="smajor !=null and smajor !='' "> and smajor like concat ('%',#{smajor},'%') </when> <otherwise> and sno is not null </otherwise> </choose> </select> <select id="findStudentById" parameterType="java.util.Arrays" resultType="com.cqust.pojo.Student"> select * from t_student where id in <foreach collection="list" item="id" index="index" open="(" separator="," close=")"> #{id} </foreach> </select></mapper>
pojo层
Student类
package com.cqust.pojo;public class Student { private int id;//学生id private String sname;//学生姓名 private String sno;//学生学号 private String smajor; //学生专业 public int getId() { return id; } public void setId(int id) { this.id = id; } public String getSname() { return sname; } public void setSname(String sname) { this.sname = sname; } public String getSno() { return sno; } public void setSno(String sno) { this.sno = sno; } public String getSmajor() { return smajor; } public void setSmajor(String smajor) { this.smajor = smajor; } @Override public String toString() { return "Student{" + "学生id=" + id + ", 学生姓名='" + sname + '\'' + ", 学号='" + sno + '\'' + ", 专业='" + smajor + '\'' + '}'; }}
utils层
MyBatisUtils类
package com.cqust.utils;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 java.io.Reader;/** * 工具类 */public class MyBatisUtils { private static SqlSessionFactory sqlSessionFactory = null; //初始化SQLSessionFactory对象 static { try{ //使用MyBatis提供的Resource类加载MyBatis的配置文件 Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); //构建SQLSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); } catch (Exception e){ e.printStackTrace(); } } //获取SqlSession对象的方法 public static SqlSession getSession(){ //若传入true表示关闭事务控制,自动提交;false表示开启事务控制 return sqlSessionFactory.openSession(true); }}
测试层
Test1(测试类)
import com.cqust.pojo.Student;import com.cqust.utils.MyBatisUtils;import org.apache.ibatis.session.SqlSession;import org.junit.Test;import java.util.ArrayList;import java.util.List;public class Test1 { @Test public void findStudentBySnameAndSmajor(){ //获取SqlSession SqlSession session = MyBatisUtils.getSession(); //创建Student对象,并向对象中添加数据 Student student = new Student(); student.setSname("Hades"); //设置学生姓名 student.setSmajor("计算机科学与技术");//设置学生专业 //执行SqlSession的查询方法,返回结果集 List<Student> students = session.selectList("findStudentBySnameAndSmajor",student); //输出查询结果信息 for(Student Student1 : students){ //输出结果信息 System.out.println(Student1); } //关闭SqlSession session.close(); } @Test public void findStudentByListTest(){ //获取SqlSession SqlSession session = MyBatisUtils.getSession(); //创建List集合,封装查询id List<Integer> list = new ArrayList<>(); //遍历id<5 for (int i = 0; i < 5; i++) { list.add(i); } //执行SqlSession的查询方法,返回结果集 List<Student> students = session.selectList("findStudentById",list); //输出查询结果信息 for(Student Student1 : students){ //输出结果信息 System.out.println(Student1); } //关闭SqlSession session.close(); }}
实验小结
本实验主要对动态SQL的相关知识进行了大体的应用。包括动态SQL中的元素,条件查询操作,包括元素、元素、元素和元素的使用。通过本实验,可以初步掌握常用动态SQL元素的主要作用。
谢谢浏览!