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

MyBatis動(dòng)態(tài)創(chuàng)建表的實(shí)例代碼

 更新時(shí)間:2018年07月11日 08:39:35   作者:Joanna.Yan  
在項(xiàng)目需求中,我們經(jīng)常會(huì)遇到動(dòng)態(tài)操作數(shù)據(jù)表的需求,常見(jiàn)的我們會(huì)把日志、設(shè)備實(shí)時(shí)位置信息等存入數(shù)據(jù)表,并且以一定時(shí)間段生成一個(gè)表來(lái)存儲(chǔ)。接下來(lái)通過(guò)本文給大家介紹MyBatis動(dòng)態(tài)創(chuàng)建表的方法,感興趣的朋友一起看看吧

項(xiàng)目中業(yè)務(wù)需求的不同,有時(shí)候我們需要?jiǎng)討B(tài)操作數(shù)據(jù)表(如:動(dòng)態(tài)建表、操作表字段等)。常見(jiàn)的我們會(huì)把日志、設(shè)備實(shí)時(shí)位置信息等存入數(shù)據(jù)表,并且以一定時(shí)間段生成一個(gè)表來(lái)存儲(chǔ),log_201806、log_201807等。在這里我們用MyBatis實(shí)現(xiàn),會(huì)用到動(dòng)態(tài)SQL。

動(dòng)態(tài)SQL是Mybatis的強(qiáng)大特性之一,MyBatis在對(duì)sql語(yǔ)句進(jìn)行預(yù)編譯之前,會(huì)對(duì)sql進(jìn)行動(dòng)態(tài)解析,解析為一個(gè)BoundSql對(duì)象,也是在此對(duì)動(dòng)態(tài)sql進(jìn)行處理。

在動(dòng)態(tài)sql解析過(guò)程中,#{ }與${ }的效果是不一樣的:

#{ } 解析為一個(gè)JDBC預(yù)編譯語(yǔ)句(prepared statement)的參數(shù)標(biāo)記符。

如以下sql語(yǔ)句:

select * from user where name = #{name};

會(huì)被解析為:

select * from user where name = ?;

可以看到#{ }被解析為一個(gè)參數(shù)占位符 ? 。

${ } 僅僅為一個(gè)純粹的String替換,在動(dòng)態(tài)SQL解析階段將會(huì)進(jìn)行變量替換。

如以下sql語(yǔ)句:

select * from user where name = ${name};

當(dāng)我們傳遞參數(shù)“joanna”時(shí),sql會(huì)解析為:

select * from user where name = “joanna”;

可以看到預(yù)編譯之前的sql語(yǔ)句已經(jīng)不包含變量name了。

綜上所述,${ }的變量的替換階段是在動(dòng)態(tài)SQL解析階段,而#{ } 的變量的替換是在DBMS中。

下面實(shí)現(xiàn)MyBatis動(dòng)態(tài)創(chuàng)建表,判斷表是否存在,刪除表功能。

Mapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
 "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="xx.xxx.xx.mapper.OperateTableMapper" >
  <select id="existTable" parameterType="String" resultType="Integer"> 
    select count(*) 
    from information_schema.TABLES 
    where LCASE(table_name)=#{tableName} 
  </select>
  <update id="dropTable"> 
    DROP TABLE IF EXISTS ${tableName} 
  </update> 
  <update id="createNewTable" parameterType="String"> 
    CREATE TABLE ${tableName} (
     id bigint(20) NOT NULL AUTO_INCREMENT,
     entityId bigint(20) NOT NULL,
     dx double NOT NULL,
     dy double NOT NULL,
     dz double NOT NULL,
     ntype varchar(32) NOT NULL,
     gnssTime bigint(20) NOT NULL,
     speed float DEFAULT NULL,
     direction float DEFAULT NULL,
     attributes varchar(255) DEFAULT NULL,
     PRIMARY KEY (id)) 
  </update> 
  <insert id="insert" parameterType="xx.xxx.xx.po.Trackpoint">
    insert into ${tableName}
    (entityId,dx,dy,dz,ntype,gnssTime,speed,direction,attributes)
    values
    (#{trackpoint.entityid},
    #{trackpoint.dx},
    #{trackpoint.dy},
    #{trackpoint.dz},
    #{trackpoint.ntype},
    #{trackpoint.gnsstime},
    #{trackpoint.speed},
    #{trackpoint.direction},
    #{trackpoint.attributes})
  </insert>
</mapper>

Mapper.java

package xx.xxx.xx.mapper;

import org.apache.ibatis.annotations.Param;
import xx.xxx.xx.po.Trackpoint;
public interface OperateTableMapper {
  int existTable(String tableName);
  int dropTable(@Param("tableName")String tableName);
  int createNewTable(@Param("tableName")String tableName);
  int insert(@Param("tableName")String tableName,@Param("trackpoint")Trackpoint trackpoint);
}

總結(jié)

以上所述是小編給大家介紹的MyBatis動(dòng)態(tài)創(chuàng)建表的實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • 詳解java CountDownLatch和CyclicBarrier在內(nèi)部實(shí)現(xiàn)和場(chǎng)景上的區(qū)別

    詳解java CountDownLatch和CyclicBarrier在內(nèi)部實(shí)現(xiàn)和場(chǎng)景上的區(qū)別

    這篇文章主要介紹了詳解java CountDownLatch和CyclicBarrier在內(nèi)部實(shí)現(xiàn)和場(chǎng)景上的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 詳解springboot-mysql-pagehelper分頁(yè)插件集成

    詳解springboot-mysql-pagehelper分頁(yè)插件集成

    這篇文章主要介紹了springboot-mysql-pagehelper分頁(yè)插件集成,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • java中文分詞之正向最大匹配法實(shí)例代碼

    java中文分詞之正向最大匹配法實(shí)例代碼

    中文分詞應(yīng)用很廣泛,網(wǎng)上也有很多開(kāi)源項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于java中文分詞之正向最大匹配法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • Java優(yōu)先隊(duì)列?priority?queue

    Java優(yōu)先隊(duì)列?priority?queue

    本文主要介紹了Java優(yōu)先隊(duì)列?priority?queue,優(yōu)先隊(duì)列是一種特殊的數(shù)據(jù)結(jié)構(gòu)隊(duì)列中每一個(gè)元素都被分配到一個(gè)優(yōu)先權(quán)值,出隊(duì)順序按照優(yōu)先權(quán)值來(lái)劃分。一般有兩種出隊(duì)順序高優(yōu)先權(quán)出隊(duì)或低優(yōu)先權(quán)出隊(duì),想了解具體內(nèi)容的小伙伴可以參考下文內(nèi)容,希望對(duì)你有所幫助
    2021-12-12
  • Spring循環(huán)依賴產(chǎn)生與解決

    Spring循環(huán)依賴產(chǎn)生與解決

    Spring的解決循環(huán)依賴是有前置條件的,要解決循環(huán)依賴我們首先要了解Spring Bean對(duì)象的創(chuàng)建過(guò)程和依賴注入的方式。依賴注入方式,我之前的博客有所分享,大家可以在看本篇文章之前進(jìn)行一下小小的回顧
    2022-12-12
  • Spring異常捕獲且回滾事務(wù)解決方案

    Spring異常捕獲且回滾事務(wù)解決方案

    這篇文章主要介紹了Spring異常捕獲且回滾事務(wù)解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • 使用filter實(shí)現(xiàn)url級(jí)別內(nèi)存緩存示例

    使用filter實(shí)現(xiàn)url級(jí)別內(nèi)存緩存示例

    這篇文章主要介紹了使用filter實(shí)現(xiàn)url級(jí)別內(nèi)存緩存示例,只需要一個(gè)靜態(tài)類,在filter中調(diào)用,也可以全部寫(xiě)到filt里面??梢愿鶕?jù)查詢參數(shù)分別緩存,需要的朋友可以參考下
    2014-03-03
  • java實(shí)現(xiàn)分布式鎖的常用三種方式

    java實(shí)現(xiàn)分布式鎖的常用三種方式

    本文主要介紹了java實(shí)現(xiàn)分布式鎖,一般有這3種方式,基于數(shù)據(jù)庫(kù)實(shí)現(xiàn)的分布式鎖、基于Redis實(shí)現(xiàn)的分布式鎖和基于Zookeeper實(shí)現(xiàn)的分布式鎖,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-08-08
  • springboot3請(qǐng)求參數(shù)種類及接口測(cè)試案例小結(jié)

    springboot3請(qǐng)求參數(shù)種類及接口測(cè)試案例小結(jié)

    這篇文章主要介紹了springboot3請(qǐng)求參數(shù)種類及接口測(cè)試案例小結(jié),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2023-10-10
  • 簡(jiǎn)單了解Java位域的一些知識(shí)

    簡(jiǎn)單了解Java位域的一些知識(shí)

    這篇文章主要介紹了簡(jiǎn)單了解Java位域的一些知識(shí),這個(gè)概念是在 Effective Java中了解到的, 可以通過(guò)EnumSet來(lái)代替位域這種方式表達(dá),需要的朋友可以參考下
    2019-07-07

最新評(píng)論