mysql动态标签_Mysql动态SQL语句标签

目录

动态SQL标签

一、动态SQL片段

1.1 sql 标签

1.2 include 标签

二、动态SQL标签

2.1 select 标签

2.2 insert 标签

2.3 delete 标签

2.4 update 标签

三、配置 JAVA 对象属性与查询结果集中列名对应关系

四、动态 sql 拼接

4.1 if 标签

4.2 foreach 标签

4.3 choose 标签

五、格式化输出

5.1 where 标签

5.2 set 标签

5.3 trim 标签

六、配置关联关系

6.1 collection 标签

6.2 association 标签

动态SQL标签

一、动态SQL片段

1.1 sql 标签

当多种类型的查询语句的查询字段或者查询条件相同时,可以将其定义为常量,方便调用,这样就可以通过SQL片段达到代码复用。为求 结构清晰也可将 sql 语句分解。

select count(*)

select *

1.2 include 标签

用于引用定义的常量

通过引用

from site_quote

二、动态SQL标签

2.1 select 标签

属性介绍:

id :唯一的标识符.

parameterType:传给此语句的参数的全路径名或别名 例:com.test.poso.User 或 user

resultType :语句返回值类型或别名。注意,如果是集合,那么这里填写的是集合的泛型,而不是集合本身(resultType 与 resultMap 不能并用)

select * from student where id=#{id}

2.2 insert 标签

属性介绍:

id :唯一的标识符

parameterType:传给此语句的参数的全路径名或别名 例:com.test.poso.User

INSERT INTO t_cms_ad_silder

(silde_name, img, silde_url, sort_id,

status, `type`, site_id, user_id, push_id)

VALUES

