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

MyBatis查詢(xún)、新增、更新與刪除操作指南

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

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

Mybatis的使用流程

先來(lái)回顧一下mybatis的使用流程

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

打印sql的配置

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

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

在應(yīng)⽤的classpath中創(chuàng)建名稱(chē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

這樣,我們?cè)趫?zhí)行操作數(shù)據(jù)庫(kù)的時(shí)候就會(huì)有日志打印出來(lái)

查詢(xún)

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

當(dāng)需要多個(gè)參數(shù)進(jìn)行查詢(xún)的時(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ù)庫(kù)字段是下劃線(xiàn),java屬性是駝峰,怎么查詢(xún)映射上去

方法: select cover_img as coverImg from video

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

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

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

Mybatis入?yún)arameterType

parameterType 參數(shù)類(lèi)型

可以是基本類(lèi)型

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

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

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

或者是自定義的對(duì)象

parameterType="cn.junko.domain.Video"

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

例⼦ #{title, jdbcType=VARCHAR}

注意:

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

常見(jiàn)的數(shù)據(jù)庫(kù)類(lèi)型和java列席對(duì)比

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

插入

編寫(xiě)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í)體類(lèi)中
useGeneratedKeys="true" keyProperty="id" keyColumn="id"

測(cè)試

@Test
 public void addVideo(){
  Video video = new Video();
  video.setTitle("測(cè)試數(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查詢(xún)等常⻅

包含以下屬性:

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

item:每⼀個(gè)元素進(jìn)⾏迭代時(shí)的別名
index:索引的屬性名,在集合數(shù)組情況下值為當(dāng)前索引值,當(dāng)?shù)鷮?duì)象是map時(shí),這個(gè)值是
map的key
open:整個(gè)循環(huán)內(nèi)容的開(kā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);

主鍵自增同樣適用

更新

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

  • 可以選擇性更新⾮空字段
  • if test標(biāo)簽介紹
    • if 標(biāo)簽可以通過(guò)判斷傳⼊的值來(lái)確定查詢(xún)條件,test 指定⼀個(gè)OGNL表達(dá)式
    • 常⻅寫(xiě)法
//當(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類(lèi)⾥⾯的是基本數(shù)據(jù)類(lèi)型,還是包裝數(shù)據(jù)類(lèi)型

刪除

delete刪除語(yǔ)法

需求:刪除某個(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寫(xiě)在XML⾥⾯, 有些sql的語(yǔ)法符號(hào)和xml⾥⾯的沖突

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

總結(jié)

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

相關(guān)文章

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

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

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

    java實(shí)現(xiàn)調(diào)用http請(qǐng)求的五種常見(jiàn)方式

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

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

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

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

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

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

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

    解決跨域請(qǐng)求,NG返回403(403并不一定是NG問(wèn)題)

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

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

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

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

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

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

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

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

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

最新評(píng)論

成武县| 志丹县| 崇明县| 开江县| 沽源县| 肃宁县| 阿尔山市| 洞头县| 资溪县| 广东省| 汝城县| 嘉祥县| 博爱县| 孙吴县| 郸城县| 和龙市| 永济市| 绿春县| 凤庆县| 保靖县| 德清县| 仁布县| 九龙坡区| 大埔县| 泰兴市| 蓝田县| 周宁县| 吉林省| 屯昌县| 普兰店市| 井研县| 依安县| 湟中县| 夏邑县| 太谷县| 宁阳县| 温宿县| 五寨县| 丽水市| 长垣县| 靖边县|