最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis?Mapper.XML?標(biāo)簽使用小結(jié)

 更新時(shí)間:2024年10月22日 09:12:09   作者:VipSoft  
在MyBatis中,通過resultMap可以解決字段名和屬性名不一致的問題,對(duì)于復(fù)雜的查詢,引用實(shí)體或使用<sql>標(biāo)簽可以定義復(fù)用的SQL片段,提高代碼的可讀性和編碼效率,使用這些高級(jí)映射和動(dòng)態(tài)SQL技巧,可以有效地處理復(fù)雜的數(shù)據(jù)庫交互場景

直接將值返回給對(duì)象

<select id="list" resultType="com.vipsoft.base.entity.UserInfo">
   SELECT Id,Title FROM User
</select>

如果字段和屬性名不一致時(shí),通過 resultMap 做映射

<resultMap id="StudentResult" type="com.mybatis3.domain.Student">
  <id column="stud_id" property="studId"  jdbcType="VARCHAR"/>
  <result column="user_name" property="name"  jdbcType="VARCHAR"/>
  <result column="email"  property="email"  jdbcType="VARCHAR" />
  <result column="phone"  property="phone"  jdbcType="VARCHAR" />
  <result column="status" property="status" jdbcType="INTEGER" />
  <result column="create_time" property="createTime" jdbcType="TIMESTAMP" />
</resultMap>
<select id="findAllStudents" resultMap="StudentResult" >
  SELECT * FROM STUDENTS
</select>

實(shí)體引用另一個(gè)實(shí)體的查詢結(jié)果返回

<resultMap type="Course" id="CourseResult">
  <id column="course_id" property="courseId"/>
  <result column="name" property="name"/>
  <result column="description" property="description"/>
  <result column="start_date" property="startDate"/>
  <result column="end_date" property="endDate"/>
</resultMap>
<resultMap type="Tutor" id="TutorResult">
  <id column="tutor_id" property="tutorId"/>
  <result column="tutor_name" property="name"/>
  <result column="email" property="email"/>
  <collection property="courses" resultMap="CourseResult"/>
</resultMap>
<select id="findTutorById" parameterType="int" resultMap="TutorResult">
  SELECT T.TUTOR_ID, T.NAME AS TUTOR_NAME, EMAIL, C.COURSE_ID, C.NAME, DESCRIPTION, START_DATE, END_DATE
  FROM TUTORS T LEFT OUTER JOIN ADDRESSES A ON T.ADDR_ID=A.ADDR_ID
  LEFT OUTER JOIN COURSES C ON T.TUTOR_ID=C.TUTOR_ID
  WHERE T.TUTOR_ID=#{tutorId}
</select>

choose 該方式適用于多個(gè)條件中選擇一個(gè)滿足條件的來生成sql

<select id="searchCourses" parameterType="hashmap" resultMap="CourseResult">
  SELECT * FROM COURSES
  <choose>
    <when test="searchBy == 'Tutor'">
      WHERE TUTOR_ID= #{tutorId}
    </when>
    <when test="searchBy == 'CourseName'">
      WHERE name like #{courseName}
    </when>
    <otherwise>
      WHERE TUTOR start_date  >= now()
    </otherwise>
  </choose>
</select>

where 適用于從多個(gè)條件中選擇所有滿足條件的來構(gòu)成condtions,

符號(hào)小于小于等于大于大于等于單引號(hào)雙引號(hào)
原符號(hào)<<=>>=&'"
替換符號(hào)&lt;&lt;=&gt;&gt;=&amp;&apos;&quot;
<select id="searchCourses" parameterType="hashmap" resultMap="CourseResult">
  SELECT * FROM COURSES
  <where>  
    <if test=" tutorId != null ">
      TUTOR_ID= #{tutorId}
    </if>
    <if test="courseName != null">
      AND name like #{courseName}
    </if>
    <if test="startDate != null">
      AND start_date  >= #{startDate} <!--大于等于 開始時(shí)間-->
    </if>
    <if test="endDate != null">
      AND end_date  <= #{endDate} <!--小于等于 結(jié)束時(shí)間-->
    </if>
  </where>
</select>

foreach

<select id="selectUserByListId" parameterType="com.ys.vo.UserVo" resultType="com.ys.po.User">
select * from user
  <where>
    <!--
    collection:指定輸入對(duì)象中的集合屬性.該屬性的值有三種:list,array,map,根據(jù)傳入的集合類型而設(shè)定該值。
    item:每次遍歷生成的對(duì)象
    index:當(dāng)前迭代的次數(shù)
    open:開始遍歷時(shí)的拼接字符串
    close:結(jié)束時(shí)拼接的字符串
    separator:遍歷對(duì)象之間需要拼接的字符串
    select * from user where 1=1 and id in (1,2,3)
    -->
    <foreach collection="list" item="id" open="(" separator="," close=")">
     #{id}
    </foreach>
  </where>
