国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MyBatis進(jìn)階:掌握MyBatis動態(tài)SQL與模糊查詢、結(jié)果映射,讓你在面試中脫穎而出??!

這篇具有很好參考價(jià)值的文章主要介紹了MyBatis進(jìn)階:掌握MyBatis動態(tài)SQL與模糊查詢、結(jié)果映射,讓你在面試中脫穎而出??!。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

MyBatis進(jìn)階:掌握MyBatis動態(tài)SQL與模糊查詢、結(jié)果映射,讓你在面試中脫穎而出!!,Mybatis,mybatis,sql,面試,動態(tài)sql,模糊查詢

目錄

一、引言

二、MyBatis動態(tài)SQL

2.1.if元素使用

2.2.foreach元素使用

三、MyBatis模糊查詢

①使用#{字段名}

②使用${字段名}

③使用concat{'%',#{字段名},'%'}

總結(jié)

四、MyBatis結(jié)果映射

4.1.案例演示

4.1.1.resultType進(jìn)行結(jié)果映射

4.1.2.resultMap進(jìn)行結(jié)果映射



一、引言

在當(dāng)今的軟件開發(fā)環(huán)境中,數(shù)據(jù)庫的使用已經(jīng)成為了一項(xiàng)基礎(chǔ)且必不可少的技能。而在處理數(shù)據(jù)庫相關(guān)的任務(wù)時,SQL查詢語句無疑是最為常用的工具之一。然而,隨著應(yīng)用程序的復(fù)雜性不斷增加,我們往往需要編寫更加復(fù)雜的SQL查詢語句以滿足需求。這就引出了我們今天要討論的主題——MyBatis。

在這篇文章中,我們將深入探討MyBatis的兩個重要特性:動態(tài)SQL和模糊查詢。動態(tài)SQL是MyBatis的一個強(qiáng)大功能,它允許我們在XML映射文件中編寫動態(tài)生成的SQL語句。模糊查詢則是我們在處理大量數(shù)據(jù)時常用的一種查詢方式,它可以幫助我們快速地找出符合特定條件的記錄。

此外,我們還將討論MyBatis的結(jié)果映射功能。結(jié)果映射是將數(shù)據(jù)庫查詢結(jié)果映射到Java對象的過程,它是MyBatis的核心功能之一。通過結(jié)果映射,我們可以將復(fù)雜的數(shù)據(jù)庫表結(jié)構(gòu)轉(zhuǎn)換為Java中的對象,使得程序的設(shè)計(jì)更加直觀和簡單。

掌握MyBatis的這些高級特性,不僅可以提高我們的開發(fā)效率,也可以讓我們在面試中脫穎而出。因此,無論你是已經(jīng)有一定經(jīng)驗(yàn)的開發(fā)者,還是剛剛?cè)腴T的學(xué)習(xí)者,都值得花時間去學(xué)習(xí)和理解這些知識。在接下來的文章中,我們將詳細(xì)介紹這些特性的使用方法和注意事項(xiàng),希望對你有所幫助。

二、MyBatis動態(tài)SQL

2.1.if元素使用

在以往的編寫中我們肯定寫過這樣的代碼

update t_mvc_book bname=?,btype=?,bprice=?,..... where bid=?

假如我們前臺jsp沒有傳參數(shù)bname到后臺,那么會怎么樣?

update t_mvc_book bname=null,btype='科幻小說',bprice=9.9,..... where bid=7

就會造成這樣的結(jié)果,原本我們不傳遞參數(shù)只是不想改變原有的字段值,沒成想不傳反而變?yōu)閚ull

有些人就會想那我傳個參數(shù)來行不行呢?行,但是沒必要。如果我們使用Mybatis里面的動態(tài)SQL,這個問題就迎刃而解了,它會把我們的sql語句變?yōu)閤ml的方式,通過if標(biāo)簽判斷,如果為空就不會拼接判斷條件里的內(nèi)容。

 <update id="updateByPrimaryKeySelective" parameterType="com.csdn.xw.model.Book" >
    update t_mvc_book
    <set >
      <if test="bname != null" >
        bname = #{bname,jdbcType=VARCHAR},
      </if>
      <if test="price != null" >
        price = #{price,jdbcType=REAL},
      </if>
    </set>
    where bid = #{bid,jdbcType=INTEGER}
  </update>

