文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MyBatis动态SQL:打造灵活可变的数据库操作

2023-09-07 18:04

关注

目录

动态SQL就是根据不同的条件或需求动态地生成查询语句,比如动态搜索条件、动态表或列名、动态排序等。

在我们填写一些信息时,有些信息是必填字段,有的则是非必填的,这些信息的传入就需要使⽤动态标签 if来判断了

创建这样想学生表就可以进行测试了

drop table if exists stu;create  table stu(    id int primary key auto_increment,    name varchar(100) ,    sex  varchar(10) ) default charset 'utf8mb4';

下面是xml语句

  <insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="com.example.mybatisdemo.model.User">        INSERT INTO stu(name        <if test="sex != null">, sexif>) VALUES (#{name}        <if test="sex != null">, #{sex}if>)    insert>

在这里插入图片描述
在这里插入图片描述
通过结果我们发现,数据已经被插入进入数据库了,并且sex为空。

如果所有字段都是⾮必填项,可以考虑使⽤trim标签结合if标签,对多个字段都采取动态⽣成的⽅式。
trim标签中有如下属性:

通过对前面的xml代码进行修改结果如下:

<insert id="insert" useGeneratedKeys="true" keyProperty="id" parameterType="com.example.mybatisdemo.model.User">        INSERT INTO stu        <trim prefix="(" suffix=")" suffixOverrides=",">            <if test="name != null ">name,if>            <if test="sex != null">sexif>        trim>        <trim prefix="values (" suffix=")" suffixOverrides=",">            <if test="name != null">#{name},if>            <if test="sex != null">#{sex}if>        trim>    insert>

在这里插入图片描述
在这里插入图片描述
数据添加成功,依旧只添加了姓名。

根据属性做 where 条件查询,⽤户对象中属性不为 null 的,都为查询条件。
写一个查询方法:

  @RequestMapping("selectByCondition")    public List<User> selectByCondition(User user){        return userService.selectByCondition(user);    }

xml代码如下:

 insert>    <select id="selectByCondition" parameterType="com.example.mybatisdemo.model.User"  >             select id,name,sex from stu        <where>            <if test="name != null "> and  name=#{name} if>            <if test=" sex != null"> and  sex= #{sex}  if>        where>    select>

根据name进行查询
在这里插入图片描述
在这里插入图片描述

<where>标签也可以使⽤ <trim prefix="where" prefixOverrides="and"> 替换。

根据传⼊的⽤户对象属性来更新⽤户数据,可以使⽤set标签来指定动态内容。
UserMapper 接⼝中修改⽤户⽅法:根据传⼊的⽤户 id 属性,修改其他不为 null 的属性:

int updateById(User user);

在xml中添加更新⽤户 sql:

 <update id="updateById" parameterType="com.example.mybatisdemo.model.User" >        update stu        <set>            <if test="name != null">                name=#{name},            if>            <if test="sex != null">                sex=#{sex},            if>        set>        where id=#{id}    update>

在这里插入图片描述
查看数据库发现修改成功
在这里插入图片描述

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

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

例如一次性删除多个id对应的用户

ArticleMapper 中新增接⼝⽅法:

int deleteByIds(List<Integer> ids);

UserMapper.xml 中新增删除 sql:

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

我们删除id为1,2,3的用户信息
在这里插入图片描述
在这里插入图片描述
通过查看数据库我们知道,删除已经成功。

以上就是我记录的一些动态SQL,如果想了解更多可前往mybatis官网查看

来源地址:https://blog.csdn.net/st200112266/article/details/132334192

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