</select>

select * from user where id=1 or id=2 or id=3

<select id="selectUserByListId" parameterType="com.ys.vo.UserVo" resultType="com.ys.po.User">
select * from user
  <where>
    <foreach collection="list" item="id" open="and (" close=")" separator="or">
       id=#{id}
    </foreach>
  </where>
</select>

< sql >標(biāo)簽
該標(biāo)簽主要定義復(fù)用的sql語句片段,在執(zhí)行的sql語句標(biāo)簽直接引用即可??梢蕴岣呔幋a效率、簡化代碼和提高可讀性。

需要配置id熟悉,表示該sql片段的唯一標(biāo)識(shí)。

引用:通過<include refid=" " / >標(biāo)簽引用,refid的值就是< sql>的id屬性的值。

<sql id="Base_Column_List">
  id, question, answer 
</sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Long" resultMap="BaseResultMap">
  select 
  <include refid="Base_Column_List" />
  from java
  where id = #{id,jdbcType=BIGINT}
</select>

<set> : 主要用來替換sql語句中的set字段,一般在update中使用。

<update>
  update user 
  <set>
    <if test="name != null and name.length()>0">name = #{name},</if>
    <if test="age != null and age .length()>0">age = #{age },</if>
  </set>
  where id = #{id}
</update>

批量更新,一次執(zhí)行多條SQL

<update>
    <foreach collection="list" item="item" index="index" separator=";">
        update user 
        <set>
            <if test="name != null and name.length()>0">name = #{name},</if>
            <if test="age != null and age .length()>0">age = #{age },</if>
        </set>
        <where>
            <if test="id != null and id != ''">
                AND id = #{id,jdbcType=VARCHAR}
            </if>
            <if test="userName != null and userName != ''">
                <bind name="bindUserName" value="'%' + userName + '%'" />
                AND UserName like #{bindUserName}
            </if> 
            <if test="status != null">
                AND Status = #{status,jdbcType=INTEGER}
            </if>
        </where>
    </foreach>
</update>

<trim> : 是一個(gè)格式化的標(biāo)記,可以完成set或者是where標(biāo)記的功能。

select * from user 
<trim prefix="WHERE" prefixoverride="AND |OR">
  <if test="name != null and name.length()>0"> AND name=#{name}</if>
  <if test="age != null and age.length()>0"> AND age=#{age}</if>
</trim> 
假如說name和age的值都不為null的話打印的SQL為:select * from user where name = ‘xx' and age = ‘xx'
在where的后面是不存在第一個(gè)and的,上面兩個(gè)屬性的意思如下:
  prefix:前綴      
  prefixoverride:去掉第一個(gè)and或者是or
update user
<trim prefix="set" suffixoverride="," suffix=" where id = #{id} ">
  <if test="name != null and name.length()>0"> name=#{name} , </if>
  <if test="age!= null and age.length()>0"> age=#{age} ,  </if>
</trim>
假如說name和age的值都不為null的話打印的SQL為:update user set name=‘xx' , age=‘xx' where id=‘x'
在age='xx'的后面不存在逗號(hào),而且自動(dòng)加了一個(gè)set前綴和where后綴,上面三個(gè)屬性的意義如下,其中prefix意義如上:
   suffixoverride:去掉最后一個(gè)逗號(hào)(也可以是其他的標(biāo)記,就像是上面前綴中的and一樣)
   suffix:后綴

 choose & foreach list 有一個(gè)值,條件=,有多個(gè)值 in 

<update id="updateStatus" parameterType="java.util.ArrayList" >
  update User
  set Status = 1,UpdateTime=(select GETDATE())
  <choose>
    <when test="idList != null and idList.size==1">
      WHERE Id= #{id,jdbcType=VARCHAR}
    </when>
    <when test="idList != null and idList.size>1">
      WHERE Id in
      <foreach collection="idList" item="id" open="(" close=")" separator=",">
        <if test="id != null and id != '' ">
          #{id,jdbcType=VARCHAR}
        </if>
      </foreach>
    </when>
    <otherwise>
      WHERE 1=0
    </otherwise>
  </choose>
</update>

