欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

調試之控制臺打印SQL

Mybatis的使用流程

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

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

打印sql的配置

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

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

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

log4j.rootLogger=ERROR, stdout
log4j.logger.cn.junko=DEBUG
#打印更多的TRACE內容
#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ù)

當需要多個參數(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ù)都進行as操作嗎?這里就用到Mybatis的自帶配置

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

這樣就能夠進行自動映射,例如cover_img會自動映射為coverImg

Mybatis入?yún)arameterType

parameterType 參數(shù)類型

可以是基本類型

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

也可以是JAVA集合List或者Map

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

或者是自定義的對象

parameterType="cn.junko.domain.Video"

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

例⼦ #{title, jdbcType=VARCHAR}

注意:

  • 多數(shù)情況不加是正常使⽤,但是如果出現(xiàn)報錯:⽆效的列類型,則是缺少jdbcType;
  • 只有當字段可為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>

獲取自增主鍵,則需要在標簽頭加入這三段,即可自動映射到實體類中
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)拼接的內置標簽,常⽤于 批量新增、in查詢等常⻅

包含以下屬性:

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

item:每⼀個元素進⾏迭代時的別名
index:索引的屬性名,在集合數(shù)組情況下值為當前索引值,當?shù)鷮ο笫莔ap時,這個值是
map的key
open:整個循環(huán)內容的開頭字符串
close:整個循環(huán)內容的結尾字符串
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標簽

  • 可以選擇性更新⾮空字段
  • if test標簽介紹
    • if 標簽可以通過判斷傳⼊的值來確定查詢條件,test 指定⼀個OGNL表達式
    • 常⻅寫法
//當前字段符合條件才更新這個字段的值
<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>

為什么要轉義字符:

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

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

總結

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

相關文章

  • 理解Java面向對象編程設計

    理解Java面向對象編程設計

    這篇文章主要介紹了理解Java面向對象編程設計,面向對象編程是一種編程思維方式和編碼架構。下面詳細內容,需要的小伙伴可以參考一下
    2022-01-01
  • spring boot使用logback日志級別打印控制操作

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

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

    SpringBoot Security安裝配置及Thymeleaf整合

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

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

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

    SpringBoot接口調用之后報404問題的解決方案

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

    Spring Boot基礎學習之Mybatis操作中使用Redis做緩存詳解

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

    Java 虛擬機棧詳解分析

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

    SpringCloud中的Feign遠程調用接口傳參失敗問題

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

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

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

    IntelliJ IDEA中如何調試Java Stream操作

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

最新評論