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

MyBatis查詢、新增、更新與刪除操作指南

 更新時間:2020年06月14日 08:56:10   作者:MomokaJunko  
這篇文章主要給大家介紹了關(guān)于MyBatis查詢、新增、更新與刪除操作的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用MyBatis具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

調(diào)試之控制臺打印SQL

Mybatis的使用流程

先來回顧一下mybatis的使用流程

  • 創(chuàng)建mybatis-config.xml 全局的配置⽂件
  • 創(chuàng)建XXXMapper.xml配置⽂件
  • 創(chuàng)建SqlSessionFactory
  • ⽤SqlSessionFactory創(chuàng)建SqlSession對象
  • ⽤SqlSession執(zhí)⾏增刪改查CRUD

打印sql的配置

內(nèi)置的⽇志⼯⼚提供⽇志功能, 使⽤log4j配置打印sql,添加依賴

<dependency>
 <groupId>org.slf4j</groupId>
 <artifactId>slf4j-log4j12</artifactId>
 <version>1.7.30</version>
</dependency>

在應(yīng)⽤的classpath中創(chuàng)建名稱為 log4j.properties 的⽂件

log4j.rootLogger=ERROR, stdout
log4j.logger.cn.junko=DEBUG
#打印更多的TRACE內(nèi)容
#log4j.logger.cn.junko=TRACE
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

這樣,我們在執(zhí)行操作數(shù)據(jù)庫的時候就會有日志打印出來

查詢

多個參數(shù)

當(dāng)需要多個參數(shù)進(jìn)行查詢的時候,一般用到取別名,方便識別和使用

<select id="selectByPointAndTitle" resultType="cn.junko.domain.Video">
 select * from video where point = #{point} and title like concat('%',#{title},'%')
 </select>
List<Video> selectByPointAndTitle(@Param("point") int point,@Param("title") String title);

駝峰映射

前面也講到,數(shù)據(jù)庫字段是下劃線,java屬性是駝峰,怎么查詢映射上去

方法: select cover_img as coverImg from video

但是多字段的時候怎么辦,每個參數(shù)都進(jìn)行as操作嗎?這里就用到Mybatis的自帶配置

 <!--下劃線⾃動映射駝峰字段-->
 <settings>
 <setting name="mapUnderscoreToCamelCase" value="true"/>
 </settings>

這樣就能夠進(jìn)行自動映射,例如cover_img會自動映射為coverImg

Mybatis入?yún)arameterType

parameterType 參數(shù)類型

可以是基本類型

parameterType="java.lang.Long"
parameterType="java.lang.String"

也可以是JAVA集合List或者M(jìn)ap

parameterType="java.util.Map"
parameterType="java.util.List"

或者是自定義的對象

parameterType="cn.junko.domain.Video"

取參數(shù)值,具體某個字段的類型,從java類型映射到數(shù)據(jù)庫類型

例⼦ #{title, jdbcType=VARCHAR}

注意:

  • 多數(shù)情況不加是正常使⽤,但是如果出現(xiàn)報錯:⽆效的列類型,則是缺少jdbcType;
  • 只有當(dāng)字段可為NULL時才需要jdbcType屬性

常見的數(shù)據(jù)庫類型和java列席對比

JDBC Type Java Type
CHAR String
VARCHAR String
LONGVARCHAR String
NUMERIC java.math.BigDecimal
DECIMAL java.math.BigDecimal
BIT boolean
BOOLEAN boolean
TINYINT byte
SMALLINT short
INTEGER INTEGER
INTEGER int
BIGINT long
REAL float
FLOAT double
DOUBLE double
BINARY byte[]
VARBINARY byte[]
LONGVARBINARY byte[]
DATE java.sql.Date
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp
CLOB Clob
BLOB Blob
ARRAY Array
DISTINCT mapping of underlying type
STRUCT Struct
REF Ref
DATALINK java.net.URL

插入

編寫mapper