2.2.foreach元素使用

我們再來假設(shè)一個場景: 我們寫代碼的過程中肯定寫過對某個事物的批量刪除

可能是這樣遍歷數(shù)組然后調(diào)用刪除方法

for int id :ids

? ? ? orderItemsDao.delete(id)

也可能是拼接的方式將需要刪除的id做個拼接

delete from t_oa_order where id in(...)

如果是使用mybatis我們就可以這樣寫

<select id="selectByBids" resultType="com.csdn.xw.model.Book" parameterType="java.lang.Integer" >
    select
    <include refid="Base_Column_List" />
    from t_mvc_book
    where bid in
    <foreach collection="bids" item="bid" open="(" close=")" separator=",">
      #{bid}
    </foreach>
  </select>

現(xiàn)在來測試一下

BookMapper

List<Book> selectByBids(@Param("bids") List bids);

BookBiz

 List<Book> selectByBids(List bids);

BookBizImpl

 @Override
    public List<Book> selectByBids(List bids) {
         return  bookMapper.selectByBids(bids);
    }

demo測試類

@Test
    public void selectByBids() {
        System.out.println("測試的查詢的方法");
        List<Integer> integers = Arrays.asList(new Integer[]{55, 56, 57, 58});
        bookBiz.selectByBids(integers).forEach(System.out::println);
    }

測試結(jié)果:

MyBatis進(jìn)階:掌握MyBatis動態(tài)SQL與模糊查詢、結(jié)果映射,讓你在面試中脫穎而出!!,Mybatis,mybatis,sql,面試,動態(tài)sql,模糊查詢

三、MyBatis模糊查詢

為了突出我們的效果展示,我們增加一個配置文件log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- status : 指定log4j本身的打印日志的級別.ALL< Trace < DEBUG < INFO < WARN < ERROR
	< FATAL < OFF。 monitorInterval : 用于指定log4j自動重新配置的監(jiān)測間隔時間,單位是s,最小是5s. -->
