首页 > 数据库 >动态SQL

动态SQL

时间:2023-07-25 15:44:51浏览次数:27  
标签:COMMENT title author blog SQL 动态 where

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

利用动态 SQL 这一特性可以彻底摆脱这种痛苦。

动态 SQL 元素和 JSTL 或基于类似 XML 的文本处理器相似。在 MyBatis 之前的版本中,有很多元素需要花时间了解。MyBatis 3 大大精简了元素种类,现在只需学习原来一半的元素便可。

MyBatis 采用功能强大的基于 OGNL 的表达式来淘汰其它大部分元素。


if
choose (when, otherwise)
trim (where, set)
foreach


搭建环境

CREATE TABLE `blog` (
  `id` varchar(50) NOT NULL COMMENT '博客id',
  `title` varchar(100) NOT NULL COMMENT '博客标题',
  `author` varchar(30) NOT NULL COMMENT '博客作者',
  `create_time` datetime NOT NULL COMMENT '创建时间',
  `views` int(30) NOT NULL COMMENT '浏览量'
) ENGINE=InnoDB DEFAULT CHARSET=utf8

创建一个基础工程

  1. 导包

  2. 编写配置文件

  3. 编写实体类

  4. 编写实体类对应Mapper接口 和 Mapper.XML文件

if

<select id="queryBlogIF" parameterType="map" resultType="blog">

select * from mybatis.blog where 1=1

<if test="title != null">

and title = #{title}

</if>

<if test="author != null">

and author = #{author}

</if>

</select>

trim (where,set)

select * from mybatis.blog
<where>
    <if test="title != null">
        title = #{title}
    </if>
    <if test="author != null">
        and author = #{author}
    </if>
</where>
<update id="updateBlog" parameterType="map">
    update mybatis.blog
    <set>
        <if test="title != null">
            title = #{title},
        </if>
        <if test="author != null">
            author = #{author}
        </if>
    </set>
    where id = #{id}
</update>

choose (when, otherwise)


    <select id="queryBlogChoose" parameterType="map" resultType="blog">
        select * from mybatis.blog
        <where>
            <choose>
                <when test="title != null">
                    title = #{title}
                </when>
                <when test="author != null">
                    and author = #{author}
                </when>
                <otherwise>
                    and views = #{views}
                </otherwise>
            </choose>
        </where>
    </select>

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

SQL片段

有的时候,我们可能会将一些功能的部分抽取出来,方便复用!

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

    <sql id="if-title-author">
        <if test="title != null">
            title = #{title}
        </if>
        <if test="author != null">
            and author = #{author}
        </if>
    </sql>
    
  2. 在需要使用的地方使用Include标签引用即可

    <select id="queryBlogIF" parameterType="map" resultType="blog">
        select * from mybatis.blog
        <where>
            <include refid="if-title-author"></include>
        </where>
    </select>
    

注意事项:

  • 最好基于单表来定义SQL片段!
  • 不要存在where标签
 

标签:COMMENT,title,author,blog,SQL,动态,where
From: https://www.cnblogs.com/fanstu/p/17580035.html

相关文章

  • 排查mysql pxc集群故障节点
    排查MySQLPXC集群故障节点MySQLPXC(PerconaXtraDBCluster)是一个高可用性的数据库集群解决方案,它基于MySQL和GaleraCluster技术实现。在实际运行中,可能会遇到一些节点故障的情况,本文将介绍如何排查MySQLPXC集群的故障节点,并给出相应的代码示例。1.检查集群状态在排......
  • MySQL参数
     最大连接数showvariableslike'max_connections';超时时间showglobalvariableslike'%timeout%'; 超时分析:TimeoutError:QueuePoollimitofsize10overflow10reached,connectiontimedout,timeout30https://reality0ne.com/sqlalchemy-zhong-......
  • 使用sql脚本建立sql server备份作业
    使用SQL脚本建立SQLServer备份作业在SQLServer中,备份数据是一项非常重要的任务。为了简化备份过程并确保数据的安全性,可以使用SQLServer的作业来自动执行备份任务。本文将介绍如何使用SQL脚本建立SQLServer备份作业。创建备份目录首先,我们需要创建一个用于存储备份文件的目......
  • Mysql联合索引是如何找到数据的
    比较简单的是单列索引(b+tree)。遇到多条件查询时,不可避免会使用到多列索引。联合索引又叫复合索引。b+tree结构如下:每一个磁盘块在mysql中是一个页,页大小是固定的,mysqlinnodb的默认的页大小是16k,每个索引会分配在页上的数量是由字段的大小决定。当字段值的长度越长,每一页上的数......
  • ubuntu22.04部署mysql---主从
    1、首先部署mysql主服务:详见上一篇《ubuntu22.04部署mysql---单机》https://blog.51cto.com/u_14175560/6766135上述部署好后,主节点server_id:vim/etc/mysql/my.cnf##新增配置:[mysqld]server_id=1重启mysql:systemctlrestartmysql登录mysql,指定从节点IP,运行下述(注意修改......
  • Oracle数据类型与对应的PostgreSQL数据类型(oracle 19c 迁移到kingbase)
    Oracle数据类型与对应的PostgreSQL数据类型的映射:1.数值类型:-OracleNUMBER->PostgreSQLNUMERIC-OracleINTEGER->PostgreSQLINTEGER-OracleBINARY_FLOAT->PostgreSQLREAL-OracleBINARY_DOUBLE->PostgreSQLDOUBLEPRECISION2.字符串类型:-Or......
  • 常用的Access数据库Sql操作辅助类库
    ///<summary>///常用的Access数据库Sql操作辅助类库///</summary>publicclassOleDbHelper{privatestringconnectionString="";privateconststringaccessPrefix="Provider=Microsoft.Jet.OLEDB.4.0;Data......
  • OSql命令操作函数(可用于安装程序的时候数据库脚本执行)
    ///<summary>///OSql命令操作函数(可用于安装程序的时候数据库脚本执行)///</summary>publicclassSqlScriptHelper{#regionOSql操作函数///<summary>///本地执行SQL脚本///</summary>///<paramname=......
  • Centos8/linux下载、安装、配置、连接MySQL5.7(rpm方式)
    目录问题现象:问题分析:解决方法:下载:安装:配置:连接:拓展 问题现象:    今天在使用Centos8安装MySQL5.7的rpm包时,出现如下报错:        仓库"MySQL5.7CommunityServer"的GPG公钥已安装,但是不适用于此软件包。        最终问题解决了,但......
  • SQL 语句获取数据库各表分配空间、占用空间、记录行数
    SELECT    t.NAME AS TableName,    s.Name AS SchemaName,    p.rows AS RowCounts,    SUM(a.total_pages)*8 AS TotalSpaceKB,    CAST(ROUND(((SUM(a.total_pages)*8)/1024.00),2) AS NUMERIC(36,2)) AS TotalSpaceMB,    SUM(a.......