這篇文章給大家分享的是有關(guān)MyBatis如何動(dòng)態(tài)創(chuàng)建表的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過來看看吧。

項(xiàng)目中業(yè)務(wù)需求的不同,有時(shí)候我們需要?jiǎng)討B(tài)操作數(shù)據(jù)表(如:動(dòng)態(tài)建表、操作表字段等)。常見的我們會(huì)把日志、設(shè)備實(shí)時(shí)位置信息等存入數(shù)據(jù)表,并且以一定時(shí)間段生成一個(gè)表來存儲(chǔ),log_201806、log_201807等。在這里我們用MyBatis實(shí)現(xiàn),會(huì)用到動(dòng)態(tài)SQL。
動(dòng)態(tài)SQL是Mybatis的強(qiáng)大特性之一,MyBatis在對sql語句進(jìn)行預(yù)編譯之前,會(huì)對sql進(jìn)行動(dòng)態(tài)解析,解析為一個(gè)BoundSql對象,也是在此對動(dòng)態(tài)sql進(jìn)行處理。
在動(dòng)態(tài)sql解析過程中,#{ }與${ }的效果是不一樣的:
#{ } 解析為一個(gè)JDBC預(yù)編譯語句(prepared statement)的參數(shù)標(biāo)記符。
如以下sql語句:
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語句:
select * from user where name = ${name};當(dāng)我們傳遞參數(shù)“joanna”時(shí),sql會(huì)解析為:
select * from user where name = “joanna”;
可以看到預(yù)編譯之前的sql語句已經(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);
}感謝各位的閱讀!關(guān)于“MyBatis如何動(dòng)態(tài)創(chuàng)建表”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!
新聞名稱:MyBatis如何動(dòng)態(tài)創(chuàng)建表-創(chuàng)新互聯(lián)
網(wǎng)頁URL:http://chinadenli.net/article34/spppe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、云服務(wù)器、定制開發(fā)、電子商務(wù)、用戶體驗(yàn)、手機(jī)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容