【SpringBootWeb入门-16】Mybatis-基础操作-多条件查询操作&XML文件配置SQL

发布时间 2023-12-20 23:23:53作者: hiker0412

1、章节回顾

上一篇文章我们讲解了Mybatis的增改查操作,本篇继续学习Mybatis的复杂查询操作(多条件查询)。

2、增删改查操作-多条件查询操作

根据条件姓名、性别、入职时间来查询员工表emp数据,其中员工姓名支持模糊匹配,性别进行精确匹配,入职时间进行范围查询,查询结果按照最后修改时间倒序排序,对应的SQL语句:

select *  from emp where name like '%张%' and gender = 1 and entrydate between '2010-01-01' and '2020-01-01 ' order by update_time desc;
View Code

对应的接口方法:

package com.hiker.mapper;

import com.hiker.pojo.Emp;
import org.apache.ibatis.annotations.*;

import java.time.LocalDate;
import java.util.List;

@Mapper
public interface EmpMapper {

    //多条件查询员工
    @Select("select *  from emp where name like concat('%',#{name},'%') and gender = #{gender} and " +
            "entrydate between #{begin} and #{end} order by update_time desc")
    public List<Emp> list(@Param("name") String name, @Param("gender") Short gender, @Param("begin") LocalDate begin,@Param("end") LocalDate end);

}
View Code

对应的测试代码:

package com.hiker;

import com.hiker.mapper.EmpMapper;
import com.hiker.pojo.Emp;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;

@SpringBootTest
class SpringbootMybatisCrudApplicationTests {

    @Autowired
    private EmpMapper empMapper;

    //根据条件来查询员工
    @Test
    public void testList() {
        List<Emp> empList = empMapper.list("张", (short) 1, LocalDate.of(2010,1,1), LocalDate.of(2020,1,1));
        //List<Emp> empList = empMapper.list("张", (short) 1, LocalDate.of(2010, 1, 1), LocalDate.of(2020, 1, 1));
        System.out.println(empList);
    }


}
View Code

运行单元测试的方法,看到多条件查询记录已加载。

3、增删改查操作-XML映射文件

之前在Mybatis的入门程序里面就提到,Mybatis配置SQL语句有两种,一种是通过注解的方式,也就是我们这几章节的方式;另外一种是通过XML文件配置的方式。通过注解配置SQL的方式我们已经学习完毕,接下来我们来学习通过XML文件配置SQL的方式。

在Mybatis中通过XML方式配置SQL要遵循一套规范,具体如下:

  • XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)。
  • XML映射文件的namespace属性为Mapper接口全限定名一致。
  • XML映射文件中sql语句的id与Mapper 接口中的方法名一致,并保持返回类型一致。

我们按照上述规范,新建EmpMapper.xml文件,并在文件里面按照上面的查询SQL配置:

<?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.hiker.mapper.EmpMapper">
    <select id="list" resultType="com.hiker.pojo.Emp">
        select *  from emp where name like concat('%',#{name},'%') and gender = #{gender} and entrydate between #{begin} and #{end} order by update_time desc
    </select>
</mapper>
View Code

然后我们删掉之前通过注解配置的多条件查询SQL,重新运行测试程序,可以看到运行正常输出查询结果:

上述通过XML配置SQL的方式实现了SQL语句的执行,那么当我们配置N多个语句的时候,怎么能快速定位到我们这个类方法对应的SQL语句在哪个xml文件的哪一块呢?接下来我们来介绍一款IDEA的插件:MybatisX。安装如下图:

 

MybatisX 是一款基于 IDEA 的快速开发Mybatis的插件,安装此插件后,在IDEA就可以快速定位SQL语句。

同理,点击XML的小鸟图案,也可以跳转到对应的类方法里面。

那么,同样是配置SQL语句,一种是通过注解,一种是通过XML方式,我们在什么情况下使用哪一种方式呢?我们在Mybatis的中文网上找到原话:

使用注解来映射简单语句会使代码显得更加简洁,但对于稍微复杂一点的语句,Java 注解不仅力不从心,还会让你本就复杂的 SQL 语句更加混乱不堪。 因此,如果你需要做一些很复杂的操作,最好用 XML 来映射语句。选择何种方式来配置映射,以及认为是否应该要统一映射语句定义的形式,完全取决于你和你的团队。 换句话说,永远不要拘泥于一种方式,你可以很轻松的在基于注解和 XML 的语句映射方式间自由移植和切换。

总结就是:使用Mybatis的注解,主要是来完成一些简单的增删改查功能。如果需要实现复杂的SQL功能,建议使用XML来配置映射语句。

关于Mybatis的多条件查询操作以及XML文件配置SQL方式已经学习完毕,下一篇我们继续学习Mybatis的动态SQL操作