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

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

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

查詢

多個(gè)參數(shù)

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

<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í)候怎么辦,每個(gè)參數(shù)都進(jìn)行as操作嗎?這里就用到Mybatis的自帶配置

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

這樣就能夠進(jìn)行自動(dòng)映射,例如cover_img會自動(dòng)映射為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ù)值,具體某個(gè)字段的類型,從java類型映射到數(shù)據(jù)庫類型

例⼦ #{title, jdbcType=VARCHAR}

注意:

  • 多數(shù)情況不加是正常使⽤,但是如果出現(xiàn)報(bào)錯(cuò):⽆效的列類型,則是缺少jdbcType;
  • 只有當(dāng)字段可為NULL時(shí)才需要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)簽頭加入這三段,即可自動(dòng)映射到實(shí)體類中
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類型的時(shí)候,collection屬性值為list
 ⼊參是Map類型的時(shí)候,collection 屬性值為map的key值

item:每⼀個(gè)元素進(jìn)⾏迭代時(shí)的別名
index:索引的屬性名,在集合數(shù)組情況下值為當(dāng)前索引值,當(dāng)?shù)鷮ο笫莔ap時(shí),這個(gè)值是
map的key
open:整個(gè)循環(huán)內(nèi)容的開頭字符串
close:整個(gè)循環(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 指定⼀個(gè)OGNL表達(dá)式
    • 常⻅寫法
//當(dāng)前字段符合條件才更新這個(gè)字段的值
<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刪除語法

需求:刪除某個(gè)時(shí)間段之后 且⾦額⼤于 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)文章

  • 理解Java面向?qū)ο缶幊淘O(shè)計(jì)

    理解Java面向?qū)ο缶幊淘O(shè)計(jì)

    這篇文章主要介紹了理解Java面向?qū)ο缶幊淘O(shè)計(jì),面向?qū)ο缶幊淌且环N編程思維方式和編碼架構(gòu)。下面詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-01-01
  • spring boot使用logback日志級別打印控制操作

    spring boot使用logback日志級別打印控制操作

    這篇文章主要介紹了spring boot使用logback日志級別打印控制操作,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • SpringBoot Security安裝配置及Thymeleaf整合

    SpringBoot Security安裝配置及Thymeleaf整合

    這篇文章主要介紹了SpringBoot Security安裝配置及Thymeleaf整合,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Spring Boot整合web層實(shí)現(xiàn)過程詳解

    Spring Boot整合web層實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了Spring Boot整合web層實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • SpringBoot接口調(diào)用之后報(bào)404問題的解決方案

    SpringBoot接口調(diào)用之后報(bào)404問題的解決方案

    這篇文章主要介紹了SpringBoot接口調(diào)用之后報(bào)404問題的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。
    2021-06-06
  • Spring Boot基礎(chǔ)學(xué)習(xí)之Mybatis操作中使用Redis做緩存詳解

    Spring Boot基礎(chǔ)學(xué)習(xí)之Mybatis操作中使用Redis做緩存詳解

    這篇文章主要給大家介紹了關(guān)于Spring Boot基礎(chǔ)學(xué)習(xí)之Mybatis操作中使用Redis做緩存的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧
    2018-11-11
  • Java 虛擬機(jī)棧詳解分析

    Java 虛擬機(jī)棧詳解分析

    在線程創(chuàng)建時(shí),JVM會為每個(gè)線程創(chuàng)建一個(gè)單獨(dú)的棧空間。JVM的棧內(nèi)存不需要是連續(xù)的。JVM在棧上會進(jìn)行兩個(gè)操作:壓入和彈出棧幀。對于一個(gè)特定的線程來說,棧被稱為運(yùn)行時(shí)棧。這個(gè)線程調(diào)用的每個(gè)方法會被存儲在響應(yīng)的運(yùn)行時(shí)棧里,包括了參數(shù),局部變量,計(jì)算媒介和其他數(shù)據(jù)
    2021-11-11
  • SpringCloud中的Feign遠(yuǎn)程調(diào)用接口傳參失敗問題

    SpringCloud中的Feign遠(yuǎn)程調(diào)用接口傳參失敗問題

    這篇文章主要介紹了SpringCloud中的Feign遠(yuǎn)程調(diào)用接口傳參失敗問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • easyexcel讀取excel合并單元格數(shù)據(jù)的操作代碼

    easyexcel讀取excel合并單元格數(shù)據(jù)的操作代碼

    這篇文章主要介紹了easyexcel讀取excel合并單元格數(shù)據(jù)的操作代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • IntelliJ IDEA中如何調(diào)試Java Stream操作

    IntelliJ IDEA中如何調(diào)試Java Stream操作

    這篇文章主要介紹了IntelliJ IDEA中如何優(yōu)雅的調(diào)試Java Stream操作,在強(qiáng)大的IDEA插件支持下,stream的調(diào)試其實(shí)也沒那么難了,下面就來學(xué)習(xí)一下在IDEA中如何調(diào)試stream操作吧
    2022-05-05

最新評論