<insert id="addVideo" parameterType="cn.junko.domain.Video" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
  INSERT INTO `video`(`title`, `summary`, `cover_img`, `price`, `create_time`, `c_id`, `point`)
  VALUES (#{title},#{summary},#{coverImg},#{price},#{createTime},#{cid},#{point});
 </insert>

獲取自增主鍵,則需要在標(biāo)簽頭加入這三段,即可自動映射到實體類中
useGeneratedKeys="true" keyProperty="id" keyColumn="id"

測試

@Test
 public void addVideo(){
  Video video = new Video();
  video.setTitle("測試數(shù)據(jù)3");
  video.setSummary("nihao.com");
  video.setCoverImg("wangyi");
  video.setPrice(8777);
  video.setCreateTime(new Date());
  video.setCid(7);
  video.setPoint(5.7);
  int rows = videoMapper.addVideo(video);
  System.out.println("自增主鍵:"+video.getId());
  System.out.println(video.toString());
 }

foreach 批量插入

foreach批量插⼊多條視頻記錄,⽤于循環(huán)拼接的內(nèi)置標(biāo)簽,常⽤于 批量新增、in查詢等常⻅

包含以下屬性:

collection:必填,值為要迭代循環(huán)的集合類型,情況有多種
 ⼊參是List類型的時候,collection屬性值為list
 ⼊參是Map類型的時候,collection 屬性值為map的key值

item:每⼀個元素進(jìn)⾏迭代時的別名
index:索引的屬性名,在集合數(shù)組情況下值為當(dāng)前索引值,當(dāng)?shù)鷮ο笫莔ap時,這個值是
map的key
open:整個循環(huán)內(nèi)容的開頭字符串
close:整個循環(huán)內(nèi)容的結(jié)尾字符串
separator: 每次循環(huán)的分隔符

例子
需要注意的是item別名取值iteam.xxx

