MyBatis——学生信息查询系统

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 计算机科学与技术

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

  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.Driver
url=jdbc:mysql://localhost:3306/test?serverTimezone=UTC&\ characterEncoding=utf8&useUnicode=true&useSSL=false
username=root
password=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中的元素,条件查询操作,包括< choose>元素、< when>元素、< otherwise>元素和< where>元素的使用。通过本实验,可以初步掌握常用动态SQL元素的主要作用。

谢谢浏览!

你可能感兴趣的:(JavaEE实验,mybatis,java,数据库)