Groovy書寫不依賴與實體的GORM

2021-08-04 03:15:40 字數 3290 閱讀 5779

最近在寫乙個專案,它要求使用者能夠自主選擇元件進行建表並實現資料庫的增刪改查操作。這個需求的重點在於資料表本身不固定,無法事先確定表和實體,我們的設想是利用前端將使用者的選擇結果轉化成乙個jsonlist物件,後台通過解析json串後,利用sql語句的拼接實現建庫以及gorm操作。

專案運用grails框架,因此這裡我們使用的是groovy語法

首先我們需要建乙個方法類,其中包含create以及gorm方法:

class sqltest '

static def createtable(def jsonlist)

sqlcreate = sqlcreate[0..sqlcreate.length() - 2] + ");"

sql.execute(sqlcreate)

println("**" + jsonlist.get("name") + "建立完成!\n")

}// 刪除資料庫表函式,json形式 ''

static def droptable(def jsonlist)

//插入資料 ''

static def insertdata(def jsonlist)

sqlinsert = sqlinsert[0..sqlinsert.length() - 2] + ";"

sql.execute(sqlinsert)

println("插入資料到" + jsonlist.get("name") + "完成!\n")

}//批量插入資料 ',...]}'

static def insertdatas(def jsonlist)

sqlinsert = sqlinsert[0..sqlinsert.length() - 2] + ") values"

jsonlist.get("listjson").each

sqlinsert = sqlinsert[0..sqlinsert.length() - 2] + "),"

}sqlinsert = sqlinsert[0..sqlinsert.length() - 2] + ";"

sql.execute(sqlinsert)

println("批量插入資料到" + jsonlist.get("name") + "完成!\n")

}//更新函式,需輸入要更新的資料和id ''

static def updatadata(def jsonlist)

sqlupdate = sqlupdate[0..sqlupdate.length() - 2] + condition

sql.executeupdate(sqlupdate)

println("更新" + jsonlist.get("name") + "表id為" + jsonlist.get("id") + "的資料完成!")

}//刪除函式,條件任意 ''

// value需符合sql語法:'like "%example%"'、'="example"'、'<"example"'等等

// delete from te where json1 like '%j%' and json2 = '666'

static def deletedata(def jsonlist)

sqldelete = sqldelete[0..sqldelete.length() - 5] + ';'

sql.executeupdate(sqldelete)

println("刪除" + jsonlist.get("name") + "表相關資料完成!")

}//選擇函式,條件任意 ''

// value需符合sql語法:'like "%example%"'、'="example"'、'<"example"'等等

// select * from te where json1 like '%j%' and json2 = '666'

static def selectdata(def jsonlist)

sqlselect = sqlselect[0..sqlselect.length() - 5] + ';'

def rowss = sql.rows(sqlselect)

println("選擇" + jsonlist.get("name") + "表相關資料完成!")

return rowss

}}

為了驗證函式的正確性,我們可以在類中加入主函式測試

public

static

void main(string args) '

def test1json = new jsonslurper().parsetext(test1)

createtable(test1json)

//根據json向任意**插入單條資料的函式

def test2 = ''

def test2json = new jsonslurper().parsetext(test2)

insertdata(test2json)

//根據json向任意**批量插入的函式

def test3 = ',]}'

def test3json = new jsonslurper().parsetext(test3)

insertdatas(test3json)

//根據json向任意**更新資料的函式

def test4 = ''

def test4json = new jsonslurper().parsetext(test4)

updatadata(test4json)

//根據json向任意**刪除資料的操作

def test5 = ''

def test5json = new jsonslurper().parsetext(test5)

deletedata(test5json)

//根據json向任意**選擇的操作

def test6 = ''

def test6json = new jsonslurper().parsetext(test6)

println(selectdata(test6json).join('\n'))

}

類寫完了,測試通過,接下來我們要把方法封裝成介面

新建formsqlcontroller

介面由於大多數方法幾乎一樣,這裡我只給出最具代表性的selectdata介面

def selectdata() 

} else

render result

}

discuz新的單點論壇(不依賴UCenter)

discuz 本身提供ucenter使用者中心能夠實現單點登入。可是其它應用要單點登入到discuz還是存在若干問題 須要2次啟用。可能造成server無響應,論壇顯示的最新註冊使用者無法同步更新,官網沒有提供其它語言的api 等這裡提供了段 在bbs根資料夾下儲存例如以下php go.php zj...

不依賴堆疊的鍊錶反轉 java實現

import datastruct.linknode public class linklistreverse linknode head llr.initlist a linknode after llr.linkreverse head while after.getnext null priv...

react mock 前端不依賴後台服務的開發

1 安裝 npm install mockjs d 2 配置mock 1 資料檔案 data.js import mock,from mockjs let data for let i 0 i 2 url配置檔案 index.js import mock from mockjs 引入資料 impor...