MyBatis查询数据库(4)

这篇具有很好参考价值的文章主要介绍了MyBatis查询数据库(4)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言🍭

❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️

Spring + Spring MVC + MyBatis_冷兮雪的博客-CSDN博客

终于到了MyBatis最后一篇,这篇讲的是动态SQL的使用。

复杂情况:动态SQL使用🍭

动态 SQL 是Mybatis的强大特性之⼀,能够完成不同条件下不同的 SQL 拼接。 可以参考官方文档:mybatis – MyBatis 3 | 动态 SQL

一、<if>标签🍭

在注册用户的时候,可能会有这样⼀个问题,有的信息是必填,有的是选填,那如果在添加⽤户的时候有不确定的字段传入,程序应该 如何实现呢?

这个时候就需要使用动态标签 <if> 来判断了,比如添加的时候性别 sex 为非必填字段,具体实现如下:

<insert id="insert">
        insert into user(
        username,
        password,
        <if test="sex != null">
            sex,
        </if>
        birthday,
        head
        ) values (
        #{username},
        #{password},
        <if test="sex != null">
            #{sex},
        </if>
        #{birthday},
        #{head}
        )
    </insert>

需要注意 test 中的 sex,是传入对象中的属性,不是数据库字段。而且if标签都是成对出现的

二、<trim>标签🍭

之前的插入用户功能,只是有⼀个 sex 字段可能是选填项,如果所有字段都是非必填项,就考虑使用<trim>标签结合<if>标签,对多个字段都采取动态生成的方式。

<trim>标签中有如下属性:

  • prefix:表示整个语句块,以prefix的值作为前缀
  • suffix:表示整个语句块,以suffix的值作为后缀
  • prefixOverrides:表示整个语句块要去除掉的前缀
  • suffixOverrides:表示整个语句块要去除掉的后缀

调整 UserMapper.xml 的插入语句为:

    <insert id="insert">
        insert into user
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="username != null">
                username,
            </if>
            <if test="password != null">
                password,
            </if>
            <if test="sex != null">
                sex,
            </if>
            <if test="birthday != null">
                birthday,
            </if>
            <if test="head != null">
                head,
            </if>
            <if test="createTime != null">
                create_time,
            </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="username != null">
                #{username},
            </if>
            <if test="password != null">
                #{password},
            </if>
            <if test="sex != null">
                #{sex},
            </if>
            <if test="birthday != null">
                #{birthday},
            </if>
            <if test="head != null">
                #{head},
            </if>
            <if test="createTime != null">
                #{createTime},
            </if>
        </trim>
    </insert>

在以上 sql 动态解析时,会将第⼀个 <trim> 部分做如下处理:

  • 基于 prefix 配置,前缀部分加上 (
  • 基于 suffix 配置,后缀部分加上 )
  • 多个 <if>组织的语句都以 , 结尾,在最后拼接好的字符串还会以 , 结尾,会基于 suffixO verrides 配置去掉最后⼀个 ,
  • 注意 <if test=“createTime != null”> 中的 createTime 是传入对象的属性,不是数据库字段

三、<where>标签🍭

传入的用户对象,根据属性做 where 条件查询,用户对象中属性不为 null 的,都为查询条件。如user.username 为 "a",则查询条件为 where username="a":

UserMapper:

List<User> selectByCondition(User user);

UserMapper.xml:

 <select id="selectByCondition" parameterType="com.example.ssmdemo1.entity.Userinfo" resultMap="baseMap">
        select id, username, password, nickname, sex, birthday, head, create_time from user
        <where>
            <if test="username != null">
                and username=#{username}
            </if>
            <if test="password != null">
                and password=#{password}
            </if>
            <if test="sex != null">
                and sex=#{sex}
            </if>
            <if test="birthday != null">
                and birthday=#{birthday}
            </if>
            <if test="head != null">
                and head=#{head}
            </if>
            <if test="createTime != null">
                and create_time=#{createTime}
            </if>
        </where>
    </select>
