亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MyBatis insert標簽及常用屬性詳解

 更新時間:2023年10月08日 15:22:46   作者:小日子呀  
這篇文章主要介紹了MyBatis insert標簽,insert 標簽中沒有 resultType 屬性,只有查詢操作才需要對返回結果類型進行相應的指定,需要的朋友可以參考下
<insert id="addWebsite" parameterType="string">
    insert into website(name)
    values(#{name})
</insert>

在 WebsiteMapper 接口中定義一個 add() 方法 

public int addWebsite(String name);

 參數(shù)為 Sting 類型的字符串;返回值為 int 類型,即執(zhí)行 SQL 后,插入記錄的行數(shù)。測試:

//插入 name 為編程幫1 的記錄
String name = "編程1";
int i = websiteMapper.addWebsite(name);
System.out.println("共插入了 " + i + " 條記錄");

insert 標簽常用屬性

屬性名稱描述備注
id它和 Mapper 的命名空間組合起來使用,是唯一標識符,供 MyBatis 調用如果命名空間+ id 不唯一,那么 MyBatis 拋出異常
parameterType傳入 SQL 語句的參數(shù)類型的全限定名或別名,它是一個可選屬性。支持基本數(shù)據類型和 JavaBean、Map 等復雜數(shù)據類型
keyProperty該屬性的作用是將插入操作的返回值賦給 PO 類的某個屬性,通常為主鍵對應的屬性。如果是聯(lián)合主鍵,可以將多個值用逗號隔開。-
useGeneratedKe該屬性用來設置,是否使用 JDBC 提供的 getGenereatedKeys() 方法,獲取數(shù)據庫內部產生的主鍵并賦值到 keyProperty 屬性設置的請求對象的屬性中,例如 MySQL、SQL Server 等自動遞增的字段,其默認值為 false。該屬性值設置為 true 后,會將數(shù)據庫生成的主鍵回填到請求對象中,以供其他業(yè)務使用。
flushCache該屬性用于設置執(zhí)行該操作后,是否會清空二級緩存和本地緩存,默認值為 true。-
timeout該屬性用于設置執(zhí)行該操作的最大時限,如果超時,就拋異常。-
databaseId取值范圍 oracle、mysql 等,表示數(shù)據庫廠家;元素內部可通過 <if test="_databaseId = 'oracle'"> 來為特定數(shù)據庫指定不同的 sql 語句。MyBatis 可以根據不同的數(shù)據庫廠商執(zhí)行不同的語句,這種多廠商的支持是基于映射語句中的 databaseId 屬性。 MyBatis 會加載不帶 databaseId 屬性和帶有匹配當前數(shù)據庫 databaseId 屬性的所有語句。 如果同時找到帶有 databaseId 和不帶 databaseId 的相同語句,則后者會被舍棄。
keyColumn該屬性用于設置第幾列是主鍵,當主鍵列不是表中的第 1 列時,就需要設置該屬性。如果是聯(lián)合主鍵,可以將多個值用逗號隔開。-

注意:insert 標簽中沒有 resultType 屬性,只有查詢操作才需要對返回結果類型進行相應的指定。

傳遞多個參數(shù)

在上面的示例中,我們在插入語句中只使用了一個 String 類型的參數(shù),而在實際的開發(fā)過程中,我們的插入語句往往需要使用多個參數(shù),Mybatis 為我們提供以下 3 種方式,來實現(xiàn)給映射器傳遞多個參數(shù):

  • 使用 Map 傳遞參數(shù)
  • 使用注解傳遞參數(shù)
  • 使用 JavaBean 傳遞參數(shù)

使用 Map 傳遞參數(shù)

可以將參數(shù)封裝到一個 Map 對象中,然后傳遞給 MyBatis 的映射器,示例如下

在 WebsiteMapper 接口中,定義一個 addWebsiteByMap() 方法,并使用 Map 傳遞參數(shù) 

int addWebsiteByMap(Map<String, String> params);

 在 WebsiteMapper.xml 中,使用 insert 標簽定義一條插入語句,并接收通過 Map 傳遞的參數(shù)

<!--接收 Map 參數(shù)-->
<insert id="addWebsiteByMap" parameterType="map">
    insert into Website (name, url) values (#{name}, #{url})
</insert>

使用注解傳遞參數(shù)

在 WebsiteMapper 接口中,定義一個 addWebsiteByParam() 方法,并使用 @Param 注解傳遞參數(shù) 

int addWebsiteByParam(@Param("name") String name, @Param("url") String url);

 在 WebsiteMapper.xml 中使用 insert 標簽定義一條插入語句,并接收通過 @Param 注解傳遞的參數(shù)

<!--接收 @Param 注解傳遞的參數(shù)-->
<insert id="addWebsiteByParam">
    insert into Website (name, url)  values (#{name}, #{url})
</insert>

 測試代碼

int i = websiteMapper.addWebsiteByParam("111", "222");
System.out.println("通過 @Param 注解成功向數(shù)據庫中添加了 " + i + " 條記錄");

使用 JavaBean 傳遞參數(shù)

在 WebsiteMapper 接口中,定義一個addWebsiteByJavaBean() 方法

int addWebsiteByJavaBean(Website website);

 在 WebsiteMapper.xml 中使用 insert 標簽定義一條插入語句,并接收通過 JavaBean 傳遞的參數(shù)

<!--接收通過 JavaBean 傳遞的參數(shù)-->
<insert id="addWebsiteByJavaBean" parameterType="net.cc.www.po.Website">
    insert into Website (name, url) values (#{name}, #{url})
</insert>

區(qū)別

以上 3 種方式的區(qū)別如下:

  • 使用 Map 傳遞參數(shù)會導致業(yè)務可讀性的喪失,繼而導致后續(xù)擴展和維護的困難,所以在實際應用中我們應該果斷廢棄該方式。
  • 使用 @Param 注解傳遞參數(shù)會受到參數(shù)個數(shù)的影響。當 n≤5 時,它是最佳的傳參方式,因為它更加直觀;當 n>5 時,多個參數(shù)將給調用帶來困難。
  • 當參數(shù)個數(shù)大于 5 個時,建議使用 JavaBean 方式。

主鍵(自動遞增)回填

MySQL、SQL Server 等數(shù)據庫表可以采用自動遞增的字段作為其主鍵,當向這樣的數(shù)據庫表插入數(shù)據時,即使不指定自增主鍵的值,數(shù)據庫也會根據自增規(guī)則自動生成主鍵并插入到表中。一些特殊情況下,可能需要將這個剛剛生成的主鍵回填到請求對象(原本不包含主鍵信息的請求對象)中,供其他業(yè)務使用。可以通過在 insert 標簽中添加  keyProperty 和 useGeneratedKeys 屬性,來實現(xiàn)該功能。

<insert id="addWebsite" parameterType="net.cc.po.Website" keyProperty="id" useGeneratedKeys="true">
    insert into Website (name,url) values(#{name},#{url})
</insert>

自定義主鍵

如果在實際項目中,若數(shù)據庫不支持主鍵自動遞增(例如 Oracle),或者取消了主鍵自動遞增的規(guī)則,我們可以使用 MyBatis 的 <selectKey> 標簽自定義生成主鍵,具體配置代碼如下:

<insert id="insertWebsite" parameterType="net.cc.po.Website">
    <!-- 先使用selectKey標簽定義主鍵,然后再定義SQL語句 -->
    <selectKey keyProperty="id" resultType="Integer" order="BEFORE">
        select if(max(id) is null,1,max(id)+1) as newId from Website
    </selectKey>
    insert into Website (id,name,url) values(#{id},#{name},#{url})
</insert>

 <selectKey> 標簽中屬性說明如下:

  • keyProperty:用于指定主鍵值對應的 PO 類的屬性。
  • order:該屬性取值可以為 BEFORE 或 AFTER。BEFORE 表示先執(zhí)行 <selectKey> 標簽內的語句,再執(zhí)行插入語句;AFTER 表示先執(zhí)行插入語句再執(zhí)行 <selectKey> 標簽內的語句

到此這篇關于MyBatis insert標簽的文章就介紹到這了,更多相關MyBatis insert標簽內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java三種循環(huán)求和方法

    Java三種循環(huán)求和方法

    本篇文章給大家介紹了Java三種循環(huán)求和的方法,大家在學程序的時候如果能用的到,參考下吧。
    2018-02-02
  • java實現(xiàn)文件上傳功能

    java實現(xiàn)文件上傳功能

    這篇文章主要為大家詳細介紹了java實現(xiàn)文件上傳功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 使用springboot訪問圖片本地路徑并映射成url

    使用springboot訪問圖片本地路徑并映射成url

    這篇文章主要介紹了使用springboot訪問圖片本地路徑并映射成url的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot實現(xiàn)文件上傳接口

    SpringBoot實現(xiàn)文件上傳接口

    這篇文章主要為大家詳細介紹了SpringBoot實現(xiàn)文件上傳接口,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • SpringBoot統(tǒng)一數(shù)據返回的幾種方式

    SpringBoot統(tǒng)一數(shù)據返回的幾種方式

    在Web應用程序開發(fā)中,統(tǒng)一數(shù)據返回格式對于前后端分離項目尤為重要,本文就來介紹一下SpringBoot統(tǒng)一數(shù)據返回的幾種方式,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • java獲取新insert數(shù)據自增id的實現(xiàn)方法

    java獲取新insert數(shù)據自增id的實現(xiàn)方法

    這篇文章主要介紹了java獲取新insert數(shù)據自增id的實現(xiàn)方法,在具體生成id的時候,我們的操作順序一般是:先在主表中插入記錄,然后獲得自動生成的id,以它為基礎插入從表的記錄,需要的朋友可以參考下
    2019-06-06
  • springboot controller 增加指定前綴的兩種實現(xiàn)方法

    springboot controller 增加指定前綴的兩種實現(xiàn)方法

    這篇文章主要介紹了springboot controller 增加指定前綴的兩種實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 關于Java實現(xiàn)word(docx、doc)轉html的完美解決方案

    關于Java實現(xiàn)word(docx、doc)轉html的完美解決方案

    文章介紹了多種將Word文檔轉換為HTML的方法,包括使用Microsoft Word自帶的導出功能、第三方工具和編程實現(xiàn),展示了如何實現(xiàn)將.docx文件轉換為HTML文件,并自動生成目錄、處理分頁符和增強表格樣式等功能,感興趣的朋友一起看看吧
    2025-01-01
  • Spring Boot如何通過自定義注解實現(xiàn)日志打印詳解

    Spring Boot如何通過自定義注解實現(xiàn)日志打印詳解

    這篇文章主要給大家介紹了關于Spring Boot如何通過自定義注解實現(xiàn)日志打印的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 告訴你為什么?ThreadLocal?可以做到線程隔離

    告訴你為什么?ThreadLocal?可以做到線程隔離

    對于 ThreadLocal 我們都不陌生,它的作用如同它的名字用于存放線程本地變量,這篇文章主要介紹了為什么?ThreadLocal?可以做到線程隔離,需要的朋友可以參考下
    2022-07-07

最新評論