MyBatis——学生信息查询系统

    • Resource
    • pojo层
    • utils层
    • 测试层

实验要求
本实验要求根据表1在数据库中创建一个t_student表,并利用动态SQL进行条件查询、更新和复杂查询操作的相关知识完成一个学生信息查询系统。

实验内容

表1 学生表(t_student)

学生编号(id)学生姓名(sname)学生学号(sno)学生专业(smajor)
1张三001电气工程及自动化
2李四002自动化
3王五003测控
4悟空999降妖除魔
5Hades985计算机科学与技术

该学生信息查询系统需要实现以下几个功能:

  1. 多条件查询。
  • 当用户输入的学生姓名不为空时,则只根据学生姓名进行学生信息的查询。
  • 当用户输入的学生姓名为空而学生专业不为空时,则只根据学生专业进行学生信息的查询。
  • 当用户输入的学生姓名和学生专业都为空时,则要求查询出所有学号不为空的学生信息。
  1. 单条件查询出所有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元素的主要作用。

谢谢浏览!