(#{item.sildeName}, #{item.img}, #{item.sildeUrl}, #{item.sortId},

#{item.status}, #{item.type}, #{item.siteId}, #{item.userId}, #{item.pushId})

insert into student

NAME,

#{name},

2.3 delete 标签

属性同 insert

delete from student where id=#{id}

2.4 update 标签

属性同 insert

UPDATE site_model_content SET

status = 1

WHERE content_id in

#{item}

三、配置 JAVA 对象属性与查询结果集中列名对应关系

resultMap 标签的使用

基本作用:

建立 SQL 查询结果字段与实体属性的映射关系信息查询的结果集转换为 java 对象,方便进一步操作。

将结果集中的列与 java 对象中的属性对应起来并将值填充进去

!注意:与 java 对象对应的列不是数据库中表的列名,而是查询后结果集的列名

select id,name,hobby,major,birthday,age from student where id=#{id}

标签说明:

主标签:

id:该 resultMap 的标志

type:返回值的类名,此例中返回 Studnet 类

子标签:

id:用于设置主键字段与领域模型属性的映射关系,此处主键为 ID,对应 id。

result:用于设置普通字段与领域模型属性的映射关系

四、动态 sql 拼接

4.1 if 标签

if 标签通常用于 WHERE 语句、UPDATE 语句、INSERT 语句中,通过判断参数值来决定是否使用某个查询条件、判断是否更新某一个字段、判断是否插入某个字段的值。

and NAME = #{name}

4.2 foreach 标签

foreach 标签主要用于构建 in 条件,可在 sql 中对集合进行迭代。也常用到批量删除、添加等操作中。

select name,hobby from student where id in

#{item}

属性介绍:

foreach标签主要有以下参数:

collection:collection 属性的值有三个分别是 list、array、map 三种,分别对应的参数类型为:List、数组、map 集合。

item :循环体中的具体对象,表示在迭代过程中每一个元素的别名,支持属性的点路径访问,如item.age,item.info.details,在list和数组中是其中的对象,在map中是value。

index :表示在迭代过程中每次迭代到的位置(下标),在list和数组中,index是元素的序号,在map中,index是元素的key,该参数可选。

open :前缀,表示该语句以什么开始

close :后缀,表示该语句以什么结束

separator :分隔符,表示迭代时每个元素之间以什么分隔,例如在in()的时候,separator=","会自动在元素中间用“,“隔开,避免手动输入逗号导致sql错误,如in(1,2,)这样。该参数可选。

4.3 choose 标签

有时候我们并不想应用所有的条件,而只是想从多个选项中选择一个。MyBatis 提供了 choose 元素,按顺序判断 when 中的条件出否成立,如果有一个成立,则 choose 结束。当 choose 中所有 when

的条件都不满则时,则执行 otherwise 中的 sql。类似于 Java 的 switch 语句,choose 为 switch,when 为 case,otherwise 则为 default。

if 是与(and)的关系,而 choose 是或(or)的关系。

!注意:

4.3.1 test中的key不能使用特殊字符 - 或者 +

4.3.2 test中的判断仅对!= null有效,不能使用==对字符串判断。

SELECT

smc.*,

u.avatar avatar

FROM

site_model_content smc

LEFT JOIN

t_sys_user u ON u.user_id = smc.user_id

smc.status=1

AND smc.site_id = #{siteId}

AND smc.category_id = #{categoryId}

AND

smc.category_id in

#{item}

AND

smc.recommend = #{isRecommend}

AND

smc.site_type like CONCAT('%', #{siteType}, '%')

GROUP BY smc.content_id

order by smc.content_id

order by smc.inputdate DESC

order by smc.inputdate

order by smc.updatedate DESC

order by smc.updatedate

order by smc.content_id DESC

SELECT * from STUDENT WHERE 1=1

AND name LIKE CONCAT(CONCAT('%', #{student}),'%')

AND hobby = #{hobby}

AND AGE = 15

五、格式化输出

5.1 where 标签

当 if 标签较多时,这样的组合可能会导致错误。 如下:

SELECT * from STUDENT WHERE

NAME LIKE CONCAT(CONCAT('%', #{name}),'%')

AND hobby = #{hobby}

当 name 值为 null 时,查询语句会出现 “WHERE AND” 的情况,解决该情况除了将"WHERE"改为“WHERE 1=1”之外,还可以利用 where 标签。

这个“where”标签会知道如果它包含的标签中有返回值的话,它就插入一个‘where’。此外,如果标签返回的内容是以 AND 或 OR 开头的,则它会剔除掉。

SELECT * from STUDENT

and endDate >= #{startDate}

and endDate <= #{endDate}

NAME LIKE CONCAT(CONCAT('%', #{name}),'%')

AND hobby = #{hobby}

标签可以自动的将第一个条件前面的逻辑运算符 (or ,and) 去掉,正如代码中写的,id 查询条件前面是有“and”关键字的,但是在打印出来的 SQL 中却没有,这就是where标签的作用。

5.2 set 标签

没有使用 if 标签时,如果有一个参数为 null,都会导致错误。当在 update 语句中使用 if 标签时,如果最后的 if 没有执行,则或导致逗号多余错误。使用 set 标签可以将动态的配置 set

关键字,和剔除追加到条件末尾的任何不相关的逗号。

UPDATE STUDENT

SET NAME = #{name},

MAJOR = #{major},

HOBBY = #{hobby}

WHERE ID = #{id};

UPDATE STUDENT SET

NAME = #{name},

MAJOR = #{major},

HOBBY = #{hobby}

WHERE ID = #{id};

使用 set+if 标签修改后,如果某项为 null 则不进行更新,而是保持数据库原值。

UPDATE STUDENT

NAME = #{name},

MAJOR = #{major},

HOBBY = #{hobby}

WHERE ID = #{id};

5.3 trim 标签

trim标记是一个格式化的标记,主要用于拼接sql的条件语句(前缀或后缀的添加或忽略),可以完成set或者是where标记的功能。

trim属性主要有以下四个

prefix:在trim标签内sql语句加上前缀

suffix:在trim标签内sql语句加上后缀

prefixOverrides:指定去除多余的前缀内容,如:prefixOverrides=“AND | OR”,去除trim标签内sql语句多余的前缀"and"或者"or"。

suffixOverrides:指定去除多余的后缀内容。

select

quote_id as quoteId,

site_id as siteId,

site_name as siteName,

city,

area,

customer_name as customerName,

customer_phone as customerPhone,

create_time as createTime,

status,

search_key as searchKey

from site_quote

customer_name like CONCAT('%', #{customerName}, '%')

and customer_phone = #{customerPhone}

and create_time = #{createTime}

and city = #{city}

and area = #{area}

and site_id = #{siteId}

and site_name = #{siteName}

and status = #{status}

and search_key = #{searchKey}

ORDER BY create_time DESC

如果status和searchKey的值都不为空的话,会忽略最后一个“,” 。

六、配置关联关系

6.1 collection 标签

6.2 association 标签

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值