日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

java批量执行查询sql语句_详解MyBatis直接执行SQL查询及数据批量插入

發布時間:2024/10/8 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java批量执行查询sql语句_详解MyBatis直接执行SQL查询及数据批量插入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、直接執行SQL查詢:

1、mappers文件節選

${paramSQL}

2、DAO類節選

public interface SomeDAO{

List getInstanceModel(@Param("paramSQL")String sql);

}

3、注意事項

3.1:傳入方法的參數sql必須遵循以下規范"select XXX as instanceid, XXX as instancename ....." ,否則MyBatis無法自動將查詢結果變成Java對象。

3.2: mappers文件中的#{}語法與${}語法的區別:

默認情況下, #{}語法會促使MyBatis生成PreparedStatement屬性并且使用PreparedStatement的參數(=?)來設置值。如果你想直接將未更改的字符串代入到sql中,可以使用${}。

也就是說,MyBatis看到 #{}會認為你在給sql中的變量賦值,就像JDBC編程中給問號賦值一樣(比如MyBatis會判斷它的類型,并自動在前后加單引號)。而當MyBatis看到${}的時候會直接將之替換成變量的值而不做任何處理。

所以在使用${}的時候,不需要像#{}一樣寫"jdbcType=VARCHAR"之類的屬性。

3.3:resultType和resultMap

按照1中的寫法, < resultMap > 部分可以刪除不用了,因為在接下來的中沒用使用定義的resultMap,而是使用了resultType。

所以我們可以看出,關于返回值的定義有兩種寫法,一種是定義一個resultMap然后引用這個resultMap,還有一種就是直接使用resultType指定一個類的路徑。

二、批量插入數據

1、經驗告訴我們,使用insert into XXX values(XX)(XXX)(XXX),比使用insert into XXX values(XX),insert into XXX values(XXX),insert into XXX values(XXX)效率要高。

2、在MyBatis中的用法

2.1、mappers文件節選

insert into student ( ) values (null,#{item.name},#{item.sex},#{item.address},#{item.telephone},#{item.tId})

2.2、DAO類節選

public interface SomeDAO{

public void insertBatch(@Param("list")List students);

}

詳解mybatis批量插入數據

首先看看批處理的mapper.xml文件

resultType="java.lang.String">

SELECT CURRENT_TIMESTAMP()

insert into kangaiduoyaodian ( depart1, depart2, product_name,

generic_name, img, product_specification, unit,

approval_certificate, manufacturer, marketPrice, vipPrice,

website, fetch_time, productdesc ) values

separator=",">

( #{item.depart1}, #{item.depart2}, #{item.productName},

#{item.genericName}, #{item.img},

#{item.productSpecification}, #{item.unit},

#{item.approvalCertificate}, #{item.manufacturer},

#{item.marketprice}, #{item.vipprice}, #{item.website},

#{fetchTime}, #{item.productdesc} )

在批處理中,我發現有幾個需要注意的問題

1、主鍵的自動獲取,在insert中添加useGeneratedKeys=”true” keyProperty=”id”這兩個屬性無效,并且或中斷數據插入,如果id是數據庫自增的話,可以什么都不寫,在插入的語句中去除主鍵屬性,還有就是利用

resultType="java.lang.Integer">

SELECT LAST_INSERT_ID()

注意 : 標簽在insert下只能存在一個;批處理的時候不適合使用,主鍵自增最好,或者指定

2,插入時間的獲取如上面所示,我用的是mysql,只要是mysql函數都可以拿來使用,插入時間和主鍵都是mysql函數中的一個。。。

總結

以上是生活随笔為你收集整理的java批量执行查询sql语句_详解MyBatis直接执行SQL查询及数据批量插入的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。