到此這篇關(guān)于MyBatis Mapper.XML 標(biāo)簽使用小結(jié)的文章就介紹到這了,更多相關(guān)MyBatis Mapper.XML 標(biāo)簽內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • idea拉取代碼的時(shí)候需要輸入token的問題分析及解決過程

    idea拉取代碼的時(shí)候需要輸入token的問題分析及解決過程

    文章介紹了如何在WebStorm中配置GitLab并生成Token,以簡化后續(xù)的Git操作,同時(shí),文章建議禁用或刪除GitLab插件以進(jìn)一步提高效率
    2026-01-01
  • 解決Mybatis的serverTimezone時(shí)區(qū)出現(xiàn)問題

    解決Mybatis的serverTimezone時(shí)區(qū)出現(xiàn)問題

    這篇文章主要介紹了解決Mybatis的serverTimezone時(shí)區(qū)出現(xiàn)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • spring hibernate實(shí)現(xiàn)動(dòng)態(tài)替換表名(分表)的方法

    spring hibernate實(shí)現(xiàn)動(dòng)態(tài)替換表名(分表)的方法

    下面小編就為大家?guī)硪黄猻pring hibernate實(shí)現(xiàn)動(dòng)態(tài)替換表名(分表)的方法。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-08-08
  • java反編譯工具Bytecode-Viewer分享

    java反編譯工具Bytecode-Viewer分享

    這篇文章主要介紹了java反編譯工具Bytecode-Viewer分享,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java學(xué)習(xí)之反射機(jī)制及應(yīng)用場景介紹

    Java學(xué)習(xí)之反射機(jī)制及應(yīng)用場景介紹

    本篇文章主要介紹了Java反射機(jī)制及應(yīng)用場景,反射機(jī)制是很多Java框架的基石。非常具有實(shí)用價(jià)值,需要的朋友可以參考下。
    2016-11-11
  • idea打開項(xiàng)目沒有項(xiàng)目目錄問題及解決

    idea打開項(xiàng)目沒有項(xiàng)目目錄問題及解決

    這篇文章主要介紹了idea打開項(xiàng)目沒有項(xiàng)目目錄問題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • 一篇文章帶你了解Java Stream流

    一篇文章帶你了解Java Stream流

    Stream流是數(shù)據(jù)渠道,用于操作數(shù)據(jù)源(集合、數(shù)組等)所生成的元素序列。這篇文章主要介紹了Java8新特性Stream流的相關(guān)資料,需要的朋友參考下吧
    2021-08-08
  • Java 十大排序算法之計(jì)數(shù)排序刨析

    Java 十大排序算法之計(jì)數(shù)排序刨析

    計(jì)數(shù)排序是一個(gè)非基于比較的排序算法,該算法于1954年由 Harold H. Seward 提出。它的優(yōu)勢在于在對(duì)一定范圍內(nèi)的整數(shù)排序時(shí),它的復(fù)雜度為Ο(n+k)(其中k是整數(shù)的范圍),快于任何比較排序算法
    2021-11-11
  • Java比較問題詳細(xì)分析

    Java比較問題詳細(xì)分析

    本篇文章主要給大家講解了Java中比較問題的相關(guān)知識(shí),一起參考學(xué)習(xí)下吧。
    2017-12-12
  • Java把Map轉(zhuǎn)為對(duì)象的實(shí)現(xiàn)代碼

    Java把Map轉(zhuǎn)為對(duì)象的實(shí)現(xiàn)代碼

    在項(xiàng)目開發(fā)中,經(jīng)常碰到map轉(zhuǎn)實(shí)體對(duì)象或者對(duì)象轉(zhuǎn)map的場景,工作中,很多時(shí)候我們可能比較喜歡使用第三方j(luò)ar包的API對(duì)他們進(jìn)行轉(zhuǎn)化,但這里,我想通過反射的方式對(duì)他們做轉(zhuǎn)化,感興趣的同學(xué)跟著小編來看看吧
    2023-08-08

最新評(píng)論

巍山| 东丽区| 罗江县| 金华市| 克什克腾旗| 肇源县| 台前县| 万荣县| 丹寨县| 穆棱市| 定南县| 宁化县| 闽侯县| 昌图县| 黄冈市| 长宁县| 柘荣县| 永泰县| 古丈县| 久治县| 弥勒县| 绩溪县| 苍山县| 武平县| 阳春市| 霍州市| 循化| 黄梅县| 博兴县| 邹平县| 天镇县| 万宁市| 金溪县| 锡林郭勒盟| 镇安县| 辽中县| 蕉岭县| 随州市| 锡林郭勒盟| 建宁县| 泰来县|