0


第三章案例:学生信息查询系统(idea2019)

【案例目标】

本章对MyBatis的动态SQL进行了详细讲解,包括使用动态SQL进行条件查询、更新以及复杂查询操作。本案例要求利用本章所学知识完成一个学生信息查询系统,该系统要求实现2个以下功能。

(1)多条件查询

当用户输入的学生姓名不为空,则只根据学生姓名进行学生信息的查询;

当用户输入的学生姓名为空,而学生专业不为空,则只根据学生专业进行学生的查询;

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

(2)单条件查询查询出所有id值小于5的学生的信息。

【实现步骤】:多条件查询

**1.**项目搭建

**1.1 **创建一个名称为mybatis-demo03的项目

Grouple:通常设置为公司倒置的网络域名,如:com.itheima

ArtifactId:通常设置为项目名,如:mybatistest

Version为idea默认的版本

name:项目名

location:选择项目存放路径

**1.2 **引入相关依赖pom.xml,导入mysql驱动包、JUnit测试包、MyBatis的核心包等

<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>
    </dependencies>
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

**2.****数据准备 **

2.1 创建数据库,在mysql中创建一个名为mybatis的数据库:

create database mybatis;

2.2 创建数据库连接信息配置文件。在src/main/resources目录下创建数据库连接的配置文件db.properties:

mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/mybatis?serverTimezone=UTC&
characterEncoding=utf8&useUnicode=true&useSSL=false
mysql.username=root  //mysql用户名
mysql.password=123456 //mysql登录密码

**2.3 **创建MyBatis核心配置文件。在项目的src/main/resources目录下创建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"/>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <!-- 数据库连接相关配置 ,db.properties文件中的内容-->
            <dataSource type="POOLED">
                <property name="driver" value="${mysql.driver}"/>
                <property name="url" value="${mysql.url}"/>
                <property name="username" value="${mysql.username}"/>
                <property name="password" value="${mysql.password}"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

**2.4 **在名称为mybatis的数据库中,创建一个dm_student表,并插入几条测试数据。

# 使用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');

完成后查看表

3. 创建POJO实体

在项目src/main/java目录下创建com.itheima.pojo包,在com.itheima.pojo包下创建持久化类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 + '}';
    }
}

**4.创建映射文件 **

在项目src/main/java目录下创建com.itheima.mapper包,在com.itheima.mapper包下创建映射文件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>

5. 修改mybatis-config.xml配置文件,添加

<!-- mapping文件路径配置 -->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
//<mapper>元素指定了StudentMapper.xml映射文件的路径。

6.** 编写MyBatisUtils工具类**

在项目src/main/java目录下创建com.itheima.utils包,在com.itheima.utils包下创建MyBatisUtils工具类:

package com.itheima.utils;
import java.io.Reader;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
/**
 * 工具类
 */
public class MyBatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    // 初始化SqlSessionFactory对象
    static {
        try {
            // 使用MyBatis提供的Resources类加载MyBatis的配置文件
            Reader reader =
                    Resources.getResourceAsReader("mybatis-config.xml");
            // 构建SqlSessionFactory工厂
            sqlSessionFactory =
                    new SqlSessionFactoryBuilder().build(reader);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    // 获取SqlSession对象的静态方法
    public static SqlSession getSession() {
        return sqlSessionFactory.openSession();
    }
}

7.** 编写测试方法**

在项目的src/test/java目录下创建Test包,在Test包下创建MyBatisTest类:

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("com.itheima.mapper"
                + ".StudentMapper.findStudentByNameAndMajor", student);
        // 输出查询结果信息
        for (Student student2 : students) {
            // 打印输出结果
            System.out.println(student2);
        }
        // 关闭SqlSession
        session.close();
    }

执行测试类MyBatisTest的findStudentByNameOrMajorTest()方法。

【实现步骤】:单条件查询

**1.修改映射文件 **

在映射文件StudentMapper.xml中的<mapper>元素下,编写查询所有id值小于5的学生信息的动态SQL。

<!--<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>

**2.**编写测试方法

在测试类MyBatisTest中,编写测试方法findByListTest(),findByListTest()具体代码如下:

/**
     * 根据学生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("com.itheima.mapper"
                + ".StudentMapper.findByList", ids);
        // 输出查询结果信息
        for (Student student : students) {
            // 打印输出结果
            System.out.println(student);
        }
        // 关闭SqlSession
        session.close();
    }

执行MyBatisTest测试类的findByListTest()方法。

标签: intellij-idea java

本文转载自: https://blog.csdn.net/m0_58813405/article/details/127785118
版权归原作者 夏目贵志_ 所有, 如有侵权,请联系我们删除。

“第三章案例:学生信息查询系统(idea2019)”的评论:

还没有评论