MyBatis学习:动态SQL中<where>标签的使用

1、本篇博文的背景和目的

我本人正在学习MyBatis框架,在原先了解并且懵懵懂懂使用的基础上,开始系统正式的学习。阐述了MVC架构模式和三层架构,回顾了JDBC连接数据库,建立了使用MyBatis和MySQL的Maven项目,解释了STDOUT_LOGGING日志和手动提交事务,记录了MyBatis中#占位符的使用方法,回顾了MyBatis执行SQL语句的过程和使用到的一些重要类和接口,记录了将固定化的代码整合到一个工具类MyBatisUtil中,以减少代码量。记录了dao层接口的实现以及为什么要实现它。记录了MyBatis动态代理和使用动态代理的要求以及使用了动态代理生成的实现类。记录了MyBatis框架下传参的五种方法,占位符#和$,如何自定义别名,resultType属性的使用方法,如何处理数据库中列名和JAVA对象属性名不一致的情况,如何组装传递模糊查询的条件(一共有两种方式),动态SQL中if标签的使用。本篇博文记录一下动态SQL中标签的使用。

2、我的上一篇博文

我上一篇博文记录的是  标签单独使用的情况,感兴趣的读者可以移步查阅,链接如下所示:

MyBatis学习:动态SQL中<if>标签的使用_你是我的日月星河的博客-CSDN博客什么是动态SQL呢?简单的说,就是同一个dao 的方法,根据不同的条件,可以表示不同的SQL语句,主要是 where部分有变化。where条件变化了,那么查询出来的结果肯定就不一样了啊;动态SQL的实现,我们是使用不同的MyBatis的标签来实现的,主要实现的标签有 :,,, 这四个标签。在使用动态SQL的时候, dao方法的形参要使用 JAVA的对象;使用JAVA对象来表示参数;...https://blog.csdn.net/weixin_46281472/article/details/126567400

3、为什么要使用where标签

使用where标签是为了规避单独使用 if 标签所存在的不足:单独使用if标签的时候,需要在SQL语句中额外加上 where 关键字,但是:如果全部的if标签的条件都不满足,那么还存在着where关键字,那么就会造成SQL语法错误。此外,还可能会多一个少一个  or或者是and  这样的连接词。

以上的这些问题,使用  标签都可以完美的避开!!

4、where标签的语法

where标签里面是一个或者是多个 if 标签;当有一个 if标签的判断条件是 true,这个时候 where标签会转换为 WHERE关键字,然后附加到SQL语句的后面;如果 if标签没有一个是 true,那么就会忽略 where和里面的 if

where的语法规则如下:

主SQL语句

SQL语句

SQL语句

where标签会删掉紧跟着它之后的 一个 or或者是 and,这样我们就不需要考虑多加了一个 or或者是and,就可以 每一个if标签前面都加上 and或者 or ;

5、使用where标签的实例代码

dao层接口方法代码,如下所示:

    //使用where标签和if标签
    List selectWhere(Student student);

mapper.xml文件代码,如下所示:


    

可以明显看到,我们上面的代码中,SQL语句里面没有使用where关键字,这是因为使用了标签,MyBatis自动帮助我们判断是不是需要加上where关键字。第一个if标签中的连接词or是可有可无的,即使有,MyBatis也会将这个连接词删除,因为本来就是语法错误。

在Main方法中进行必要的测试,代码如下:

package com.dcy;

import com.dcy.dao.StudentDao;
import com.dcy.domain.Student;
import com.dcy.utils.MyBatisUtil;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

public class Starter02 {
    public static void main(String[] args) {
        SqlSession sqlSession = MyBatisUtil.getSqlSession();
        StudentDao studentDao = sqlSession.getMapper(StudentDao.class);
        Student student=new Student();
        student.setName("马小");
        student.setAge(22);
        List students = studentDao.selectWhere(student);
        System.out.println(students);
    }
}

上面的代码是:筛选出所有学生信息中,名字是马小或者年龄大于22岁的。

运行结果这里我就不粘贴了,跟上一篇博文的运行结果相同。

6、本篇博文所用的示例代码所在的gitee仓库地址

7、我的下一篇博文

你可能感兴趣的:(记录学习MyBatis,mybatis,学习,sql)