搞技術(shù)的手藝人都有個習(xí)慣,沒事喜歡瞎折騰。我也不例外,懂點Java、ORM 之類的技術(shù),最近又有點迷上了MongoDB,目前對MongoDB了解的還不算太多,但興趣到挺大。有句俗語:癮大水平低。通常是指某人某項技藝不高,但偏偏喜歡耍弄這項自己不精的技藝。這句話
搞技術(shù)的手藝人都有個習(xí)慣,沒事喜歡瞎折騰。我也不例外,懂點Java、ORM 之類的技術(shù),最近又有點迷上了MongoDB,目前對MongoDB了解的還不算太多,但興趣到挺大。有句俗語:癮大水平低。通常是指某人某項技藝不高,但偏偏喜歡耍弄這項自己不精的技藝。這句話對我現(xiàn)在挺適合。
why
ORM給眾多的Javaer留下了很多美好的印象,原因只有一個“方便”,口水:雖然Hibernate也是ORM,但使用起來并不方便。
打算自己寫個類里面封裝一套CRUD的方法,用這個類去調(diào)用 BasicDBObject ,DBCursor 等一些MongoDB Java API 里面的類。 現(xiàn)在的想法暫且不是很完美,但是可以簡化一些web應(yīng)用的開發(fā),說一個場景:用戶輸入表單信息,將輸入的表單信息,通過action層轉(zhuǎn)換成表單對象,對象傳入Service層操作具體的業(yè)務(wù)邏輯,再傳入底層通過API操作MongoDB,這是一個常見的場景。
但是如果一個表單上有很多字段,那么對象到了操作MongoDB的時候?qū)⑿枰止と〕鰜恚谝粋€個的put進去,一個頁面上有20、30個字段需要存入,這么一來一旦這樣的場景多了,我會崩潰的。如果還要來輸入的數(shù)據(jù)從MongoDB中在get出來,還要一個個的取,我會更加崩潰。。。。這樣的假象讓我不得不去折騰一下了。
場景如圖所示:
注釋:用戶通過HTML/JSP前端頁面提交參數(shù),Action層將參數(shù)轉(zhuǎn)換成對象傳到 Service層,Service層再 傳 對象 到DAO層,DAO層 把對象轉(zhuǎn)換成參數(shù) 調(diào)用API ,到了調(diào)用底層API的時候需要一個個get/put參數(shù),如果一多就是個悲劇啊。
how
就因為這樣讓我想到折騰可以進行的辦法,通過通過java反射加上SDK中注釋的功能,這樣可以靈活的操作,廢話少說,進行介紹具體怎么反射和采用注釋的折騰過程,主要思路如下:
1.主要實現(xiàn)程序 MyMongoDBORMImpl
class MyMongoDBORMImpl {
// 添加數(shù)據(jù)
public void addObject(Object clazz) { //傳入 new 對象,獲得表名和對象實例化參數(shù)
Map, ?> map= MappingTools.copyABeanToMap(clazz ); //調(diào)用自己寫的 映射工具
System.out.println(map );
Iterator> val=map.values().iterator(); // 通過反射得到 new 對象中的值
Iterator> key=map.keySet().iterator(); // 通過反射得到 new 對象中的屬性
BasicDBObject doc = new BasicDBObject();
while (key.hasNext()){
doc.put(key.next().toString() , val.next() ); // 對 MongoDB BasicDBObject 對象 進行賦值
}
coll.insert(doc);
}
}
2.測試程序 TestMongoDBORMCase
public class TestMongoDBORMCase {
public static void main(String[] args) throws Exception {
MyMongoDBORMImpl impl= new MyMongoDBORMImpl();
// 實例化Users 對象,并且插入
Users user= new Users();
user.setUsername("javabloger");
user.setId(12);
user.setPassword("www.javabloger.com ");
user.setDept("dept");
impl.addObject(user );
// 實例化TestPojo 對象,并且插入
TestPojo pojo1= new TestPojo();
pojo1.setIds(2);
pojo1.setUsernames("username–javabloger");
impl.addObject(pojo1 );
}
}
主要代碼介紹:
1.Users.java、TestPojo.java 是pojo對象,里面set/get一些參數(shù)值;
2.ORMappingTools.java 是pojo 對象和 MongoDB對象映射的工具類;
3.ColumnMapping.java 是 注釋程序,可以讓對象屬性和表屬性更加靈活;
4.MyMongoDBORMImpl.java 是一個封裝 MongoDB API 的程序;
5.TestMongoDBORMCase.java 測試程序。
詳細(xì)內(nèi)容如圖所示:
從這里下載代碼 MongoDBJavaORM.zip
還可以從這里下載代碼 MongoDBJavaORM.zip
因為只是草稿,代碼有些粗糙里面只寫了一個添加的方法,主要想把精力還是在構(gòu)思上,這也許只是個開始,有必要的話下面將寫一個小工具完善這個想法,給大家進行分享。
相關(guān)文章:
mongodb 入門 介紹
MongoDB 集群
Java操作 MongoDB NoSQL數(shù)據(jù)庫
–end–
原文地址:MongoDB Java ORM 的設(shè)想, 感謝原作者分享。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com