<Configuration status="WARN" monitorInterval="30">
    <Properties>
        <!-- 配置日志文件輸出目錄 ${sys:user.home} -->
        <Property name="LOG_HOME">/root/workspace/lucenedemo/logs</Property>
        <property name="ERROR_LOG_FILE_NAME">/root/workspace/lucenedemo/logs/error</property>
        <property name="WARN_LOG_FILE_NAME">/root/workspace/lucenedemo/logs/warn</property>
        <property name="PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} [%t-%L] %-5level %logger{36} - %msg%n</property>
    </Properties>

    <Appenders>
        <!--這個輸出控制臺的配置 -->
        <Console name="Console" target="SYSTEM_OUT">
            <!-- 控制臺只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) -->
            <ThresholdFilter level="trace" onMatch="ACCEPT"
                             onMismatch="DENY" />
            <!-- 輸出日志的格式 -->
            <!-- %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生產(chǎn)時間 %p : 日志輸出格式 %c : logger的名稱
                %m : 日志內(nèi)容,即 logger.info("message") %n : 換行符 %C : Java類名 %L : 日志輸出所在行數(shù) %M
                : 日志輸出所在方法名 hostName : 本地機(jī)器名 hostAddress : 本地ip地址 -->
            <PatternLayout pattern="${PATTERN}" />
        </Console>

        <!--文件會打印出所有信息,這個log每次運(yùn)行程序會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用 -->
        <!--append為TRUE表示消息增加到指定文件中,false表示消息覆蓋指定的文件內(nèi)容,默認(rèn)值是true -->
        <File name="log" fileName="logs/test.log" append="false">
            <PatternLayout
                    pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
        </File>
        <!-- 這個會打印出所有的info及以下級別的信息,每次大小超過size, 則這size大小的日志會自動存入按年份-月份建立的文件夾下面并進(jìn)行壓縮,作為存檔 -->
        <RollingFile name="RollingFileInfo" fileName="${LOG_HOME}/info.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
            <!--控制臺只輸出level及以上級別的信息(onMatch),其他的直接拒絕(onMismatch) -->
            <ThresholdFilter level="info" onMatch="ACCEPT"
                             onMismatch="DENY" />
            <PatternLayout
                    pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
            <Policies>
                <!-- 基于時間的滾動策略,interval屬性用來指定多久滾動一次,默認(rèn)是1 hour。 modulate=true用來調(diào)整時間:比如現(xiàn)在是早上3am,interval是4,那么第一次滾動是在4am,接著是8am,12am...而不是7am. -->
                <!-- 關(guān)鍵點(diǎn)在于 filePattern后的日期格式,以及TimeBasedTriggeringPolicy的interval, 日期格式精確到哪一位,interval也精確到哪一個單位 -->
                <!-- log4j2的按天分日志文件 : info-%d{yyyy-MM-dd}-%i.log -->
                <TimeBasedTriggeringPolicy interval="1"
                                           modulate="true" />
                <!-- SizeBasedTriggeringPolicy:Policies子節(jié)點(diǎn), 基于指定文件大小的滾動策略,size屬性用來定義每個日志文件的大小. -->
                <!-- <SizeBasedTriggeringPolicy size="2 kB" /> -->
            </Policies>
        </RollingFile>

        <RollingFile name="RollingFileWarn" fileName="${WARN_LOG_FILE_NAME}/warn.log"
                     filePattern="${WARN_LOG_FILE_NAME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
            <ThresholdFilter level="warn" onMatch="ACCEPT"
                             onMismatch="DENY" />
            <PatternLayout
                    pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
            <Policies>
                <TimeBasedTriggeringPolicy />
                <SizeBasedTriggeringPolicy size="2 kB" />
            </Policies>
            <!-- DefaultRolloverStrategy屬性如不設(shè)置,則默認(rèn)為最多同一文件夾下7個文件,這里設(shè)置了20 -->
            <DefaultRolloverStrategy max="20" />
        </RollingFile>

        <RollingFile name="RollingFileError" fileName="${ERROR_LOG_FILE_NAME}/error.log"
                     filePattern="${ERROR_LOG_FILE_NAME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd-HH-mm}-%i.log">
            <ThresholdFilter level="error" onMatch="ACCEPT"
                             onMismatch="DENY" />
            <PatternLayout
                    pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
            <Policies>
                <!-- log4j2的按分鐘 分日志文件 : warn-%d{yyyy-MM-dd-HH-mm}-%i.log -->
                <TimeBasedTriggeringPolicy interval="1"
                                           modulate="true" />
                <!-- <SizeBasedTriggeringPolicy size="10 MB" /> -->
            </Policies>
        </RollingFile>

    </Appenders>

    <!--然后定義logger,只有定義了logger并引入的appender,appender才會生效 -->
    <Loggers>
        <!--過濾掉spring和mybatis的一些無用的DEBUG信息 -->
        <logger name="org.springframework" level="INFO"></logger>
        <logger name="org.mybatis" level="INFO"></logger>

        <!-- 第三方日志系統(tǒng) -->
        <logger name="org.springframework" level="ERROR" />
        <logger name="org.hibernate" level="ERROR" />
        <logger name="org.apache.struts2" level="ERROR" />
        <logger name="com.opensymphony.xwork2" level="ERROR" />
        <logger name="org.jboss" level="ERROR" />


        <!-- 配置日志的根節(jié)點(diǎn) -->
        <root level="all">
            <appender-ref ref="Console" />
            <appender-ref ref="RollingFileInfo" />
            <appender-ref ref="RollingFileWarn" />
            <appender-ref ref="RollingFileError" />
        </root>

    </Loggers>

</Configuration>

