JavaEE实训项目:Mybatis实现多条件查询

这里是与你共同进步的李星儿,点赞加关注,学习不迷路。让我们一起进步!!!

这段时间一直在备考JavaEE,疯狂背书的我趁空余时间整理出了这篇笔记,希望可以帮助到备考中的宝宝们。
加油!!!
😁
案例:
现有一个学生表s_student,如图所示

学生id (id)

学生姓名(name)

学生专业(major)

学生学号(number)

1

张三

计算机科学与应用

20211001

2

李四

数学与应用数学

20211002

3

王五

机械与工程

20211003

4

赵六

电子科学与技术

20211004

5

李雷

应用化工技术

20211005

6

麻七

工程测量技术

20211006

7

小明

财务管理

20211007

1.多条件查询:
当用户输入的学生姓名不为空时,则只根据学生姓名进行学生信息的查询
当用户输入的学生姓名为空而学生专业不为空时,则只根据学生专业进行学生信息查询
当用户输入的学生姓名和专业都为空,则要求查询出所有学号不为空的学生信息
2.查询出id值小于5的学生信息

一、前言

Mybatis作为后端持久层框架,在互联网大厂中应用广泛,所以掌握Mybatis,可谓是必备的。最近准备系统得复习一下Mybatis框架,所以博客会更几期关于Mybatis得文章,如果觉得看完有收获,希望收藏、点赞。如果觉得写得不好,欢迎评论区指正。

二、创建数据库

(一)创建一个数据库studentSystem

#创建一个数据库studentsystem
create database studentsystem
use studentsystem

(二)创建学生表并插入数据

#创建一个学生表s_student
create table s_student(
id int PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(32) ,
major VARCHAR,
number INT NOT NULL
);
 
INSERT INTO s_student values(1,'张三',"计算机科学与应用",20211001);
INSERT INTO s_student values(2,"李四","数学与应用数学",20211002);
INSERT INTO s_student values(3,"王五","机械与工程",20211003);
INSERT INTO s_student values(4,"赵六","电子科学与技术",20211004);
INSERT INTO s_student values(5,'李雷',"应用化工技术",20211005);
INSERT INTO s_student values(6,"麻七","工程测量技术",20211006);
INSERT INTO s_student values(7,"小明","财务管理",20211007);
运行之后表格数据如下:

s_student表数据运行结果

项目架构:

三、在IDEA中创建Maven项目

(一)配置环境

1.修改pom.xml,获取Mybatis、MySQL相关依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>Student_Maven</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!--连接数据库的jar包-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.23</version>
        </dependency>
        <!--mybaties依赖包-->
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.4.2</version>
        </dependency>
        <!--单元测试的依赖包-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>


<!--    &lt;!&ndash;在build中配置resources,来防止资源导出失败的问题&ndash;&gt;-->
<!--    <build>-->
<!--        <resources>-->
<!--            <resource>-->
<!--                <directory>src/main/resources</directory>-->
<!--                <includes>-->
<!--                    <include>**/*.properties</include>-->
<!--                    <include>**/*.xml</include>-->
<!--                </includes>-->
<!--                <filtering>true</filtering>-->
<!--            </resource>-->
<!--            <resource>-->
<!--                <directory>src/main/java</directory>-->
<!--                <includes>-->
<!--                    <include>**/*.properties</include>-->
<!--                    <include>**/*.xml</include>-->
<!--                </includes>-->
<!--                <filtering>true</filtering>-->
<!--            </resource>-->
<!--        </resources>-->
<!--    </build>-->

</project>

2.在db.properties文件中配置Mybatis连接环境

这里的用户名跟密码按照自己的来修改,我的用户名跟密码都是root
studentsystem是数据库名
mysql.driver=com.mysql.cj.jdbc.Driver
mysql.url=jdbc:mysql://localhost:3306/studentsystem?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
mysql.username=root
mysql.password=root

3.在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"></properties>
    <!--settings配置-->
    <settings>
        <!--标准日志工厂的实现-->
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>

    <!--設置别名-->
    <typeAliases>
        <!--给每个实体类单独取别名-->
        <!--<typeAlias type="com.cz.bean.User" alias="user"/>
        <typeAlias type="com.cz.bean.Person" alias="person"/>-->
        <!--批量取别名,规则:把类名首字母小写-->
        <package name="com.lx.bean"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"></transactionManager>
            <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>
    <mappers>
        <mapper resource="mapper/StudentMapper.xml"/>
    </mappers>
</configuration>
<!--        // -->

4.添加mapper接口对应的xml格式的文件

这里一定要注意路径resources/mapper/StudentMapper.xml要与StudentMapper的路径格式保持一致,伙伴们一定要注意,我这里就因为路径不一致运行不了!!!
<?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">
<!-- namespace指定Dao接口的完整类名,mybatis会依据这个接口动态创建一个实现类去实现这个接口,
     而这个实现类是一个Mapper对象-->
