首页 > 数据库 >【SpringBootWeb入门-16】Mybatis-基础操作-多条件查询操作&XML文件配置SQL

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

时间:2023-12-20 23:34:28浏览次数:41  
标签:XML 语句 16 SpringBootWeb 查询 SQL Mybatis import

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操作

标签:XML,语句,16,SpringBootWeb,查询,SQL,Mybatis,import
From: https://www.cnblogs.com/hiker0412/p/17917619.html

相关文章

  • Educational Codeforces Round 160 (Rated for Div. 2)
    A.RatingIncrease字符串处理#include<bits/stdc++.h>usingnamespacestd;voidsolve(){ strings; cin>>s; intn=s.size(); s=""+s; for(inti=1;i<=n-1;i++){ stringt=""; for(intj=1;j<=i;j++){ t=t+s[j]; } ......
  • openGauss学习笔记-166 openGauss 数据库运维-备份与恢复-导入数据-使用COPY FROM STD
    openGauss学习笔记-166openGauss数据库运维-备份与恢复-导入数据-使用COPYFROMSTDIN导入数据-从MY向openGauss数据库进行数据迁移166.1示例2:从MY向openGauss数据库进行数据迁移下面示例演示如何通过CopyManager从MY向openGauss数据库进行数据迁移的过程。importjava.io.St......
  • openGauss学习笔记-167 openGauss 数据库运维-备份与恢复-导入数据-使用gsql元命令导
    openGauss学习笔记-167openGauss数据库运维-备份与恢复-导入数据-使用gsql元命令导入数据gsql工具提供了元命令\copy进行数据导入。167.1\copy命令\copy命令格式以及说明参见表1\copy元命令说明。表1\copy元命令说明语法说明\copy{table[(column_list)......
  • Odoo16—权限控制
    odoo的权限控制是通过用户组来实现的,在用户组中配置控制权限,然后再添加用户到用户组中,从而实现对用户的访问和操作权限控制。一个用户可以属于多个用户组,用户最终的权限范围取决于所属用户组权限的并集。在用户组中可以声明哪些数据的控制权限呢?我们打开开发者模式,通过“设置-用......
  • TM1620
    tm1620与TM1640和TM1650不同,有STB引脚部分代码搬运 tm1620.c#include"tm1620.h"staticvoidSetSTB1(GPIO_PinStatestate){HAL_GPIO_WritePin(STB1_GPIO_Port,STB1_Pin,state);}staticvoidSetCLK1(GPIO_PinStatestate){HAL_GPIO_WritePin(CLK1_GPIO......
  • Codeforces Round 916 (Div. 3)
    A.ProblemsolvingLogmap枚举字母#include<bits/stdc++.h>usingnamespacestd;voidsolve(){ intn; strings; cin>>n>>s; intans=0; s=""+s; map<char,int>mp; for(inti=1;i<=n;i++){ mp[s[i]]++; } for(autoc:mp)......
  • 世微 AP5219 平均电流型LED 降压恒流驱动器 兼容LN2516/LN2517
    产品描述AP5219是一款PWM工作模式,内置功率管,适用于5V~100V输入的高精度降压LED恒流驱动芯片。输出功率可达25W,电流2.5A。AP5219可实现全亮/半亮功能切换,通过MODE切换:全亮/半亮模式。AP5219工作频率固定在130KHZ,同时内置抖频电路,可以降低对其他设备的EMI干扰。另......
  • Codeforce Round 916(div3)
    CodeforcesRound916(div3)[Problem-A-Codeforces]:ProblemsolvingLogA.题直接看样例进行分析,发现每一次出现的字符代表着用了1分钟来看这道题,每道题都有固定的解题时间,只要达到了这个解题时间,就可以将这题解出来,答案就要加上1;同时要注意将解决过的问题要标记一下;#in......
  • Codeforces Round 916 (Div. 3)(A~E2)
    A统计一下每个字母的出现次数然后输出即可#include<bits/stdc++.h>#definerep(i,a,b)for(registerinti=(a);i<=(b);++i)#definefep(i,a,b)for(registerinti=(a);i>=(b);--i)#definelsp<<1#definersp<<1|1#definePIIpair<int,int&......
  • 【Spring教程16】Spring框架实战:详解解读AOP配置管理中AOP切入点表达式和通知类型
    目录1AOP切入点表达式1.1语法格式1.2通配符1.3书写技巧2AOP通知类型2.1类型介绍欢迎大家回到《Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《如何在windows11下安装Maven并配置以及IDEA配置Maven环境》,本文的......