log4j2.xml文件應(yīng)該位于項(xiàng)目的類路徑根目錄下,即src/main/resources目錄中。

小貼士:

Log4j2的配置文件,用于配置日志輸出的格式、級別、目標(biāo)等信息。Log4j2不再支持Log4j 1.x中的.properties文件的配置方式,而是支持通過json、xml或者jsn的方式進(jìn)行配置。

具體來說,log4j2.xml文件中包含了以下幾個部分:

  1. Configuration:配置信息區(qū)域,包括Appenders、Loggers等。
  2. Appender:輸出目標(biāo)區(qū)域,包括控制臺、文件、數(shù)據(jù)庫等。
  3. Logger:日志記錄區(qū)域,包括包名、類名、日志級別等。

在MyBatis中有三種模糊查詢的方法分別是:

①使用#{字段名}

<select id="like1" resultType="com.csdn.xw.model.Book" parameterType="java.lang.String" >
    select
    <include refid="Base_Column_List" />
    from t_mvc_book
    where bname like #{bname}
  </select>

測試結(jié)果:?

MyBatis進(jìn)階:掌握MyBatis動態(tài)SQL與模糊查詢、結(jié)果映射,讓你在面試中脫穎而出??!,Mybatis,mybatis,sql,面試,動態(tài)sql,模糊查詢

②使用${字段名}

<select id="like2" resultType="com.csdn.xw.model.Book" parameterType="java.lang.String" >
    select
    <include refid="Base_Column_List" />
    from t_mvc_book
    where bname like ${bname}
  </select>

測試結(jié)果:??

MyBatis進(jìn)階:掌握MyBatis動態(tài)SQL與模糊查詢、結(jié)果映射,讓你在面試中脫穎而出??!,Mybatis,mybatis,sql,面試,動態(tài)sql,模糊查詢

