Mybatis动态SQL的示例代码

 更新时间:2021年10月28日 08:37:12   作者:shuati2000  
本文主要介绍了Mybatis动态SQL的示例代码,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

什么是动态SQL:动态SQL就是根据不同的条件生成不同的SQL语句

基本流程

1,数据库准备一张表
2,导包
3,编写核心配置文件
4,编写实体类
5,编写实体类对应的Mapper和Mapper.xml文件
6,在核心配置文件中注册Mapper.xml
7,测试

开启自动驼峰命名规则映射

    <!--开启驼峰命名映射-->
    <setting name="mapUnderscoreToCamelCase" value="true"/>

即在数据库中为create_time对应Java实体类属性createTime

IF,Where

    <select id="queryListIf" parameterType="map" resultType="Blog">
        select * from blog 
        <where>
            <if test="title != null">
             title = #{title}
         </if>
         <if test="author != null">
             and author = #{author}
         </if>
        </where>
      </select>

Where的作用:当至少有一个满足条件时添加Where,且会判断后面加的第一条语句,若是and开头,则会自动将这个and删除
本质上还是在拼接SQL,上述当没有满足条件时查询blog表中的所有,当满足条件时,则拼接SQL

Set

 <update id="updateBlog" parameterType="map">
        update blog
        <set>
            <if test="title != null">
                title = #{title},
            </if>
            <if test="author != null">
                author = #{author}
            </if>
        </set>
        where id = #{id}
    </update>

Set的作用:至少有一个满足条件时添加Set,且会判断后面加的最后的语句,若是",“结尾,则会自动将这个”,"删除

Choose(when,otherwise)

    <select id="queryNoLimit" parameterType="map" resultType="Blog">
        select * from blog
        <where>
            <choose>
                <when test="title != null">
                    title = #{title}
                </when>
                <when test="author != null">
                    and author = #{author}
                </when>
                <otherwise>
                    and `view` = #{view}
                </otherwise>
            </choose>
        </where>
    </select>

choose(when,otherwise)类似与Java中的switch(case,default),choose进入选择,when当什么什么时,进行条件判断,若满足条件,则执行条件中的内容,后面的when,otherwise将不再执行,otherwise当所有when都不满足条件时执行

ForEach

    <select id="queryBlogById" parameterType="map" resultType="blog">
        select * from blog
        <where>
            <foreach collection="ids" item="id" open="(" close=")" separator="or">
                id = #{id}
            </foreach>
        </where>
    </select>

上述为,一个集合ids存储id的内容,根据这个集合查询所包含的id,open为开始,close为结束,separator为分隔符
才用map.put(“ids”,list)的方式导入集合

建议:现在Mysql中写出完整的sql,再对应的去修改即可

SQL片段

将一些功能的部分抽取出来方便复用

使用SQL标签抽取公共的部分

    <sql id="titleAuthor">
        <if test="title != null">
            title = #{title}
        </if>
        <if test="author != null">
            and author = #{author}
        </if>
    </sql>

在需要的地方使用include标签引用即可

    <select id="queryListIf" parameterType="map" resultType="Blog">
        select * from blog
        <where>
            <include refid="titleAuthor"></include>
        </where>
    </select>

注意事项:
1.最好基于单表来定义SQL片段
2.不要存在where标签

总结

所谓的动态SQL就是在拼接SQL语句,我们只要保证SQL的正确性,按照SQL的格式去排列组合就可以了

到此这篇关于Mybatis动态SQL的示例代码的文章就介绍到这了,更多相关Mybatis动态SQL内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java 非阻塞I/O使用方法

    Java 非阻塞I/O使用方法

    这篇文章主要介绍了Java 非阻塞I/O使用方法,文中涉及非阻塞I/O的简介,同时向大家展示了利用非阻塞I/O实现客户端的方法,需要的朋友可以参考下。
    2017-09-09
  • 聊聊Java的switch为什么不支持long

    聊聊Java的switch为什么不支持long

    这篇文章主要介绍了Java的switch为什么不支持long,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • 详解SpringBoot 创建定时任务(配合数据库动态执行)

    详解SpringBoot 创建定时任务(配合数据库动态执行)

    本篇文章主要介绍了SpringBoot 创建定时任务(配合数据库动态执行),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • java实现压缩字符串和java字符串过滤

    java实现压缩字符串和java字符串过滤

    这篇文章主要介绍了java实现压缩字符串和java字符串过滤,需要的朋友可以参考下
    2014-04-04
  • Java实现常见排序算法的优化

    Java实现常见排序算法的优化

    今天给大家带来的是关于Java的相关知识,文章围绕着Java实现常见排序算法的优化展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-01-01
  • 详解Java I/O流中的字符流有哪些

    详解Java I/O流中的字符流有哪些

    字节流的功能已经十分强大,几乎可以直接或间接地处理任何类型的输入/输出操作,但它却不能直接操作16位的Unicode字符,这就需要使用字符流,所以在今天的内容中,小编会给大家讲解IO流中的字符流,希望各位能够继续耐心学习
    2023-10-10
  • MyBatis-Plus不使用数据库默认值的问题及解决

    MyBatis-Plus不使用数据库默认值的问题及解决

    这篇文章主要介绍了MyBatis-Plus不使用数据库默认值的问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Java动态代理Proxy应用和底层源码详细分析

    Java动态代理Proxy应用和底层源码详细分析

    Java动态代理是一种在运行时生成代理类的机制,用于代替手动编写代理类的过程,这篇文章主要给大家介绍了关于Java动态代理Proxy应用和底层源码详细分析的相关资料,需要的朋友可以参考下
    2024-03-03
  • 浅析java快速排序算法

    浅析java快速排序算法

    这篇文章主要介绍了浅析java快速排序算法,需要的朋友可以参考下
    2015-02-02
  • servlet之ServletContext简介_动力节点Java学院整理

    servlet之ServletContext简介_动力节点Java学院整理

    这篇文章主要介绍了servlet之ServletContext简介,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-07-07

最新评论