国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > Java > 正文

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

2024-07-14 08:41:30
字體:
供稿:網(wǎng)友

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

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

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

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

如以下sql語句:

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

會被解析為:

select * from user where name = ?;

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

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

如以下sql語句:

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

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

select * from user where name = “joanna”;

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

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

下面實現(xiàn)MyBatis動態(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動態(tài)創(chuàng)建表的實例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對VeVb武林網(wǎng)網(wǎng)站的支持!


注:相關(guān)教程知識閱讀請移步到JAVA教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 神农架林区| 玉田县| 贡嘎县| 蒲江县| 油尖旺区| 吴川市| 甘肃省| 丰台区| 北碚区| 澄迈县| 武胜县| 古田县| 桐梓县| 博乐市| 海南省| 普定县| 隆尧县| 江津市| 双流县| 宁陕县| 永安市| 喀喇沁旗| 台东市| 镇远县| 牡丹江市| 钟祥市| 沾化县| 望城县| 乳山市| 富平县| 拉萨市| 武安市| 兴业县| 钟山县| 芜湖县| 罗甸县| 团风县| 田林县| 阜宁县| 大关县| 孟津县|