反射之动态拼接sql字符串「建议收藏」
反射之動(dòng)態(tài)拼接sql字符串的實(shí)現(xiàn)
前言
自己在學(xué)習(xí)JDBC連接數(shù)據(jù)庫,不用框架手動(dòng)實(shí)現(xiàn)時(shí),個(gè)人覺得反射動(dòng)態(tài)拼接sql的思想很好,當(dāng)然了大家伙覺得好才是真的好(廣州好迪,手動(dòng)狗頭),所以才有了本文對(duì)該知識(shí)點(diǎn)梳理與總結(jié)。分享給大家,下面開始步入文章的正文,親們不要掉隊(duì)。
(噓~看這里:使用的開發(fā)工具是IDEA哦)
正文
首先帶領(lǐng)大家理解一下我的思路,遙想當(dāng)時(shí)我想了幾個(gè)小時(shí)不知如何下手,無所事事敲鍵盤,未曾想用最簡(jiǎn)單的方式反而有了結(jié)果。
具體實(shí)現(xiàn)步驟
- JDBC連接數(shù)據(jù)庫
- 根據(jù)數(shù)據(jù)庫表中字段創(chuàng)建實(shí)體類
親們,上面這兩步我就不說了,不是本文的重點(diǎn)不做說明,有時(shí)間會(huì)總結(jié)JDBC連接數(shù)據(jù)庫。
- 如何實(shí)現(xiàn)動(dòng)態(tài)sql語句的拼接
重點(diǎn)來了搬好小板凳坐好!
小小腦袋講故事給大家聽
我是小朋友望舒,在很久很久以前,我的夢(mèng)想是實(shí)現(xiàn)動(dòng)態(tài)拼接sql,既然動(dòng)態(tài)拼接,我就要有東西來存放它,那就整兩條String(字符串)(不妨給他們起名sqlSentence,sqlResult)把他們拼接成sql來展現(xiàn)我拼接后的字符串。不用多久,我就會(huì)升職加薪、當(dāng)上總經(jīng)理、出任CEO、迎娶白富美、走上人生巔峰,想想還有點(diǎn)小激動(dòng)…)
公式 sql = sqlSentence + sqlResult
String sqlSentence = "";
String sqlResult = "";
Jetbrains全家桶1年46,售后保障穩(wěn)定
接下來就是反射原理地實(shí)現(xiàn)了(不得不說反射真的很強(qiáng)大),從反射的百寶箱里面找到了兩個(gè)工具:getClass()[獲得類]、getSimpleName()[獲得類的名字],拿著他倆去我家后院一頓操作:
Class<?> aClass = webpage.getClass();
String table = aClass.getSimpleName();
我發(fā)現(xiàn)了后院(數(shù)據(jù)庫中的)里的神奇寶物(webpage表,實(shí)際就是實(shí)體類?。?把他們sout(懂得都懂,不懂得問我)一下就是這個(gè)東東
隱隱約約看見寶物上印著一幅畫~~ 喏,就是這個(gè)(毫無保留展示給親們)
差點(diǎn)以為自己的夢(mèng)想實(shí)現(xiàn)了,卻發(fā)現(xiàn)自己要找的東西還沒有出現(xiàn)。于是我又拿出了百寶箱的另外兩件工具getDeclaredFields()[獲得某個(gè)屬性對(duì)象]、getName()[獲得類的完整路徑名字];用它們探索寶物的奧秘!
Field[] fields = aClass.getDeclaredFields();
String s1 = "";
String v1 = "";
for (Field f : fields) {
f.setAccessible(true);
if (f.get(webpage)==null){
return;
}else{
sqlSentence = sqlSentence + f.getName() + ",";
f.setAccessible(true);
sqlResult = sqlResult + "'" + f.get(webpage) + "'" + ",";
}
}
(這里我解釋一下:上面幾行代碼原理很簡(jiǎn)單,如果字段不為空就通過反射拿到實(shí)體類屬性,換句話說就是拿到數(shù)據(jù)庫表中字段,然后用foreach循環(huán)遍歷出來,并用單引號(hào)” ’ “和” , “隔開就達(dá)到了下面這樣的效果)
我拿出我的✂[substring()方法]把后面多余的逗號(hào)剪掉就會(huì)更好看一點(diǎn),給我的✂亮個(gè)相,不要嫌它丑
sqlSentence = sqlSentence .substring(0, s1.length() - 1);
sqlResult = sqlResult .substring(0, v1.length() - 1);
我在院子里跑累了,就打算躺下來休息休息,隨手把它們(sqlSentence,sqlResult)放在了床邊,我就昏昏欲睡了。。。。。。
不知睡了多久,剎那間一道強(qiáng)光閃現(xiàn),我揉了揉睡眼惺忪的眼睛— —沒錯(cuò) 寶物合二為一了!夢(mèng)想實(shí)現(xiàn)了??!(幸福來得太突然,一時(shí)間竟不知所措)
String sql = "insert into " + table + "(" + sqlSentence + ") values (" + sqlResult + ")";
System.out.println(sql);
打印在控制臺(tái)如下
自此,有了這件寶物望舒過上了愉快幸福的996生活~~~
完結(jié)!撒花?。。?/p>
結(jié)語
故事講完了,第一次嘗試著用這種方式來描述問題,還請(qǐng)大家多多指正。
我是望舒,Salute?。?!
總結(jié)
以上是生活随笔為你收集整理的反射之动态拼接sql字符串「建议收藏」的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SAP 几款容易令初学者混淆的 HANA
- 下一篇: 超百个免费api接口,分享给你「建议收藏