以上<where>标签也可以使用<trim prefix="where" prefixOverrides="and"> 替换,中间的if标签代码不需要变。

四、<set>标签🍭

根据传入的用户对象属性来更新用户数据,可以使用<set>标签来指定动态内容。

UserMapper 接口中修改用户方法:根据传入的用户 id 属性,修改其他不为 null 的属性:

int updateById(User user); 

UserMapper.xml 中添加更新用户 SQL:

<update id="updateById" parameterType="com.example.ssmdemo1.entity.Userinfo">
        update user
        <set>
            <if test="username != null">
                username=#{username},
            </if>
            <if test="password != null">
                password=#{password},
            </if>
            <if test="sex != null">
                sex=#{sex},
            </if>
            <if test="birthday != null">
                birthday=#{birthday},
            </if>
            <if test="head != null">
                head=#{head},
            </if>
            <if test="createTime != null">
                create_time=#{createTime},
            </if>
        </set>
        where id=#{id}
    </update>

以上<set>标签也可以使用 <trim prefix="set" suffixOverrides=","> 替换。

五、<foreach>标签🍭

对集合进⾏遍历时可以使用该标签。<foreach>标签有如下属性:

  • collection:绑定方法参数中的集合,如 List,Set,Map或数组对象
  • item:遍历时的每⼀个对象
  • open:语句块开头的字符串
  • close:语句块结束的字符串
  • separator:每次遍历之间间隔的字符串

示例:根据多个文章 id 来删除文章数据。

ArticleMapper 中新增接口方法:

int deleteByIds(List<Integer> ids);

ArticleMapper.xml 中新增删除 SQL:

<delete id="deleteByIds">
        delete from article where id in
        <foreach collection="list" item="item" open="(" close=")" separator=",">
            #{item}
        </foreach>
    </delete>

单元测试代码,删除id为5和6的用户:

@Test
    void deleteByIds() {
        List<Integer> ids=new ArrayList<>();
        ids.add(5);
        ids.add(6);
        int result=userMapper.deleteByIds(ids);
        System.out.println("删除:"+result);
    }

六、choose-when-otherwise🍭

类似于Java中的switch语句,根据不同条件选择不同的SQL片段。

<select id="getUserList" resultType="User">
  SELECT * FROM users
  <where>
    <choose>
      <when test="status != null">
        AND status = #{status}
      </when>
      <when test="name != null and name != ''">
        AND name = #{name}
      </when>
      <otherwise>
        AND active = 1
      </otherwise>
    </choose>
  </where>
</select>

动态SQL是MyBatis的一个重要特性,它允许你在SQL语句中根据条件动态地添加、修改或删除语句片段,以便更灵活地构建SQL查询和更新操作。

上面这些示例只是MyBatis动态SQL的一小部分用法。你可以根据自己的需求和情况,结合使用这些特性来构建更灵活、可维护的数据库操作语句。记得阅读MyBatis的官方文档以深入了解动态SQL的更多用法和细节。

MyBatis查询数据库(4),Spring + Spring MVC + MyBatis,mybatis,java,开发语言,spring,spring boot,后端,数据库文章来源地址https://www.toymoban.com/news/detail-627986.html