<mapper namespace="com.lx.mapper.StudentMapper">
    <select id="findStudentByName" parameterType="student"
            resultType="com.lx.bean.Student">
        select * from s_student where 1=1
        <if test="name!=null and name!=''">
            and name like concat('%',#{name},'%')
        </if>

    </select>
    <select id="findStudentByNameOrMajor" parameterType="student"
            resultType="com.lx.bean.Student">
        select * from s_student
        <where>
            <choose>
                <when test="name !=null and name !=''">
                    and name like concat('%',#{name}, '%')
                </when>
                <when test="major !=null and major !=''">
                    and major= #{major}
                </when>
            </choose>
        </where>
    </select>

    <select id="findAllStudent" parameterType="student"
            resultType="com.lx.bean.Student">
        select * from s_student
        <where>
            <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 id is not null</otherwise>
            </choose>
        </where>
    </select>
    <select id="findStudentById" parameterType="java.util.Arrays"
            resultType="com.lx.bean.Student">
        select * from s_student
        <where>
            <foreach item="id" index="index" collection="array"
                     open="id in(" separator="," close=")">#{id}
            </foreach>
        </where>
    </select>
<!---->
</mapper>

(二)创建实体类

Student实体类
package com.lx.bean;

public class Student {
    private int id;
    private String name;
    private String major;
    private int number;

    public Student() {
    }

    public Student(int id, String name, String major, int number) {
        this.id = id;
        this.name = name;
        this.major = major;
        this.number = number;
    }

    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 int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", major='" + major + '\'' +
                ", number=" + number +
                '}';
    }
}

(二)创建工具类

MyBatisUtils工具类
package com.lx.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.IOException;
import java.io.InputStream;

public class MyBatisUtils {
    private static SqlSessionFactory sqlSessionFactory;
    static {
        try{
            //获取sqlsessionfactory对象
            String resource= "mybatis-config.xml";
            InputStream inputStream = Resources.getResourceAsStream(resource);
            sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        }catch (IOException e){
            e.printStackTrace();
        }
    }

    public static SqlSession getSqlSession() {
        return sqlSessionFactory.openSession(false);
    }
}

(三)创建接口类

StudentMapper接口类
package com.lx.mapper;

import com.lx.bean.Student;

import java.util.List;
import java.util.Map;

public interface StudentMapper {
    List<Student> findStudentByName(Student student);
    List<Student> findStudentByNameOrMajor(Student student);
    List<Student> findAllStudent(Student student);
    List<Student> findStudentById(Integer[] ids);
}

(四)运行测试

(1)多条件查询:
当用户输入的学生姓名不为空时,则只根据学生姓名进行学生信息的查询
当用户输入的学生姓名为空而学生专业不为空时,则只根据学生专业进行学生信息查询
当用户输入的学生姓名和专业都为空,则要求查询出所有学号不为空的学生信息
(2)查询出id值小于5的学生信息

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

    @Test
        public void findStudentsTest1(){
        SqlSession session = MyBatisUtils.getSqlSession();
        StudentMapper mapper = session.getMapper(StudentMapper.class);
        Student s1 = new Student();
        s1.setName("张三");

        List<Student> students = mapper.findStudentByName(s1);
        for(Student s : students){
            System.out.println(s);
        }
        session.close();
    }

运行结果:

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

 @Test
    public void findStudentsTest2(){
        SqlSession session = MyBatisUtils.getSqlSession();
        StudentMapper mapper = session.getMapper(StudentMapper.class);
        Student s2 = new Student();
        s2.setMajor("财务管理");
        List<Student> students = mapper.findStudentByNameOrMajor(s2);
        for(Student s : students){
            System.out.println(s);
        }
        session.close();
    }

运行结果:

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

 @Test
    public void findStudentsTest3(){
        SqlSession session = MyBatisUtils.getSqlSession();
        StudentMapper mapper = session.getMapper(StudentMapper.class);
        Student s3 = new Student();
        List<Student> students = mapper.findAllStudent(s3);
        for(Student s : students){
            System.out.println(s);
        }
        session.close();
    }

运行结果:

4.查询出id值小于5的学生信息

 @Test
    public void findStudentsTest4(){
        SqlSession session = MyBatisUtils.getSqlSession();
        StudentMapper mapper = session.getMapper(StudentMapper.class);
        Integer[] Ids = {1,2,3,4};
        List<Student> students = mapper.findStudentById(Ids);
        for(Student s : students){
            System.out.println(s);
        }
        session.close();
    }

运行结果:

四、结语

通过案例的学习,完成对MyBatis注解的学习,关注我,有更多精彩!
  • 7
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值