ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mybatis动态SQL

2021-12-29 16:02:14  阅读:116  来源: 互联网

标签:SQL email emp sql mybatis 动态 where id select


在进行以下操作的时候,我们需要做一些准备工作

        使用的工具是IDEA,还需要一个数据库

        

               【注:如需要了解包中的具体内容,可参考文件具体内容】

1.if:判断属性为每个条件时语句加入到sql中

select *  from table where
    <if test="lastName != null">
    last_name=#{lastName}
	</if>
<if test="email != null">
	and email=#{email}
</if>

2.trim(where,set)【只在XXXMapper.xml中使用】

        trim自定义字符串:将条件包在trim中,可以添加前缀或者后缀,也可以去除拼接后的条件的前面或者后面的某个多余的字符;

<trim prefix="加前缀" prefixOverrides="去除某个字符前缀" suffix="加后缀" suffixOverrides="去除某个字符后缀"></trim>

 3.choose(wheree,set)

        使用类似于java中的Switch-case-default

<select id="getEmpByIfChoose" resultType="mybatis.bean.Employee">
    select * from t_emp
    <where>
    <choose>
        <when test="id != null">  id =#{id} </when>
        <when test="lastName != null">  last_name like #{lastName}</when>
        <when test="email != null">email =#{email}</when>
        <otherwise>gender =0 </otherwise>
    </choose>
    </where>
</select>

注:<when  test="  "/>:表示当满足test的条件的时候就会去执行

        <otherwise>:表示当前面所有的条件都不满足的时候去执行

4.foreach

foreach遍历,可以通过遍历来控制sql地参数,语句等相关地循环操作;也可以称为批量操作。

<select id="getEmpByListId" resultType="mybatis.bean.Employee">
select * from t_emp  where id in(1,2,3)
    <foreach collection="ids"  item="emp_id" separator="," open="(" close=")">
        #{emp_id}
    </foreach>
</select>

in后面的是查询的多个条件;

collection:指要遍历的集合

item:遍历集合时的元素存放的变量值

separator:指定遍历值的分隔符

5.两个内置参数

两个内置参数分别是:

        _parameter:指的是整个参数,如果需要获取参数使用paramter.属性名;通常放在使用where之前判断参数是否为空;

        _databaseld:可以根据当前使用环境获取数据库别名

        ①    _parameter

<insert id="addEmpByIdParam">
    insert into t_emp(last_name,gender,email)
    values(#{_paramter.lastName})
    select * from t_emp
    <if test="_parameter != null">
        where id=#{id}
    </if>
</insert>

        ② _databaseld

<select id="getEmpByDatabaseId" resultType="mybatis.bean.Employee">
    <if test="_databaseId==mysql">
        select * from t_emp
    </if>
    <if test="_databaseId=='oracle'">
        select * from t_emp
    </if>
</select>

6.Bind标签

bind:绑定;可以将传递过来的值,变成应该特定的变量;方便使用

<select id="getEmpByNameBind" resultType="mybatis.bean.Employee">
   <bind name="_lastName" value=" '%' + lastName + '%' "/>
    select * from t_emp
    where last_name like  #{_lastName}
</select>

7.sql标签

①抽取通用的sql代码块:可以将我们公共的sql语句放在sql标签中,使用时引用即可

         1.id:指定该sql标签的唯一标签;可以被别的语句引用

        【表示的是抽取公共部分】

<sql id="public_colum">
    <if test="_databaseId == mysql">
        last_name,gender,email
    </if>
    <if test="_databaseId == 'oracle'">
        last_name01,gender01,email01
    </if>
</sql>

          2. 使用include可以引用抽取的sql【在需要使用的地方进行操作】

          3.include中还可以定义变量

 <include refid="public_colum"></include>

以上的内容是自己总结的一些简单的知识点,希望大家多多支持!!

标签:SQL,email,emp,sql,mybatis,动态,where,id,select
来源: https://blog.csdn.net/weixin_54721820/article/details/122201807

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有