到了这里,关于MyBatis查询数据库(4)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis查询数据库(1)

    ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring + Spring MVC + MyBatis_冷兮雪的博客-CSDN博客 经过前⾯的学习咱们 Spring 系列的基本操作已经实现的差不多了,接下来,咱们来学习更重要的知识,将前端传递的数据存储起来,或者查询

    2024年02月15日
    浏览(74)
  • MyBatis查询数据库(2)

    目录 前言🍭 一、增删查改操作🍭 1、查🍉 Ⅰ、mapper接口:🍓 Ⅱ、UserMapper.xml 查询所有用户的具体实现 SQL:🍓 Ⅲ、进行单元测试🍓 2、增、删、改操作🍉 Ⅰ、增🍓 添加用户🍒 添加用户并且返回自增 id🍒 Ⅱ、改🍓 根据id修改用户名🍒 开启 MyBatis sql 日志打印🍒 Ⅲ、

    2024年02月16日
    浏览(45)
  • MyBatis查询数据库(3)

    ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring + Spring MVC + MyBatis_冷兮雪的博客-CSDN博客 前面我们讲解了MyBatis增删改查基本操作,下面我们来深入了解MyBatis其中不同和需要注意的地方。 下面我们来实现⼀下根据用户 id 查询用户

    2024年02月14日
    浏览(52)
  • MyBatis 查询数据库、持久层框架简介

    MyBatis是一款优秀的持久层框架,支持自定义SQL、存储过程以及高级映射。它通过简单的XML或注解来配置和映射原始类型、接口和Java POJO为数据库中的记录。

    2024年02月12日
    浏览(59)
  • MyBatis查询数据库之一(概念+创建项目+基础交互)

    目录 1.MyBatis是什么? 2.为什么学习MyBatis? 3. 怎么学 MyBatis 4.第⼀个MyBatis查询 4.1 添加MyBatis框架支持 4.1.1老项目添加MyBatis 4.1.2 新项目添加MyBatis 4.2 配置连接字符串和MyBatis 4.2.1 配置连接字符串 4.2.2 配置 MyBatis 中的 XML 路径 5. 使用 MyBatis 的操作模式操作数据库 5.1 添加实体类

    2024年02月13日
    浏览(52)
  • 【Spring Boot】数据库持久层框架MyBatis — MyBatis简介

    本节首先会介绍什么是ORM、什么是MyBatis、MyBatis的特点以及核心概念,最后介绍MyBatis是如何启动、如何加载配置文件的? ORM(Object Relational Mapping,对象关系映射)是为了解决面向对象与关系数据库存在的互不匹配现象的一种技术。简单地说,ORM通过使用描述对象和数据库之

    2024年02月11日
    浏览(47)
  • MyBatis 查询数据库之二(增、删、改、查操作)

    目录 1. 配置打印 MyBatis 执行的SQL 2. 查询操作 2.1 通过用户 ID 查询用户信息、查询所有用户信息 (1) Mapper 接口 (2)UserMapper.xml 查询所有用户的具体实现 SQL (3)进行单元测试 3. 增加操作 3.1 在 mapper(interface)里面添加增加方法的声明 3.2 在 XMl 中添加 标签和增加的 sql 代码 3.3 生成

    2024年02月14日
    浏览(47)
  • 【Spring Boot】数据库持久层框架MyBatis — Spring Boot构建MyBatis应用程序

    Spring Boot是用于快速构建Spring应用程序的框架。MyBatis是一种Java持久化框架,可以帮助开发人员轻松地管理数据库。将Spring Boot与MyBatis结合使用可以使开发人员更容易地创建和管理数据库应用程序。 以下是使用Spring Boot构建MyBatis应用程序的步骤: 添加MyBatis依赖项:在项目的

    2024年02月10日
    浏览(56)
  • 【MyBatis学习】MyBatis操纵数据库进行查询操作 ?MyBatis与JDBC想比怎么样,赶快与我一起探索吧 ! ! !

    前言: 大家好,我是 良辰丫 ,从今天开始我们就要进入MyBatis的学习了,请君与我一起操纵数据库,MyBatis到底是什么呢?我们慢慢往下瞧! ! !💌💌💌 🧑个人主页:良辰针不戳 📖所属专栏:javaEE进阶篇之框架学习 🍎励志语句:生活也许会让我们遍体鳞伤,但最终这些伤口会成为我

    2024年02月09日
    浏览(51)
  • Spring日志完结篇,MyBatis操作数据库(入门)

    目录 Spring可以对日志进行分目录打印 日志持久化(让日志进行长期的保存) MyBatis操作数据库(优秀的持久层框架) MyBatis的写法 开发规范: 单元测试的写法 传递参数 他的意思是说spring相关只打印INFO级别的标准,但是他也能获取到debug级别的日志 日志设置颜色(只能控制控制

    2024年02月04日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包