麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

MyBatis動態創建表的實例代碼

2024-07-14 08:41:30
字體:
來源:轉載
供稿:網友

項目中業務需求的不同,有時候我們需要動態操作數據表(如:動態建表、操作表字段等)。常見的我們會把日志、設備實時位置信息等存入數據表,并且以一定時間段生成一個表來存儲,log_201806、log_201807等。在這里我們用MyBatis實現,會用到動態SQL。

動態SQL是Mybatis的強大特性之一,MyBatis在對sql語句進行預編譯之前,會對sql進行動態解析,解析為一個BoundSql對象,也是在此對動態sql進行處理。

在動態sql解析過程中,#{ }與${ }的效果是不一樣的:

#{ } 解析為一個JDBC預編譯語句(prepared statement)的參數標記符。

如以下sql語句:

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

會被解析為:

select * from user where name = ?;

可以看到#{ }被解析為一個參數占位符 ? 。

${ } 僅僅為一個純粹的String替換,在動態SQL解析階段將會進行變量替換。

如以下sql語句:

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

當我們傳遞參數“joanna”時,sql會解析為:

select * from user where name = “joanna”;

可以看到預編譯之前的sql語句已經不包含變量name了。

綜上所述,${ }的變量的替換階段是在動態SQL解析階段,而#{ } 的變量的替換是在DBMS中。

下面實現MyBatis動態創建表,判斷表是否存在,刪除表功能。

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);}

總結

以上所述是小編給大家介紹的MyBatis動態創建表的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久久久一区二区三区精品 | 亚洲少妇诱惑 | 国产免费一区二区三区最新不卡 | 久久免费视频7 | 久啪视频| 欧美日韩在线播放一区 | 国产精品视频1区 | av手机在线免费播放 | 99亚洲 | 综合在线一区 | 一级毛片免费高清 | 一级免费 | 啊~用cao嗯力cao烂我视频 | 一区二区三区欧美日韩 | 污视频在线看 | 日本网站一区二区三区 | 亚洲国产精品久久久久制服红楼梦 | 一级在线观看视频 | 得得啪在线视频 | 久久国产精品久久久久久 | 爱逼av | 国产亚洲综合一区二区 | 在线免费小视频 | 久久性生活免费视频 | 亚洲小视频在线播放 | 精品一区二区三区免费毛片 | 91精品最新国内在线播放 | 国产精品v片在线观看不卡 成人一区二区三区在线 | 在线播放中文 | 黄色大片网站在线观看 | 成人做爰高潮片免费视频美国 | 91社区电影 | 在线观看麻豆 | 91成人免费在线观看 | 在线小视频国产 | 欧美一区二区三区久久精品视 | 久久经典国产视频 | 亚洲成人中文字幕在线 | 久久久久一区二区三区 | 7777在线视频免费播放 | 九九热视频免费在线观看 |