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 configuration
        PUBLIC "-//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;//对应数据库字段id
    private String name;//姓名 对应数据库字段name
    private String major;//专业 对应数据库字段major
    private 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()方法,让其变成输出我们想要的信息,
    方便我们检查测试功能需求是否满足
    */
    @Override
    public 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 mapper
        PUBLIC "-//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 &lt; #{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);
    /*
        当用户输入的学生姓名不为空,则只根据学生信息进行查询;
        当用户输入的学生姓名为空,且专业不为空,那么就根据学生专业进行学生的查询
    */
    @Test
    void 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的学生信息
    */
    @Test
    void 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的学生信息
     */
    @Test
    void 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 &lt; #{id}
    </select>

解释一下这串代码:

  1. <select> 元素:这是 MyBatis 中用于定义查询语句的标签。通过 id 属性指定查询语句的唯一标识符,parameterType 属性指定查询语句的输入参数类型,resultType 属性指定查询结果的返回类型。
  2. id 属性:指定查询语句的唯一标识符,可以在 Java 代码中通过这个标识符来调用对应的查询语句。
  3. parameterType 属性:指定查询语句的输入参数类型,我们指定为 int,表示我们将传入一个 int 类型的参数。
  4. resultType 属性:指定查询结果的返回类型,我们指定为 Student,表示查询结果将被映射为 Student 类型的对象。
  5. SQL 查询语句:SELECT * FROM dm_student WHERE id < #{id}。这是实际的 SQL 查询语句。其中,SELECT * FROM dm_student 表示从名为 dm_student 的表中查询所有列的数据。WHERE id < #{id} 表示筛选条件,只查询满足 id 小于传入的参数的记录
  6. &lt;:这是 HTML 实体编码,表示小于符号 <。在 XML 中,< 有特殊的含义,因此需要使用实体编码表示。
  7. #{id}:这是 MyBatis 的参数占位符,会在查询执行时被实际的参数值替代。在这个例子中,#{id} 表示传入的 int 类型的参数值。

作者:Stevedash

发表于:2023年8月23日 16点28分

注:本文内容基于个人学习理解,如有错误或疏漏,欢迎指正。感谢阅读!如果觉得有帮助,请点赞和分享。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stevedash

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值