③使用concat{'%',#{字段名},'%'}

<select id="like3" resultType="com.csdn.xw.model.Book" parameterType="java.lang.String" >
  select
  <include refid="Base_Column_List" />
  from t_mvc_book
  where bname like concat('%',#{bname},'%')
</select>

測試結(jié)果:?

MyBatis進(jìn)階:掌握MyBatis動態(tài)SQL與模糊查詢、結(jié)果映射,讓你在面試中脫穎而出??!,Mybatis,mybatis,sql,面試,動態(tài)sql,模糊查詢

總結(jié)

想必你也看出了,這三種的不同之處,下面我來給你總結(jié)一下。

mybatis中的$與#的區(qū)別

①$是占位符傳參,#是預(yù)處理SQL

②外在形式:$傳參不帶引號,#自帶引號

可能你還沒感受到有沒有引號沒什么太大的區(qū)別,下面我來給你演示一下

假如我要根據(jù)部門編號查出該部門的所有人員信息,利用$與#來做測試

#:select*from t_oa_employee where deptid=#{deptid}

????????select*from t_oa_employee where deptid='10011'

$:select*from t_oa_employee where deptid=${deptid}

??????????select*from t_oa_employee where deptid=10011

這么一看好像確實(shí)沒有什么區(qū)別,那如果前臺惡意傳參呢?

http://localhost:8080/employee?deptid=10011 or 1=1

那這樣不就把全公司的人員信息都查出來了

③$傳參存在sql注入,#不存在

④$可以做動態(tài)列,完成動態(tài)sql的開發(fā)

我們開發(fā)過程中肯定有遇到過,當(dāng)前字段不滿足我們需求,然后我們修改數(shù)據(jù)庫字段的時候,如果改成正確還好,如果錯誤那就芭比Q了,動態(tài)列就可以做到傳入的參數(shù)當(dāng)作需要查詢的列來操作例如:

假設(shè)我們有一個表名為user_info,包含字段id、name、age、gender等,現(xiàn)在需要根據(jù)傳入的參數(shù)來動態(tài)生成查詢的列,可以使用如下的語句

<select id="getUserInfo" resultType="map">
  SELECT ${columnName}, ${columnAge}, ${columnGender}
  FROM user_info
</select>

其中,columnName、columnAge、columnGender分別代表需要查詢的列名,可以在Java代碼中定義一個Map變量,將列名作為key,對應(yīng)的值作為value傳入即可。例如

Map<String, Object> columnMap = new HashMap<>();
columnMap.put("columnName", "name");
columnMap.put("columnAge", 18);
columnMap.put("columnGender", "男");

然后將columnMap傳入MyBatis的mapper中調(diào)用即可。

最后小編還是建議大家一般能用 # 的就別用 $ ,最常用的還是第三種。

四、MyBatis結(jié)果映射

在使用MyBatis中擁有多個場景,返回的結(jié)果是多樣的,resultType/resultMap

①返回單表的對應(yīng)的實(shí)體類,僅有一個查詢結(jié)果,可以用resultType/resultMap。

②返回單表的對應(yīng)的實(shí)體類,有多個查詢結(jié)果,可以用resultType/resultMap。

③返回多表對應(yīng)結(jié)果,僅有一個查詢結(jié)果,通常用resultType也可以用resultMap。

④返回多表對應(yīng)結(jié)果,有多個查詢結(jié)果,通常用resultType也可以用resultMap。

⑤返回單個列段,僅有一個查詢結(jié)果,就用resultType。

⑥返回單個列段,有多個查詢結(jié)果,就用resultType。

? 總結(jié)就是在Mybatis中結(jié)果集的處理分為兩種:

resultMap:適合使用返回值是自定義實(shí)體類的情況

resultType:適合使用返回值的數(shù)據(jù)類型是非自定義的,即jdk的提供的類型

?如果是單表的情況下,resultType與resultMap都可以使用。
1 使用resultMap返回映射關(guān)系,指的是實(shí)體類與數(shù)據(jù)庫字段的關(guān)系

2 使用resultType返回List<T>

3 使用resultType返回單個對象

4 使用resultType返回List<Map>【適用于多表查詢返回結(jié)果集】

5 使用resultType返回Map<String,Object>【適用于多表查詢返回單個結(jié)果集】

4.1.案例演示

4.1.1.resultType進(jìn)行結(jié)果映射

假設(shè)我們有一個用戶表user,包含以下字段:id、name、age、gender、email?,F(xiàn)在需要根據(jù)這些字段查詢用戶信息并返回一個User對象。

首先,我們需要定義一個User類,用于存儲查詢結(jié)果:

public class User {
    private int id;
    private String name;
    private int age;
    private String gender;
    private String email;
    // getter和setter方法省略
}

然后,在MyBatis的mapper文件中,我們可以使用resultType來映射查詢結(jié)果到User對象上。具體配置如下:

<select id="getUserById" resultType="com.example.User">
  SELECT id, name, age, gender, email
  FROM user
  WHERE id = #{id}
</select>

在上面的配置中,我們使用了resultType屬性來指定查詢結(jié)果映射到的Java對象的全限定名。這樣,當(dāng)執(zhí)行查詢語句時,MyBatis會自動將查詢結(jié)果映射到指定的Java對象上。

4.1.2.resultMap進(jìn)行結(jié)果映射

假設(shè)我們有一個訂單表order,包含以下字段:id、user_id、product_id、price、quantity?,F(xiàn)在需要根據(jù)這些字段查詢訂單信息并返回一個Order對象。

首先,我們需要定義一個Order類,用于存儲查詢結(jié)果:

public class Order {
    private int id;
    private int userId;
    private int productId;
    private double price;
    private int quantity;
    // getter和setter方法省略
}

然后,在MyBatis的mapper文件中,我們可以使用resultMap來映射查詢結(jié)果到Order對象上。具體配置如下:

<resultMap id="OrderResultMap" type="com.example.Order">
  <id property="id" column="id" />
  <result property="userId" column="user_id" />
  <result property="productId" column="product_id" />
  <result property="price" column="price" />
  <result property="quantity" column="quantity" />
</resultMap>

<select id="getOrderById" resultMap="OrderResultMap">
  SELECT id, user_id, product_id, price, quantity
  FROM order
  WHERE id = #{id}
</select>

在上面的配置中,我們定義了一個名為"OrderResultMap"的resultMap,它的type屬性指定了要映射的Java對象的全限定名。接下來,我們?yōu)槊總€字段指定了對應(yīng)的屬性名和數(shù)據(jù)庫表中的列名。最后,在查詢語句中引用這個resultMap即可將查詢結(jié)果映射到Order對象上。

需要注意的是,如果查詢結(jié)果中的某個字段在Java對象中沒有對應(yīng)的屬性,那么該字段將被映射為null。此外,如果查詢結(jié)果中的某個字段在Java對象中有多個對應(yīng)的屬性,那么該字段的值將被映射為一個列表或數(shù)組。

 

到這里我的分享就結(jié)束了,歡迎到評論區(qū)探討交流!!

如果覺得有用的話還請點(diǎn)個贊吧??? ?

MyBatis進(jìn)階:掌握MyBatis動態(tài)SQL與模糊查詢、結(jié)果映射,讓你在面試中脫穎而出!!,Mybatis,mybatis,sql,面試,動態(tài)sql,模糊查詢文章來源地址http://www.zghlxwxcb.cn/news/detail-665128.html

到了這里,關(guān)于MyBatis進(jìn)階:掌握MyBatis動態(tài)SQL與模糊查詢、結(jié)果映射,讓你在面試中脫穎而出??!的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【MyBatis】攔截查詢結(jié)果同時動態(tài)替換

    項(xiàng)目中需要用到響應(yīng)時替換某些字段的某些值。

    2024年02月04日
    瀏覽(32)
  • Mybatis 中如何將sql執(zhí)行結(jié)果封裝為目標(biāo)對象并返回的?都有哪些映射形式?

    在Mybatis中,可以通過配置映射文件來將SQL執(zhí)行結(jié)果封裝為目標(biāo)對象并返回。 一種映射形式是使用resultType屬性,將查詢結(jié)果映射為指定的目標(biāo)對象。例如: 另一種映射形式是使用resultMap屬性,通過定義映射關(guān)系來將查詢結(jié)果映射為目標(biāo)對象。例如: 除了以上兩種形式,還可

    2024年02月07日
    瀏覽(21)
  • Mybatis映射.動態(tài)sql.分頁

    動態(tài)SQL是MyBatis提供的一種動態(tài)生成SQL語句的方式,可以根據(jù)不同的條件生成不同的SQL語句,從而實(shí)現(xiàn)更加靈活的查詢和操作。 在MyBatis的映射文件中,可以通過使用if、choose、when、otherwise、foreach等標(biāo)簽來實(shí)現(xiàn)動態(tài)SQL。下面以if和foreach為例,介紹如何在MyBatis映射文件中使用動

    2024年02月11日
    瀏覽(21)
  • MyBatis動態(tài)語句且如何實(shí)現(xiàn)模糊查詢及resultType與resultMap的區(qū)別---詳細(xì)介紹

    MyBatis動態(tài)語句且如何實(shí)現(xiàn)模糊查詢及resultType與resultMap的區(qū)別---詳細(xì)介紹

    前面我們學(xué)習(xí)了如何使用Mybatis實(shí)現(xiàn)簡單的增刪改查。今天我們來學(xué)習(xí)如何使用動態(tài)語句來根據(jù)不同的條件生成不同的SQL語句。這在實(shí)際開發(fā)中非常有用,因?yàn)橥ǔ2樵儣l件是多樣化的,需要根據(jù)實(shí)際情況來拼接SQL語句,那什么是MyBatis動態(tài)語句呢,看下面詳細(xì)簡介 MyBatis動態(tài)語

    2024年02月11日
    瀏覽(19)
  • Mybatis學(xué)習(xí)筆記,包含mybatis基本使用、關(guān)系映射、動態(tài)SQL、分頁插件等等

    Mybatis學(xué)習(xí)筆記,包含mybatis基本使用、關(guān)系映射、動態(tài)SQL、分頁插件等等

    ??????創(chuàng)作不易,各位看官點(diǎn)贊收藏. 簡介:MyBatis 是一款優(yōu)秀的持久層框架,它支持自定義 SQL、存儲過程以及高級映射。MyBatis 免除了幾乎所有的 JDBC 代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作。MyBatis 可以通過簡單的 XML 或注解來配置和映射原始類型、接口和 Java POJO(Plain

    2024年02月15日
    瀏覽(23)
  • 【Spring 篇】深入探討MyBatis映射文件中的動態(tài)SQL

    【Spring 篇】深入探討MyBatis映射文件中的動態(tài)SQL

    MyBatis,這個名字在Java開發(fā)者的世界中猶如一道光芒,照亮著持久層操作的道路。而在MyBatis的映射文件中,動態(tài)SQL則是一個讓人愛-hate的存在。有時候,你感嘆它的靈活性,有時候,你可能會為它的繁瑣而頭痛。但別擔(dān)心,我們將在本文中一起揭開動態(tài)SQL的神秘面紗,帶你領(lǐng)

    2024年01月24日
    瀏覽(36)
  • SQL注入進(jìn)階:掌握聯(lián)合查詢注入和報(bào)錯注入攻擊技巧

    SQL注入進(jìn)階:掌握聯(lián)合查詢注入和報(bào)錯注入攻擊技巧

    數(shù)據(jù)來源 ????????本文僅用于信息安全的學(xué)習(xí),請遵守相關(guān)法律法規(guī),嚴(yán)禁用于非法途徑。若觀眾因此作出任何危害網(wǎng)絡(luò)安全的行為,后果自負(fù),與本人無關(guān)。 介紹 ????????聯(lián)合查詢注入是SQL注入的一種,通過在原有的SQL語句中添加UNION(聯(lián)合)操作,將惡意構(gòu)造的

    2024年02月06日
    瀏覽(18)
  • MyBatis XML 映射文件中的 SQL 語句可以分為動態(tài)語句和靜態(tài)語句

    目錄 靜態(tài)查詢: 動態(tài)查詢: 靜態(tài)更新: 動態(tài)更新: 靜態(tài)刪除: 動態(tài)刪除: 動態(tài)語句和靜態(tài)語句在 MyBatis 中的作用如下: 靜態(tài)查詢: 靜態(tài)查詢是指在 SQL 語句中執(zhí)行固定的查詢操作,查詢的條件和內(nèi)容是預(yù)先確定的,不會隨著用戶輸入或其他條件的改變而改變。以下是一

    2024年01月18日
    瀏覽(35)
  • MyBatis多表查詢+動態(tài)sql

    MyBatis多表查詢+動態(tài)sql

    在全局配置文件中中設(shè)置MyBatis執(zhí)行日志 假設(shè)有一個用戶表和文章表,實(shí)體類中一個關(guān)聯(lián)關(guān)系。 用戶實(shí)體類 文章實(shí)體類 如果想查詢的結(jié)果包含UserInfo的信息就需要使用,?對?映射要使? association 標(biāo)簽,因?yàn)橐黄恼轮荒軐?yīng)一個作者。 Controller控制器代碼 Service服務(wù)層代碼

    2023年04月19日
    瀏覽(28)
  • mybatis xml多表查詢,子查詢,連接查詢,動態(tài)sql

    mybatis xml多表查詢,子查詢,連接查詢,動態(tài)sql

    student_type 表 student 表 Student 類 一個學(xué)生只有一個年級 Type 類 一個年級有多個學(xué)生,所以用 list 下列代碼中: 1 resultMap 里面property對應(yīng)實(shí)體類屬性,column對應(yīng)數(shù)據(jù)庫字段名 2 主鍵用 id 標(biāo)簽 其他用result 3 關(guān)聯(lián)查詢(子查詢和連接查詢) 連接查詢查一次 4 一個年級多個學(xué)生,所以

    2024年01月21日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包