<insert id="addVideoList" parameterType="cn.junko.domain.Video" useGeneratedKeys="true" keyProperty="id" keyColumn="id">
  INSERT INTO `video`(`title`, `summary`, `cover_img`, `price`, `create_time`, `c_id`, `point`)
  VALUES
  <foreach collection="list" separator="," item="video">
  (#{video.title},#{video.summary},#{video.coverImg},#{video.price},#{video.createTime},#{video.cid},#{video.point})
  </foreach>
 </insert>
list.add(video1);
  list.add(video2);
  int rows = videoMapper.addVideoList(list);
  System.out.println(list);

主鍵自增同樣適用

更新

普通的更新比較簡單,這里使用一下if test標(biāo)簽

  • 可以選擇性更新⾮空字段
  • if test標(biāo)簽介紹
    • if 標(biāo)簽可以通過判斷傳⼊的值來確定查詢條件,test 指定⼀個OGNL表達(dá)式
    • 常⻅寫法
//當(dāng)前字段符合條件才更新這個字段的值
<if test='title != null and id == 87 '> title = #{title}, </if>
<if test="title!=null"> title = #{title}, </if>

代碼

<!-- /*suffixOverrides=","去掉后綴,*/-->
 <update id="updateVideo" parameterType="cn.junko.domain.Video">
  UPDATE `video`
  <trim prefix="set" >
   <if test="title != null">`title` = #{title},</if>
   <if test="summary != null">`summary` = #{summary},</if>
   <if test="coverImg != null">`cover_img` = #{coverImg},</if>
   <if test="price != 0">`price` = #{price},</if>
   <if test="createTime != null">`create_time` = #{createTime},</if>
   <if test="cid != 0">`c_id` = #{cid},</if>
   <if test="point > 7.0">`point` = #{point}</if>
  </trim>
  WHERE `id` = #{id};
 </update>

⼀定要看pojo類⾥⾯的是基本數(shù)據(jù)類型,還是包裝數(shù)據(jù)類型

刪除

delete刪除語法

需求:刪除某個時間段之后 且⾦額⼤于 10元的數(shù)據(jù)

<delete id="deleteByCreateTimeAndPrice" parameterType="java.util.Map">
 delete from video where create_time <![CDATA[ > ]]> #{createTime}
and price <![CDATA[ >= ]]> #{price}
</delete>

為什么要轉(zhuǎn)義字符:

由于MyBatis的sql寫在XML⾥⾯, 有些sql的語法符號和xml⾥⾯的沖突

⼤于等于 <![CDATA[ >= ]]>
⼩于等于 <![CDATA[ <= ]]>

總結(jié)

到此這篇關(guān)于MyBatis查詢、新增、更新與刪除操作指南的文章就介紹到這了,更多相關(guān)MyBatis查詢、新增、更新刪除操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring-cloud入門之spring-cloud-config(配置中心)

    spring-cloud入門之spring-cloud-config(配置中心)

    這篇文章主要介紹了spring-cloud入門之spring-cloud-config(配置中心),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • java實現(xiàn)調(diào)用http請求的五種常見方式

    java實現(xiàn)調(diào)用http請求的五種常見方式

    在實際開發(fā)過程中,我們經(jīng)常需要調(diào)用對方提供的接口或測試自己寫的接口是否合適,本文主要介紹了java實現(xiàn)調(diào)用http請求的四種常見方式,感興趣的可以了解一下
    2024-07-07
  • Spring Boot2.0實現(xiàn)靜態(tài)資源版本控制詳解

    Spring Boot2.0實現(xiàn)靜態(tài)資源版本控制詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot2.0實現(xiàn)靜態(tài)資源版本控制的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • Java并發(fā)編程之synchronized底層實現(xiàn)原理分析

    Java并發(fā)編程之synchronized底層實現(xiàn)原理分析

    這篇文章主要介紹了Java并發(fā)編程之synchronized底層實現(xiàn)原理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Springboot實現(xiàn)根據(jù)用戶ID切換動態(tài)數(shù)據(jù)源

    Springboot實現(xiàn)根據(jù)用戶ID切換動態(tài)數(shù)據(jù)源

    在很多具體應(yīng)用場景中,我們需要用到動態(tài)數(shù)據(jù)源的情況,比如多租戶的場景,系統(tǒng)登錄時需要根據(jù)用戶信息切換到用戶對應(yīng)的數(shù)據(jù)庫。這篇文章主要介紹了SpringBoot根據(jù)用戶ID實現(xiàn)切換動態(tài)數(shù)據(jù)源的示例代碼,感興趣的可以了解一下
    2021-12-12
  • 解決跨域請求,NG返回403(403并不一定是NG問題)

    解決跨域請求,NG返回403(403并不一定是NG問題)

    這篇文章主要介紹了解決跨域請求,NG返回403(403并不一定是NG問題),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Java編程實現(xiàn)月食簡單代碼分享

    Java編程實現(xiàn)月食簡單代碼分享

    這篇文章主要介紹了Java編程實現(xiàn)月食簡單代碼分享,程序很簡單,喜歡的朋友可以拿過去玩玩。
    2017-11-11
  • SpringBoot+thymeleaf+ajax實現(xiàn)局部刷新詳情

    SpringBoot+thymeleaf+ajax實現(xiàn)局部刷新詳情

    這篇文章主要介紹了SpringBoot+thymeleaf+ajax實現(xiàn)局部刷新詳情,文章圍繞主題展開詳細(xì)的內(nèi)容介紹具有一定的參考價值,需要的小伙伴可以參考一下
    2022-09-09
  • 詳解Spring Boot讀取配置文件與配置文件優(yōu)先級

    詳解Spring Boot讀取配置文件與配置文件優(yōu)先級

    這篇文章主要介紹了詳解Spring Boot讀取配置文件與配置文件優(yōu)先級,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • java遞歸實現(xiàn)樹形結(jié)構(gòu)數(shù)據(jù)完整案例

    java遞歸實現(xiàn)樹形結(jié)構(gòu)數(shù)據(jù)完整案例

    遞歸算法的代碼比較簡潔,可讀性較好;但是在實際的業(yè)務(wù)處理中會出現(xiàn)多次的重復(fù)調(diào)用,如果處理不好,很容易出現(xiàn)StackOverflowError報錯,這篇文章主要給大家介紹了關(guān)于java遞歸實現(xiàn)樹形結(jié)構(gòu)數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2023-04-04

最新評論

突泉县| 西峡县| 冀州市| 无棣县| 邵阳市| 新乡市| 麻栗坡县| 柘城县| 鄂州市| 荆州市| 兴宁市| 色达县| 宜兴市| 贵阳市| 河曲县| 荔浦县| 尼勒克县| 鄱阳县| 南雄市| 永春县| 理塘县| 天峻县| 松滋市| 南充市| 库尔勒市| 中方县| 思南县| 新晃| 万源市| 无锡市| 南昌市| 封丘县| 武夷山市| 定陶县| 庆安县| 漳州市| 浙江省| 浏阳市| 稷山县| 双牌县| 敖汉旗|