【MySQL⽤法】MySQL动态SQL语句标签的详细使⽤⽅法说
明
本⽂⽬录
⼀、动态SQL⽚段
1.1 sql 标签
当多种类型的查询语句的查询字段或者查询条件相同时,可以将其定义为常量,⽅便调⽤,这样就可以通过SQL⽚段达到代码复⽤。为求 <select> 结构清晰也可将 sql 语句分解。
<!-- 动态条件分页查询 -->
<sql id="sql_count">
select count(*)
</sql>
<sql id="sql_select">
select *
</sql>
1.2 include 标签
⽤于引⽤定义的常量
通过<include refid = "sql_count"/>引⽤
<select id="selectCount" resultType="com.ity.Quote">
<include refid = "sql_count"/>
from site_quote
simulink仿真与gui界面</select>
⼆、动态SQL标签
2.1 select 标签
属性介绍:
id :唯⼀的标识符.
parameterType:传给此语句的参数的全路径名或别名 例:st.poso.User 或 user
resultType :语句返回值类型或别名。注意,如果是集合,那么这⾥填写的是集合的泛型,⽽不是集合本⾝(resultType 与resultMap 不能并⽤)
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="Object">
select * from student where id=#{id}
</select>
2.2 insert 标签
属性介绍:
id :唯⼀的标识符
parameterType:传给此语句的参数的全路径名或别名 例:st.poso.User
<insert id="insertMoreSilder" parameterType="com.del.TCmsAdSilder">
INSERT INTO t_cms_ad_silder
(silde_name, img, silde_url, sort_id,
status, `type`, site_id, user_id, push_id)
VALUES
<foreach collection="list" item="item" separator=",">
(#{item.sildeName}, #{item.img}, #{item.sildeUrl}, #{item.sortId},
#{item.status}, #{pe}, #{item.siteId}, #{item.userId}, #{item.pushId})
</foreach>
</insert>
<insert id="insert" parameterType="Object">
insert into student
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="name != null"> NAME, </if>
</trim>
<trim prefix="values(" suffix=")" suffixOverrides=",">
<if test="name != null"> #{name}, </if>
</trim>
</insert>
2.3 delete 标签
属性同 insert
<delete id="deleteByPrimaryKey" parameterType="Object">
delete from student where id=#{id}
</delete>
2.4 update 标签
属性同 insert
<!--修改发布状态-->
<update id="updateAudit">
UPDATE site_model_content SET
status = 1
WHERE content_id in
<foreach collection="ids" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</update>
三、配置 JAVA 对象属性与查询结果集中列名对应关系
resultMap 标签的使⽤
基本作⽤:
建⽴ SQL 查询结果字段与实体属性的映射关系信息查询的结果集转换为 java 对象,⽅便进⼀步操作。
将结果集中的列与 java 对象中的属性对应起来并将值填充进去
注意:与 java 对象对应的列不是数据库中表的列名,⽽是查询后结果集的列名
<resultMap id="BaseResultMap" type="com.del.Student">mysql语句顺序
<id property="id" column="id" />
<result column="NAME" property="name" />
<result column="HOBBY" property="hobby" />
<result column="MAJOR" property="major" />莎莎源码靠谱吗
<result column="BIRTHDAY" property="birthday" />
<result column="AGE" property="age" />
</resultMap>
<!--查询时resultMap引⽤该resultMap -->
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="Object">
select id,name,hobby,major,birthday,age from student where id=#{id}
</select>
标签说明:
主标签:
id:该 resultMap 的标志
type:返回值的类名,此例中返回 Studnet 类
⼦标签:
id:⽤于设置主键字段与领域模型属性的映射关系,此处主键为 ID,对应 id。
result:⽤于设置普通字段与领域模型属性的映射关系
四、动态 sql 拼接
4.1 if 标签
if 标签通常⽤于 WHERE 语句、UPDATE 语句、INSERT 语句中,通过判断参数值来决定是否使⽤某个查询条件、判断是否更新某⼀个字段、判断是否插⼊某个字段的值。
<if test="name != null and name != ''">
and NAME = #{name}
</if>
4.2 foreach 标签
foreach 标签主要⽤于构建 in 条件,可在 sql 中对集合进⾏迭代。也常⽤到批量删除、添加等操作中。
<!-- in查询所有,不分页 -->
throws是什么意思中文<select id="selectIn" resultMap="BaseResultMap">
select name,hobby from student where id in
<foreach item="item" index="index" collection="list" open="(" separator="," close=")">
#{item}
</foreach>
数据库管理系统能实现的操作</select>
属性介绍:
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 id="selectRecommendContentList" resultType="java.util.Map">
SELECT
smc.*,
u.avatar avatar
FROM
site_model_content smc
LEFT JOIN
t_sys_user u ON u.user_id = smc.user_id
<trim prefix="WHERE (" suffix=")" prefixOverrides="AND|OR">
smc.status=1
<if test="siteId != null">
AND smc.site_id = #{siteId}
</if>
<if test="categoryId != null">
AND smc.category_id = #{categoryId}
</if>
<if test="categoryIds!=null and isRecommend==1">
AND
smc.category_id in
java换行<foreach item="item" index="index" collection="categoryIds" open="(" separator="," close=")"> #{item}
</foreach>
</if>
<if test='isRecommend != null and isRecommend==1'>
AND
</if>
<if test='siteType!=null'>
AND
smc.site_type like CONCAT('%', #{siteType}, '%')
</if>
</trim>
GROUP t_id
<choose>
<when test="orderBy==1">
order t_id
</when>
<when test="orderBy==2">
order by smc.inputdate DESC
</when>
<when test="orderBy==3">
order by smc.inputdate
</when>
<when test="orderBy==4">
order by smc.updatedate DESC
</when>
<when test="orderBy==5">
order by smc.updatedate
</when>
<otherwise>
order t_id DESC
</otherwise>
</choose>
</select>
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论