Java ?? ??????? MongoDb ??? ???? ??? ???? ??
??(??): Java ?? ????
Reflection? ??? ?? ?? ?????? ?? ???? Java? ?? ?????. . ?? ?? Spring, Tomcat, Jetty ? ?? ????? ?? ????? ????? ?????.
Java ??????? ????? ? ???? ?? ??? ??? ? ?? ?? ??? ? ?? ????? ??? ? ????.
??? ?? ???? ????? ?? ????? ??? ???? ???? ????.
?? ?? ???? ???? ????? ???? ??? MongoDb? ??? ??? ??? ?????. ? ??? ???? ?? ????? ??? ????? ???? ? ????.
???? ??
????? ?????? ?? ??? ????? ?? ?? ???? MongoDb? ???? ???. ??? ? ?? ?? ???? MongoDb ??? ???? ???. ?, Java ??? ??? ???? ???.
?? ?? ?? ??? MongoDb? ????? ?? ??? Document? ???? ???.
??? ?? ???? ? ??? ???? 2Doc() ???? ???? ???. ? ???? ??? ??? ??? ??? ??? ??? ????. ??? ??? ?? ??? ???? ??? ??? ??? ???? ? ????.
public?class?Order?{ ????private?Long?id; ????private?Long?userId; ????private?String?orderNo; ????private?BigDecimal?amount; ????private?String?createTime; ????private?String?updateTime; ????//?省略無數字段 ???? ????//?轉換方法:訂單轉doc ????public?Document?order2Doc(Order?order)?{ ????????Document?doc?=?new?Document(); ????????doc.put("id",?order.getId()); ????????doc.put("userId",?order.getUserId()); ????????doc.put("orderNo",?order.getOrderNo()); ????????doc.put("amount",?order.getAmount()); ????????doc.put("createTime",?order.getCreateTime()); ????????doc.put("updateTime",?order.getUpdateTime()); ????????//?省略無數put... ????????return?doc; ????} }
??? MongoDb?? ???? ???? Document? ?? Java ??? ???? ??? ?? ?? ?? ? ????.
public?class?Order?{ ????private?Long?id; ????private?Long?userId; ????private?String?orderNo; ????private?BigDecimal?amount; ????private?String?createTime; ????private?String?updateTime; ????//?省略無數字段 ???? ????//?轉換方法:doc轉訂單 ????public?Order?doc2Order(Document?doc)?{ ????????Order?order?=?new?Order(); ???????? ????????order.setId((Long)?doc.get("id")); ????????order.setUserId((Long)?doc.get("userId")); ????????order.setOrderNo((String)?doc.get("orderNo")); ????????order.setAmount((BigDecimal)?doc.get("amount")); ????????order.setCreateTime((String)?doc.get("createTime")); ????????order.setUpdateTime((String)?doc.get("updateTime")); ????????//?省略無數set... ????????return?order; ????} }
? ??? ?? ???? ?? ???, ??? ???? ?? ? ??? ?? ?? ?? ??, ?????? ?? ??? ?? ??? ????. ??? ???? ? ???? ?? ? ? ????. ?? ????.
??? ??? ??? ???? ? ? ?? ?? ??? ????? ??, ? ?????? Java? ? ?? ?? ??? ????? ???? ?????. ???? ? ? ???? ??? ?? ?? ? ?? ???? ??? ?????.
? ?? ??? ????? ???? ??? ???? ?? ??? ??????.? ?? ??? MongoDb ?? ???? ???? ?? ???? ????? ?????.
???? ???? ??? ?????~
????? ???? ?? ??? ??????. of ??? ???
? ?? ??? ????? ??? ???? ? ?? ?? ??? ?????? ???.
Java ??? ??? ???? ??? ???? ?? Order ???? ?? ?? ?????.
?? ????? ?? ?? ???? ?? ?? ??? ?? ?? ??? ???? ??? ??? ?????. ????? ???? ??? ??? ??? ???? ?? ??? ??? ????.
public?class?Order?{ ????//?...省略無數字段 ????public?Document?order2Doc(Order?order)?throws?Exception?{ ????????Document?doc?=?new?Document(); ????????//?獲取所有字段:通過?getClass()?方法獲取?Class?對象,然后獲取這個類所有字段 ????????Field[]?fields?=?order.getClass().getDeclaredFields(); ????????for?(Field?field?:?fields)?{ ????????????//?開放字段操作權限 ????????????field.setAccessible(true); ????????????//?設置值 ????????????doc.put(field.getName(),?field.get(order)); ????????} ????????return?doc; ????} }
?? ?? ? ??? ?? ???? ?? ? ? ????. ??? ??? ?? ??? ???, ??? ?? Put ??? ???? ???? ???? ? ? ?? ????? ??? ??? ? ????. Java ??? MongoDb ??? ???? ?? ? ???? ????.
? ????? ?? ? ?? ??? Document? Java ??? ??? ?????.
public?class?Order?{ ????//?...省略無數字段 ????public?Order?doc2Order(Document?doc)?throws?Exception?{ ????????Order?order?=?new?Order(); ????????for?(String?key?:?doc.keySet())?{ ????????????//?獲取字段 ????????????Field?field?=?order.getClass().getDeclaredField(key); ????????????//?開放字段操作權限 ????????????field.setAccessible(true); ????????????//?設置值 ????????????field.set(order,?doc.get(key)); ????????} ????????return?order; ????} }
?? ??? ???? ??? ???? ????? ???? ?? ??? ?? ?? ??? ??? ??? ???? ?? ?? ??? ??? ?????.
? ???? ? ??? ???? ?? ??? ????? ?? ????? ????? ????? ? ?? ??? ??? ???????. ?? ??? ? ???? ???? ???? ??? ??? ????.
??? ?? ??? ?? ???? ?? ??????? ??? ???? ??? ????.
?? ?? ??? ??? ???. ? ??? ????? ? ?? ?? ???? ??? ? ? ???? ?? ??? ????? ??? ??? ??? ????.
???? ??? ??? ???? ???? ?? ??? ????. ??? ???? ???? ????? ???? ??? ???? ??? ??? ???? ??? ?? ????. ???? ???? ??? ???? ?? ??? ??? ??? ???? ?? ??? ????.
?, ? ?? ??? ???? ???.
???? ????? ???? MongoDb ?? ??? ??
??? ??? ???? ??? ?? ???? ??? ??? ??? ??? ??? ? ???? ??? ?????.
???? ????? ???? ?? ??? ?? ??? ? ??? ? ? ????.
? ?? ??? ??? ????? ????
Java ??? ??? ???? ??? ?????. ?? ?? ???? ??? ?? ????? ?? ?? ???? ?? ?? ??? ?? ?? ??? ???? ??? ??? ?????. ????? ???? ??? ??? ????.
public?class?MongoDbUtils?{ ????//?定義泛型方法: ????//?1.?在返回值前,聲明泛型參數?<參數名>; ????//?2.?傳入參數時,指定一個泛型參數 ????public?static?<T>?Document?obj2Doc(T?obj)?throws?Exception?{ ????????Document?doc?=?new?Document(); ????????//?獲取所有字段:通過?getClass()?方法獲取?Class?對象,然后獲取這個類所有字段 ????????Field[]?fields?=?obj.getClass().getDeclaredFields(); ????????for?(Field?field?:?fields)?{ ????????????//?開放字段操作權限 ????????????field.setAccessible(true); ????????????//?設置值 ????????????doc.put(field.getName(),?field.get(obj)); ????????} ????????return?doc; ????} }
???? ??? ? ?? ??? ?? ???? ??? ???? ? ?? ??? ??? ??? ????2Doc()
方法了。在使用的時候,只要調用 MongoDbUtils.obj2Doc()
.
??? ????? ?? ? ?? ??? Document? Java ??? ???? ??? ???? ?????.
public?class?MongoDbUtils?{ ????//?定義泛型方法: ????//?1.?在返回值前,聲明泛型參數?<參數名>; ????//?2.?傳入參數必須是?Class,但這個?Class?是泛型參數,不限制類型 ????public?static?<T>?T?doc2Obj(Document?doc,?Class<T>?clazz)?throws?Exception?{ ????????//?實例化泛型對象 ????????T?obj?=?clazz.newInstance(); ????????for?(String?key?:?doc.keySet())?{ ????????????//?獲取字段 ????????????Field?field?=?clazz.getDeclaredField(key); ????????????//?開放字段操作權限 ????????????field.setAccessible(true); ????????????//?設置值 ????????????field.set(obj,?doc.get(key)); ????????} ????????return?obj; ????} }
首先,我們定義實例化一個泛型對象;然后,我們使用循環(huán)遍歷 Document;最后,在循環(huán)中,使用反射獲取相應的字段,把 Document 的值設置到泛型對象的字段里。
第二版的迭代就基本完成了。我們在第一版迭代的基礎上,加入了泛型,得到了一個工具類 MongoDbUtils
,這個工具類得到結果和以前完全一樣,你可以看下測試代碼。
public?static?void?main(String[]?args)?throws?Exception?{ ????Order?order?=?new?Order(); ????order.setId(0L); ????order.setUserId(0L); ????order.setOrderNo("1"); ????order.setAmount(new?BigDecimal("0")); ????order.setCreateTime("2"); ????order.setUpdateTime("3"); ????System.out.println("原始數據:"?+?order); ????Document?document?=?MongoDbUtils.obj2Doc(order); ????System.out.println("轉換doc數據:"?+?document); ????Order?order1?=?MongoDbUtils.doc2Obj(document,?Order.class); ????System.out.println("轉換java數據:"?+?order1); } 運行結果: 原始數據:Order(id=0,?userId=0,?orderNo=1,?amount=0,?createTime=2,?updateTime=3) 轉換doc數據:Document{{id=0,?userId=0,?orderNo=1,?amount=0,?createTime=2,?updateTime=3}} 轉換java數據:Order(id=0,?userId=0,?orderNo=1,?amount=0,?createTime=2,?updateTime=3)
這樣一來,我們就不用保留實體類上的轉換方法了,剩下的工作就是刪代碼。
MongoDb 和 Java 對象的互相轉換就完成了。我們做了兩次迭代,第一次迭代利用了反射,把大量手動 set/get 操作給去掉了;第二次迭代在原來的基礎上,加入了泛型的應用,又去掉了一堆重復代碼。
? ??? Java? ????? ???? ??? MongoDb ??? ?????.? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

JDBC ????? ???? ????? ?? ?? ?? ??? ?? ?? ??? ?? ? ?? ??? ?? ?? ?? ??? ???????. 1. ????? ????? Conn.SetAutoCommit (False)?? ??????. 2. ??? ? ????? ?? ?? SQL ??? ?????. 3. ?? ??? ??? ?? Conn.commit ()?? ???? ??? ???? ???? ?? ??? ???? Conn.Rollback ()?? ??????. ???, ? ??? ???? ????, ??? ???? ????, ?? ??? ??? ?? ??? ??? ???? ? ???????. ?? ?? ?? ???? ????? ??? ???? ?? ?? ???? ???? ??? ????? ?? ??? ??? ? ?? ???? ?? ????.

?? ?? ? ?? ???? ???? ?? Java.Time ???? ???? ??????. 2. LocalDate, LocalDateTime ? LocalTime? ?? ?? ??? ??? ?????. 3. () ???? ???? ?? ??? ??? ????. 4. ???/???? ??? ???? ??? ????? ??? ??????. 5. ZonedDateTime ? Zoneid? ???? ???? ??????. 6. DateTimeFormatter? ?? ?? ? ?? ?? ?? ???; 7. ??? ?? ?? ?? ??? ????? ?? ??????. ?? Java? ?? ??? ???? ??? ??? ???? Java.Timeapi ??? ?? ??? ???????.

WiredTigerIsMongoDB? SDEFAULTSTORAGEENSINESCERSION3.2, ?? ??, ?? ? ? ?? ?? ???? ????? .1.ITUSESSDOCUMENT-LEVELLOCKINGANDMVCCORHIGHCONCURRENC, READSANDSANDSTOPROUCEDECHEATHOTHER.2.DATAISTRESINGB-TREES? ?????.

Pre-FormancetArtUptimeMoryUsage, Quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusoftenperforminglightbetterine serverless sinarios.2.thyvelopecosyste,

aSeembeddingWherelationshipisone-to-few, dataisAccessedTogether ? FastReadsareneed; 2. useReferencingwhendealingwithone-to-manyormany-to-manyrelationships, browor indectionallyQueriedData;

Java 's Garbage Collection (GC)? ???? ???? ???? ??????, ?? ? ??? ??? ? ??? ??? ??? ??? ????. 1.GC? ?? ?? (? : ?? ??, ?? ???, ?? ?? ?)?? ??? ???? ????, ?? ? ??? ??? ???? ?????. 2. ?? ???? ????? ????, ?? ?? ??? ??? ???? ?? ??? ??????. 3. ?? ?? ?? ?? : ??? ?? (Eden, S0, S1)? ?? ????? ?????. ??? ??? ?? ? MajorGC? ???? ? ??? ? ????. Metaspace? ??? ?? ???? ?????. 4. JVM? ??? GC ??? ?????. SerialGC? ??? ?? ????? ?????. ParallelGC? ???? ??????. CMS? ?? ???

??? htmlinput ??? ???? ??? ???? ????? ??? ??? ?? ??? ???? ???? ? ????. 1. ???, ???, ??, ?? ? ??? ?? ??? ??? ?? ?? ?? ??? ???? ???? ??? ? ???? ??? ? ????. 2. HTML5? ?????? ??? ? ?? ?? ??? ?? ? ??? URL, ??, ?? ? ??? ?? ??? ??? ??????. 3. ?? ?? ? ? ??? ??? ???? ?? ??? ???? ???? ?? ???? ?? ???? ???? ?? ? ? ??? ?? ???????.

GO? HTTP ?? ????? ?? ??, ??, ????? IP ? ?? ??? ?? ? ? ????. 1. http.handlerfunc? ???? ????? ????, 2. ??? ???? ?? ?? ??? ?? ??? ??????. ?? ?? ??? ???? ??? ?????? ??? ????? ???? ? ?????. ?? ???? ?? ?? ??, JSON ?? ?? ? ?? ID ??? ?????.
