久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

        手機(jī)站
        千鋒教育

        千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

        千鋒教育

        掃一掃進(jìn)入千鋒手機(jī)站

        領(lǐng)取全套視頻
        千鋒教育

        關(guān)注千鋒學(xué)習(xí)站小程序
        隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

        當(dāng)前位置:首頁  >  技術(shù)干貨  > MyBatis之動(dòng)態(tài)SQL語句

        MyBatis之動(dòng)態(tài)SQL語句

        來源:千鋒教育
        發(fā)布人:小鋒
        時(shí)間: 2019-09-11 16:34:00 1568190840

          前言

          我們?cè)谶M(jìn)行項(xiàng)目開發(fā)時(shí),經(jīng)常遇到需要根據(jù)不同的需求,對(duì)原有SQL語句的內(nèi)容進(jìn)行修改,原來這是一個(gè)比較頭疼的問題,因?yàn)樾枰獙?duì)原有SQL語句進(jìn)行拼接、重組,費(fèi)時(shí)費(fèi)力還容易出錯(cuò),今天我們將學(xué)習(xí)MyBatis的動(dòng)態(tài)SQL功能,可以解決這個(gè)問題。

          動(dòng)態(tài)SQL語句簡(jiǎn)介

          動(dòng)態(tài)SQL語句是MyBatis的一個(gè)非常強(qiáng)大的功能,允許我們根據(jù)不同的需求,組合出不同的SQL語句,在select、update、insert、delete標(biāo)簽中都可以添加動(dòng)態(tài)SQL語句。

          IF標(biāo)簽

          IF標(biāo)簽可以在條件成立時(shí),在SQL語句中插入IF標(biāo)簽中的內(nèi)容,不成立就不插入

          示例:

          <select id="selectUserByUser" parameterType="User" resultMap="userMap">

          select * from tb_user where

          <if test="realname != null">

          u_realname=#{realname}

          </if>

          <if test="gender != null">

          and u_gender=#{gender}

          </if>

          </select>

          上面代碼中是按照User對(duì)象的各個(gè)屬性進(jìn)行查詢,如果姓名不為空就插入姓名作為條件,如果性別不為空就插入性別作為條件。

          但是我們會(huì)發(fā)現(xiàn)如果姓名為空,性別不為空,SQL語句就會(huì)變成:select * from tb_user where and u_gender=#{gender}

          或者姓名、性別都為空就會(huì)變成:select * from tb_user where

          這樣都會(huì)出現(xiàn)語法錯(cuò)誤,這樣我們就需要下一個(gè)標(biāo)簽:where

          Where標(biāo)簽

          Where標(biāo)簽 用于配置where條件,會(huì)去掉多余的and或or,如果一個(gè)條件都不成立,會(huì)自動(dòng)去掉sql中的where。

          代碼改為:

          <select id="selectUserByUser" parameterType="User" resultMap="userMap">

          select * from tb_user

          <where>

          <if test="realname != null">

          u_realname=#{realname}

          </if>

          <if test="gender != null">

          and u_gender=#{gender}

          </if>

          <if test="age != null">

          and u_age=#{age}

          </if>

          </where>

          </select>

          這樣就不會(huì)出現(xiàn)上面可能的錯(cuò)誤了

          Trim標(biāo)簽

          上面where標(biāo)簽的功能,也可以使用trim標(biāo)簽實(shí)現(xiàn),trim能去掉多余的前綴和后綴。

          語法:

          <trim prefix="前綴SQL" suffix="后綴" prefixOverrides="刪除前面的符號(hào)" suffixOverrides="刪除后面的符號(hào)">

          <if標(biāo)簽>

          </trim>

          示例:

          <trim prefix="where" prefixOverrides="and|or">

          ...

          </trim>

          Set標(biāo)簽

          用于配置update語句中的set部分,可以自動(dòng)添加set關(guān)鍵字,刪除多余的逗號(hào)

          示例:

          <update id="update" parameterType="User">

          update tb_user

          <set>

          <if test="name != null">

          u_name=#{name},

          </if>

          <if test="password != null">

          u_password=#{password},

          </if>

          </set>

          where u_id=#{id}

          </update>

          也可以使用trim實(shí)現(xiàn):

          <trim prefix="set" suffixOverrides=",">

          <if test="name != null">

          u_name=#{name},

          </if>

          ...

          </trim>

          Foreach標(biāo)簽

          用于循環(huán)遍歷集合或數(shù)組的值,如:按多個(gè)人姓名查詢

          select * from tb_user where u_realname in ('張三','李四'....)

          語法:

          <foreach collection="集合名" item="變量名" index="下標(biāo)名" open="開始符號(hào)" close="結(jié)束符號(hào)" seperator="分割符號(hào)">

          #{變量名}

          </foreach>

          注意:集合名在Mapper接口中需要使用@Param注解配置

          示例:

          <select id="selectUserByRealnames" resultMap="userMap">

          select * from tb_user where u_realname in

          <foreach collection="realnames" item="name" index="i" separator="," open="(" close=")">

          #{name}

          </foreach>

          </select>

          Choose標(biāo)簽

          Java中有if,也會(huì)有if-else、switch語句來判斷多個(gè)條件,MyBatis也有Choose標(biāo)簽可以進(jìn)行多條件判斷

          示例:

          <select id="findActiveBlogLike"

          resultType="Blog">

          SELECT * FROM BLOG WHERE state = ‘ACTIVE’

          <choose>

          <when test="title != null">

          AND title like #{title}

          </when>

          <when test="author != null">

          AND author_name like #{author}

          </when>

          <otherwise>

          AND featured = 1

          </otherwise>

          </choose>

          </select>

          這里從第一個(gè)when進(jìn)行判斷,如果成立就插入條件,結(jié)束choose標(biāo)簽,如果不成立再判斷下一個(gè)when,如果所有when都不成立,就插入otherwise中的語句。

          總結(jié)

          動(dòng)態(tài)SQL語句是MyBatis非常重要的特性,能夠讓我們根據(jù)不同需求組合SQL語句,而且不容易出錯(cuò)。動(dòng)態(tài)SQL的標(biāo)簽有:if、where、set、choose、foreach等。掌握好它們我們可以寫出更加靈活、高效的數(shù)據(jù)庫操作代碼。

        tags:
        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
        請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
        免費(fèi)領(lǐng)取
        今日已有369人領(lǐng)取成功
        劉同學(xué) 138****2860 剛剛成功領(lǐng)取
        王同學(xué) 131****2015 剛剛成功領(lǐng)取
        張同學(xué) 133****4652 剛剛成功領(lǐng)取
        李同學(xué) 135****8607 剛剛成功領(lǐng)取
        楊同學(xué) 132****5667 剛剛成功領(lǐng)取
        岳同學(xué) 134****6652 剛剛成功領(lǐng)取
        梁同學(xué) 157****2950 剛剛成功領(lǐng)取
        劉同學(xué) 189****1015 剛剛成功領(lǐng)取
        張同學(xué) 155****4678 剛剛成功領(lǐng)取
        鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
        董同學(xué) 138****2867 剛剛成功領(lǐng)取
        周同學(xué) 136****3602 剛剛成功領(lǐng)取
        相關(guān)推薦HOT
        市場(chǎng)上C++主要是用來做什么的?

        C++是一種廣泛應(yīng)用于市場(chǎng)上的編程語言,具有高性能和強(qiáng)大的功能。它的設(shè)計(jì)目標(biāo)是提供高效的底層控制和與硬件交互的能力,同時(shí)保持可移植性和可...詳情>>

        2023-10-14 06:01:51
        為什么說PHP與Swoole是優(yōu)異組合?

        PHP與Swoole在Web開發(fā)和網(wǎng)絡(luò)編程領(lǐng)域中,共同構(gòu)成了一種強(qiáng)大的解決方案。什么是PHPPHP是一種廣泛使用的開源服務(wù)器端腳本語言,特別適用于Web開...詳情>>

        2023-10-14 05:08:41
        Javaweb開發(fā)為什么需要分前后端?

        Javaweb開發(fā)采用前后端分離的設(shè)計(jì)模式是有著諸多理由的,以下分析了這種設(shè)計(jì)模式的主要特點(diǎn)和優(yōu)勢(shì)。什么是前后端分離在Web開發(fā)中,前后端分離是...詳情>>

        2023-10-14 05:05:24
        瀑布開發(fā)和敏捷開發(fā)的區(qū)別是什么?

        一、開發(fā)流程不同瀑布開發(fā)采用線性的開發(fā)流程,按照預(yù)先規(guī)劃的順序依次進(jìn)行需求分析、設(shè)計(jì)、編碼、測(cè)試和維護(hù)等環(huán)節(jié)。每個(gè)環(huán)節(jié)都有明確的交付物...詳情>>

        2023-10-14 04:47:33
        有哪款比較好用的免費(fèi)的缺陷管理工具?

        一、BugzillaBugzilla是一款廣泛使用的免費(fèi)缺陷管理工具,具備完善的缺陷管理功能,并支持多用戶協(xié)同工作。Bugzilla提供了強(qiáng)大的搜索和過濾功能...詳情>>

        2023-10-14 04:40:43
        快速通道
        湖口县| 霍邱县| 鲜城| 什邡市| 莒南县| 丹阳市| 平江县| 腾冲县| 绥芬河市| 黄梅县| 上饶市| 江油市| 中山市| 辽宁省| 望都县| 贺州市| 中阳县| 姚安县| 邵阳市| 翁牛特旗| 山阴县| 和政县| 彭州市| 南安市| 伊宁县| 怀宁县| 洛阳市| 防城港市| 清涧县| 阿巴嘎旗| 咸宁市| 平舆县| 海南省| 宁陵县| 仪征市| 马公市| 龙川县| 南汇区| 邢台县| 大田县| 长武县|