orm源碼
『壹』 hibernate實例中錯誤Could not initialize class com.ORM.MySessionFactory怎麼解決
路徑寫錯了 你的MySessionFactory 在com.mm.ORM包下面
而你載入的是com.ORM.MySessionFactory 所以輪簡配在你載入的地臘指方或者配置咐簡文件那修改一下就可以了~~
『貳』 java開源框架是什麼
其實框架很簡單的,你可以認為它是一個工具,甚至一個插件。
框架的作用,就是將一個公用的,常用的技術,封裝起來,
幫你處理一些基礎的東西,可以讓你不用再去寫那些繁瑣的東西。
就拿你要學的struts來說:他本質上也是用java寫的,和我們自己寫的類沒有區別,他實現的東西我們自己也可以實現。
比如接收客戶端的數據,我們是用request.getParameter()來的,但是如果有很多個參數,我們要寫很多個,很麻煩。struts它就幫我們實現,不用我們寫,直接寫個屬性,就可以得到。其實本質還是用request.getParameter()。。
所以你不要再在意框架是什麼東西,等你接觸了就知道了。你把它當做一個工具來用,這就是框架。
前台框架:jQuery
Mvc框架:Struts、spring Mvc
核心框架:Spring
orm框架:Hibernate、Spring JDBC、myBatis。
Gorm是Go語言開發用的比較多的一個ORM。它的功能比較全:
但是這篇文章中並不會直接看Gorm的源碼,我們會先從database/sql分析。原因是Gorm也是基於這個包來封裝的一些功能。所以只有先了解了database/sql包才能更加好的理解Gorm源碼。
database/sql 其實也是一個對於mysql驅動的上層封裝。」github.com/go-sql-driver/mysql」就是一個對於mysql的驅動,database/sql 就是在這個基礎上做的基本封裝包含連接池的使用
下面這個是最基本的增刪改查操作
操作分下面幾個步驟:
因為Gorm的連接池就是使用database/sql包中的連接池,所以這里我們需要學習一下包里的連接池的源碼實現。其實所有連接池最重要的就是連接池對象、獲取函數、釋放函數下面來看一下database/sql中的連接池。
DB對象
獲取方法
釋放連接方法
連接池的實現有很多方法,在database/sql包中使用的是chan阻塞 使用map記錄等待列表,等到有連接釋放的時候再把連接傳入等待列表中的chan 不在阻塞返回連接。
之前我們看到的Redigo是使用一個chan 來阻塞,然後釋放的時候放入空閑列表,在往這一個chan中傳入struct{}{},讓程序繼續 獲取的時候再從空閑列表中獲取。並且使用的是鏈表的結構來存儲空閑列表。
database/sql 是對於mysql驅動的封裝,然而Gorm則是對於database/sql的再次封裝。讓我們可以更加簡單的實現對於mysql資料庫的操作。
『肆』 org.springframework.orm-3.0.5.release.jar沒有任何源代碼連接,java
不缺少jar包的,我用搏雀畢過Spring3.0.5和Hibernate3整合,沒有問基芹題的,只是Spring3.0.5有多個必需歲掘的包,你注意下報錯信息,看是否都已經導入,關聯資料庫操作時,Spring中的jdbc,事務等相關包是否導入...
『伍』 GitHub上面有哪些經典的java框架源碼
Bazel:來自Google的構建工具,可以快速、可靠地構建代碼。官網
Gradle:使用Groovy(非XML)進行增量構建,可以很好地與Maven依賴管理配合工作。官網
Buck:Facebook構建工具。官網
ASM:通用底層位元組碼操作和分析開發庫。官網
Byte Buddy:使用流式API進一步簡化位元組碼生成。官網
Byteman:在運行時通過DSL(規則)操作位元組碼進行測試和故障排除。官網
Javassist:一個簡化位元組碼編輯嘗試。官網
Apache Aurora:Apache Aurora是一個Mesos框架,用於長時間運行服務和定時任務(cron job)。官網
Singularity:Singularity是一個Mesos框架,方便部署和操作。它支持Web Service、後台運行、調度作業和一次性任務。官網
Checkstyle:代碼編寫規范和標准靜態分析工具。官網
Error Prone:將常見編程錯誤作為運行時錯誤報告。官網
FindBugs:通過位元組碼靜態分析查找隱藏bug。官網
jQAssistant:使用基於Neo4J查詢語言進行代碼靜態分析。官網
PMD:對源代碼分析查找不良的編程習慣。官網
SonarQube:通過插件集成其它分析組件,對過去一段時間內的數據進行統計。官網
ANTLR:復雜的全功能自頂向下解析框架。官網
JavaCC:JavaCC是更加專門的輕量級工具,易於上手且支持語法超前預測。官網
config:針對JVM語言的配置庫。官網
owner:減少冗餘配置屬性。官網
Choco:可直接使用的約束滿足問題求解程序,使用了約束規劃技術。官網
JaCoP:為FlatZinc語言提供了一個介面,可以執行MiniZinc模型。官網
OptaPlanner:企業規劃與資源調度優化求解程序。官網
Sat4J:邏輯代數與優化問題最先進的求解程序。官網
Bamboo:Atlassian解決方案,可以很好地集成Atlassian的其他產品。可以選擇開源許可,也可以購買商業版。官網
CircleCI:提供託管服務,可以免費試用。官網
Codeship:提供託管服務,提供有限的免費模式。官網
fabric8:容器集成平台。官網
Go:ThoughtWork開源解決方案。官網
Jenkins:支持基於伺服器的部署服務。官網
TeamCity:JetBrain的持續集成解決方案,有免費版。官網
Travis:通常用作開源項目的託管服務。官網
Buildkite: 持續集成工具,用簡單的腳本就能設置pipeline,而且能快速構建,可以免費試用。官網
uniVocity-parsers:速度最快功能最全的CSV開發庫之一,同時支持TSV與固定寬度記錄的讀寫。官網
Apache Phoenix:HBase針對低延時應用程序的高性能關系資料庫層。官網
Crate:實現了數據同步、分片、縮放、復制的分布式數據存儲。除此之外還可以使用基於SQL的語法跨集群查詢。官網
Flyway:簡單的資料庫遷移工具。官網
H2:小型SQL資料庫,以可以作為內存資料庫使用著稱。官網
HikariCP:高性能JDBC連接工具。官網
JDBI:便捷的JDBC抽象。官網
Protobuf:Google數據交換格式。官網
SBE:簡單二進制編碼,是最快速的消息格式之一。官網
Wire:整潔輕量級協議緩存。官網
Apache DeltaSpike:CDI擴展框架。官網
Dagger2:編譯時注入框架,不需要使用反射。官網
Guice:可以匹敵Dagger的輕量級注入框架。官網
HK2:輕量級動態依賴注入框架。官網
ADT4J:針對代數數據類型的JSR-269代碼生成器。官網
AspectJ:面向切面編程(AOP)的無縫擴展。官網
Auto:源代碼生成器集合。官網
DCEVM:通過修改JVM在運行時支持對已載入的類進行無限次重定義。官網
HotswapAgent:支持無限次重定義運行時類與資源。官網
Immutables:類似Scala的條件類。官網
JHipster:基於Spring Boot與AngularJS應用程序的Yeoman源代碼生成器。官網
JRebel:無需重新部署,可以即時重新載入代碼與配置的商業軟體。官網
Lombok:減少冗餘的代碼生成器。官網
Spring Loaded:類重載代理。官網
vert.x:多語言事件驅動應用框架。官網
Akka:用來編寫分布式容錯並發事件驅動應用程序的工具和運行時。官網
Apache Storm:實時計算系統。官網
Apache ZooKeeper:針對大型分布式系統的協調服務,支持分布式配置、同步和名稱注冊。官網
Hazelcast:高可擴展內存數據網格。官網
Hystrix:提供延遲和容錯。官網
JGroups:提供可靠的消息傳遞和集群創建的工具。官網
Orbit:支持虛擬角色(Actor),在傳統角色的基礎上增加了另外一層抽象。官網
Quasar:為JVM提供輕量級線程和角色。官網
Apache Cassandra:列式資料庫,可用性高且沒有單點故障。官網
Apache HBase:針對大數據的Hadoop資料庫。官網
Druid:實時和歷史OLAP數據存儲,在聚集查詢和近似查詢方面表現不俗。官網
Infinispan:針對緩存的高並發鍵值對數據存儲。官網
Bintray:發布二進制文件版本控制工具。可以於Maven或Gradle一起配合使用。提供開源免費版本和幾種商業收費版本。官網
Central Repository:最大的二進制組件倉庫,面向開源社區提供免費服務。Apache Maven默認使用Central官網Repository,也可以在所有其他構建工具中使用。
IzPack:為跨平台部署建立創作工具(Authoring Tool)。官網
JitPack:打包GitHub倉庫的便捷工具。可根據需要構建Maven、Gradle項目,發布可立即使用的組件。官網
Launch4j:將JAR包裝為輕量級本機Windows可執行程序。官網
Nexus:支持代理和緩存功能的二進制管理工具。官網
packr:將JAR、資源和JVM打包成Windows、Linux和Mac OS X本地發布文件。官網
Apache POI:支持OOXML規范(XLSX、DOCX、PPTX)以及OLE2規范(XLS、DOC、PPT)。官網
documents4j:使用第三方轉換器進行文檔格式轉換,轉成類似MS Word這樣的格式。官網
jOpenDocument:處理OpenDocument格式(由Sun公司提出基於XML的文檔格式)。官網
Cyclops:支持一元(Monad)操作和流操作工具類、comprehension(List語法)、模式匹配、trampoline等特性。官網
Fugue:Guava的函數式編程擴展。官網
Functional Java:實現了多種基礎和高級編程抽象,用來輔助面向組合開發(composition-oriented development)。官網
Javaslang:一個函數式組件庫,提供持久化數據類型和函數式控制結構。官網
jOOλ:旨在填補Java 8 lambda差距的擴展,提供了眾多缺失的類型和一組豐富的順序流API。官網
jMonkeyEngine:現代3D游戲開發引擎。官網
libGDX:全面的跨平台高級框架。官網
LWJGL:對OpenGL/CL/AL等技術進行抽象的健壯框架。官網
JavaFX:Swing的後繼者。官網
Scene Builder:開發JavaFX應用的可視化布局工具。官網
Agrona:高性能應用中常見的數據結構和工具方法。官網
Disruptor:線程間消息傳遞開發庫。官網
fastutil:快速緊湊的特定類型集合(Collection)。官網
GS Collections:受Smalltalk啟發的集合框架。官網
HPPC:基礎類型集合。官網
Javolution:實時和嵌入式系統的開發庫。官網
JCTools:JDK中缺失的並發工具。官網
Koloboke:Hash set和hash map。官網
Trove:基礎類型集合。官網
High-scale-bli:Cliff Click 個人開發的高性能並發庫官網
Eclipse:老牌開源項目,支持多種插件和編程語言。官網
IntelliJ IDEA:支持眾多JVM語言,是安卓開發者好的選擇。商業版主要針對企業客戶。官網
NetBeans:為多種技術提供集成化支持,包括Java SE、Java EE、資料庫訪問、HTML5
Imgscalr:純Java 2D實現,簡單、高效、支持硬體加速的圖像縮放開發庫。官網
Picasso:安卓圖片下載和圖片緩存開發庫。官網
Thumbnailator:Thumbnailator是一個高質量Java縮略圖開發庫。官網
ZXing:支持多種格式的一維、二維條形碼圖片處理開發庫。官網
im4java: 基於ImageMagick或GraphicsMagick命令行的圖片處理開發庫,基本上ImageMagick能夠支持的圖片格式和處理方式都能夠處理。官網
Apache Batik:在Java應用中程序以SVG格式顯示、生成及處理圖像的工具集,包括SVG解析器、SVG生成器、SVG DOM等模塊,可以集成使用也可以單獨使用,還可以擴展自定義的SVG標簽。官網
Genson:強大且易於使用的Java到JSON轉換開發庫。官網
Gson:谷歌官方推出的JSON處理庫,支持在對象與JSON之間雙向序列化,性能良好且可以實時調用。官網
Jackson:與GSON類似,在頻繁使用時性能更佳。官網
LoganSquare:基於Jackson流式API,提供對JSON解析和序列化。比GSON與Jackson組合方式效果更好。官網
Fastjson:一個Java語言編寫的高性能功能完善的JSON庫。官網
Kyro:快速、高效、自動化的Java對象序列化和克隆庫。官網
JDK 9:JDK 9的早期訪問版本。官網
OpenJDK:JDK開源實現。官網
Scala:融合了面向對象和函數式編程思想的靜態類型編程語言。官網
Groovy:類型可選(Optionally typed)的動態語言,支持靜態類型和靜態編譯。目前是一個Apache孵化器項目。官網
Clojure:可看做現代版Lisp的動態類型語言。官網
Ceylon:RedHat開發的面向對象靜態類型編程語言。官網
Kotlin:JetBrain針對JVM、安卓和瀏覽器提供的靜態類型編程語言。官網
Xtend:一種靜態編程語言,能夠將其代碼轉換為簡潔高效的Java代碼,並基於JVM運行。官網
Apache Log4j 2:使用強大的插件和配置架構進行完全重寫。官網
kibana:分析及可視化日誌文件。官網
Logback:強健的日期開發庫,通過Groovy提供很多有趣的選項。官網
logstash:日誌文件管理工具。官網
Metrics:通過JMX或HTTP發布參數,並且支持存儲到資料庫。官網
SLF4J:日誌抽象層,需要與具體的實現配合使用。官網
Apache Flink:快速、可靠的大規模數據處理引擎。官網
Apache Hadoop:在商用硬體集群上用來進行大規模數據存儲的開源軟體框架。官網
Apache Mahout:專注協同過濾、聚類和分類的可擴展演算法。官網
Apache Spark:開源數據分析集群計算框架。官網
DeepDive:從非結構化數據建立結構化信息並集成到已有資料庫的工具。官網
Deeplearning4j:分布式多線程深度學習開發庫。官網
H2O:用作大數據統計的分析引擎。官網
Weka:用作數據挖掘的演算法集合,包括從預處理到可視化的各個層次。官網
QuickML:高效機器學習庫。官網、GitHub
Aeron:高效可擴展的單播、多播消息傳遞工具。官網
Apache ActiveMQ:實現JMS的開源消息代理(broker),可將同步通訊轉為非同步通訊。官網
Apache Camel:通過企業級整合模式(Enterprise Integration Pattern EIP)將不同的消息傳輸API整合在一起。官網
Apache Kafka:高吞吐量分布式消息系統。官網
Hermes:快速、可靠的消息代理(Broker),基於Kafka構建。官網
JBoss HornetQ:清晰、准確、模塊化,可以方便嵌入的消息工具。官網
JeroMQ:ZeroMQ的純Java實現。官網
Smack:跨平台XMPP客戶端函數庫。官網
Openfire:是開源的、基於XMPP、採用Java編程語言開發的實時協作伺服器。 Openfire安裝和使用都非常簡單,並可利用Web界面進行管理。官網GitHub
Spark:是一個開源,跨平台IM客戶端。它的特性支持集組聊天,電話集成和強大安全性能。如果企業內部部署IM使用Openfire+Spark是最佳的組合。官網GitHub
Tigase: 是一個輕量級的可伸縮的 Jabber/XMPP 伺服器。無需其他第三方庫支持,可以處理非常高的復雜和大量的用戶數,可以根據需要進行水平擴展。官網
Design Patterns:實現並解釋了最常見的設計模式。官網
Jimfs:內存文件系統。官網
Lanterna:類似curses的簡單console文本GUI函數庫。官網
LightAdmin:可插入式CRUD UI函數庫,可用來快速應用開發。官網
OpenRefine:用來處理混亂數據的工具,包括清理、轉換、使用Web Service進行擴展並將其關聯到資料庫。官網
RoboVM:Java編寫原生iOS應用。官網
Quartz:強大的任務調度庫.官網
AppDynamics:性能監測商業工具。官網
JavaMelody:性能監測和分析工具。官網
Kamon:Kamon用來監測在JVM上運行的應用程序。官網
New Relic:性能監測商業工具。官網
SPM:支持對JVM應用程序進行分布式事務追蹤的性能監測商業工具。官網
Takipi:產品運行時錯誤監測及調試商業工具。官網
JNA:不使用JNI就可以使用原生開發庫。此外,還為常見系統函數提供了介面。官網
Apache OpenNLP:處理類似分詞等常見任務的工具。官網
CoreNLP:斯坦佛CoreNLP提供了一組基礎工具,可以處理類似標簽、實體名識別和情感分析這樣的任務。官網
LingPipe:一組可以處理各種任務的工具集,支持POS標簽、情感分析等。官網
Mallet:統計學自然語言處理、文檔分類、聚類、主題建模等。官網
Async Http Client:非同步HTTP和WebSocket客戶端函數庫。官網
Grizzly:NIO框架,在Glassfish中作為網路層使用。官網
Netty:構建高性能網路應用程序開發框架。官網
OkHttp:一個Android和Java應用的HTTP+SPDY客戶端。官網
Undertow:基於NIO實現了阻塞和非阻塞API的Web伺服器,在WildFly中作為網路層使用。官網
Ebean:支持快速數據訪問和編碼的ORM框架。官網
EclipseLink:支持許多持久化標准,JPA、JAXB、JCA和SDO。官網
Hibernate:廣泛使用、強健的持久化框架。Hibernate的技術社區非常活躍。官網
MyBatis:帶有存儲過程或者SQL語句的耦合對象(Couples object)。官網
OrmLite:輕量級開發包,免除了其它ORM產品中的復雜性和開銷。官網
Nutz:另一個SSH。官網,Github
JFinal:JAVA WEB + ORM框架。官網,Github
Apache FOP:從XSL-FO創建PDF。官網
Apache PDFBox:用來創建和操作PDF的工具集。官網
DynamicReports:JasperReports的精簡版。官網
flyingsaucer:XML/XHTML和CSS 2.1渲染器。官網
iText:一個易於使用的PDF函數庫,用來編程創建PDF文件。注意,用於商業用途時需要許可證。官網
JasperReports:一個復雜的報表引擎。官網
jHiccup:提供平台中JVM暫停的日誌和記錄。官網
JMH:JVM基準測試工具。官網
JProfiler:商業分析器。官網
LatencyUtils:測量和報告延遲的工具。官網
VisualVM:對運行中的應用程序信息提供了可視化界面。官網
YourKit Java Profiler:商業分析器。官網
Reactive Streams:非同步流處理標准,支持非阻塞式反向壓力(backpressure)。官網
Reactor:構建響應式快速數據(fast-data)應用程序的開發庫。官網
RxJava:通過JVM可觀察序列(observable sequence)構建非同步和基於事件的程序。官網
Dropwizard:偏向於自己使用的Web框架。用來構建Web應用程序,使用了Jetty、Jackson、Jersey和Metrics。官網
Feign:受Retrofit、JAXRS-2.0和WebSocket啟發的HTTP客戶端連接器(binder)。官網
Jersey:JAX-RS參考實現。官網
RESTEasy:經過JAX-RS規范完全認證的可移植實現。官網
RestExpress:一個Java類型安全的REST客戶端。官網
RestX:基於註解處理和編譯時源碼生成的框架。官網
Retrofit:類型安全的REST客戶端。官網
Spark:受到Sinatra啟發的Java REST框架。官網
Swagger:Swagger是一個規范且完整的框架,提供描述、生產、消費和可視化RESTful Web Service。官網
Blade:國人開發的一個輕量級的MVC框架. 它擁有簡潔的代碼,優雅的設計。官網
DataMelt:用於科學計算、數據分析及數據可視化的開發環境。官網
JGraphT:支持數學圖論對象和演算法的圖形庫。官網
JScience:用來進行科學測量和單位的一組類。官網
Apache Solr:一個完全的企業搜索引擎。為高吞吐量通信進行了優化。官網
Elasticsearch:一個分布式、支持多租戶(multitenant)全文本搜索引擎。提供了RESTful Web介面和無schema的JSON文檔。官網
Apache Lucene:是一個開放源代碼的全文檢索引擎工具包,是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎。官網
Apache Shiro:執行認證、授權、加密和會話管理。官網
Bouncy Castle,涵蓋了從基礎的幫助函數到PGP/SMIME操作。官網:多途加密開發庫。支持JCA提供者(JCA provider)
Cryptomator:在雲上進行客戶端跨平台透明加密。官網
Keycloak:為瀏覽器應用和RESTful Web Service集成SSO和IDM。目前還處於beta版本,但是看起來非常有前途。官網
PicketLink:PicketLink是一個針對Java應用進行安全和身份認證管理的大型項目(Umbrella Project)。官網
FlatBuffers:高效利用內存的序列化函數庫,無需解包和解析即可高效訪問序列化數據。官網
Kryo:快速、高效的對象圖形序列化框架。官網
FST:提供兼容JDK的高性能對象圖形序列化。官網
MessagePack:一種高效的二進制序列化格式。官網
Apache Tomcat:針對Servlet和JSP的應用伺服器,健壯性好且適用性強。官網
Apache TomEE:Tomcat加Java EE。官網
Jetty:輕量級、小巧的應用伺服器,通常會嵌入到項目中。官網
WebSphere Liberty:輕量級、模塊化應用伺服器,由IBM開發。官網
WildFly:之前被稱作JBoss,由Red Hat開發。支持很多Java EE功能。官網
Apache Velocity:提供HTML頁面模板、email模板和通用開源代碼生成器模板。官網
FreeMarker:通用模板引擎,不需要任何重量級或自己使用的依賴關系。官網
Handlebars.java:使用Java編寫的模板引擎,邏輯簡單,支持語義擴展(semantic Mustache)。官網
Thymeleaf:旨在替換JSP,支持XML文件的工具。官網
Apache JMeter:功能性測試和性能評測。官網
Arquillian:集成測試和功能行測試平台,集成Java EE容器。官網
AssertJ:支持流式斷言提高測試的可讀性。官網
Awaitility:用來同步非同步操作的DSL。官網
Cucumber:BDD測試框架。官網
Gatling:設計為易於使用、可維護的和高性能負載測試工具。官網
Hamcrest:可用來靈活創建意圖(intent)表達式的匹配器。官網
JMockit:用來模擬靜態、final方法等。官網
JUnit:通用測試框架。官網
Mockito:在自動化單元測試中創建測試對象,為TDD或BDD提供支持。官網
PowerMock: 支持模擬靜態方法、構造函數、final類和方法、私有方法以及移除靜態初始化器的模擬工具。官網
REST Assured:為REST/HTTP服務提供方便測試的Java DSL。官網
Selenide:為Selenium提供精準的周邊API,用來編寫穩定且可讀的UI測試。官網
Selenium:為Web應用程序提供可移植軟體測試框架。官網
Spock:JUnit-compatible framework featuring an expressive Groovy-derived specification language.官網兼容JUnit框架,支持衍生的Groovy范的語言。
TestNG:測試框架。官網
Truth:Google的斷言和命題(proposition)框架。官網
Unitils:模塊化測試函數庫,支持單元測試和集成測試。官網
WireMock:Web Service測試樁(Stub)和模擬函數。官網
Apache Commons:提供各種用途的函數,比如配置、驗證、集合、文件上傳或XML處理等。官網
args4j:命令行參數解析器。官網
CRaSH:為運行進行提供CLI。官網
Gephi:可視化跨平台網路圖形化操作程序。官網
Guava:集合、緩存、支持基本類型、並發函數庫、通用註解、字元串處理、I/O等。官網
JADE:構建、調試多租戶系統的框架和環境。官網
javatuples:正如名字表示的那樣,提供tuple支持。盡管目前tuple的概念還有留有爭議。官網
JCommander:命令行參數解析器。官網
Protégé:提供存在論(ontology)編輯器以及構建知識系統的框架。官網
Apache Nutch:可用於生產環境的高度可擴展、可伸縮的網路爬蟲。官網
Crawler4j:簡單的輕量級網路爬蟲。官網
JSoup:刮取、解析、操作和清理HTML。官網
Apache Tapestry:基於組件的框架,使用Java創建動態、強健的、高度可擴展的Web應用程序。官網
Apache Wicket:基於組件的Web應用框架,與Tapestry類似帶有狀態顯示GUI。官網
Google Web Toolkit:一組Web開發工具集,包含在客戶端將Java代碼轉為JavaScript的編譯器、XML解析器、RCP官網API、JUnit集成、國際化支持和GUI控制項。
Grails:Groovy框架,旨在提供一個高效開發環境,使用約定而非配置、沒有XML並支持混入(mixin)。官網
Ninja:Java全棧Web開發框架。非常穩固、快速和高效。官網
Pippo:小型、高度模塊化的類Sinatra框架。官網
Play:使用約定而非配置,支持代碼熱載入並在瀏覽器中顯示錯誤。官網
PrimeFaces:JSF框架,提供免費和帶支持的商業版本。包括若干前端組件。官網
Ratpack:一組Java開發函數庫,用於構建快速、高效、可擴展且測試完備的HTTP應用程序。官網
Spring Boot:微框架,簡化了Spring新程序的開發過程。官網
Spring:旨在簡化Java EE的開發過程,提供依賴注入相關組件並支持面向切面編程。官網
Vaadin:基於GWT構建的事件驅動框架。使用服務端架構,客戶端使用Ajax。官網
Blade:國人開發的一個輕量級的MVC框架. 它擁有簡潔的代碼,優雅的設計。官網
jBPM:非常靈活的業務流程管理框架,致力於構建開發與業務分析人員之間的橋梁。官網
Activity:輕量級工作流和業務流程管理框架。官網github
位元組碼操作
編程方式操作位元組碼的開發庫。
集群管理
在集群內動態管理應用程序的框架。
代碼分析
測量代碼指標和質量工具。
編譯器生成工具
用來創建解析器、解釋器或編譯器的框架。
外部配置工具
支持外部配置的開發庫。
約束滿足問題求解程序
幫助解決約束滿足問題的開發庫。
持續集成
CSV解析
簡化CSV數據讀寫的框架與開發庫
資料庫
簡化資料庫交互的相關工具。
幫實現依賴翻轉範式的開發庫。官網
開發流程增強工具
從最基本的層面增強開發流程。
分布式應用
用來編寫分布式容錯應用的開發庫和框架。
分布式資料庫
對應用程序而言,在分布式系統中的資料庫看起來就像是只有一個數據源。
發布
以本機格式發布應用程序的工具。
文檔處理工具
處理Office文檔的開發庫。
函數式編程
函數式編程支持庫。
游戲開發
游戲開發框架。
GUI
現代圖形化用戶界面開發庫。
高性能計算
涵蓋了從集合到特定開發庫的高性能計算相關工具。
IDE
簡化開發的集成開發環境。
JSON
簡化JSON處理的開發庫。
JVM與JDK
目前的JVM和JDK實現。
基於JVM的語言
除Java外,可以用來編寫JVM應用程序的編程語言。
日誌
記錄應用程序行為日誌的開發庫。
機器學習
提供具體統計演算法的工具。其演算法可從數據中學習。
消息傳遞
在客戶端之間進行消息傳遞,確保協議獨立性的工具。
雜項
未分類其它資源。
應用監控工具
監控生產環境中應用程序的工具。
原生開發庫
用來進行特定平台開發的原生開發庫。
自然語言處理
用來專門處理文本的函數庫。
網路
網路編程函數庫。
ORM
處理對象持久化的API。
用來幫助創建PDF文件的資源。
性能分析
性能分析、性能剖析及基準測試工具。
響應式開發庫
用來開發響應式應用程序的開發庫。
REST框架
用來創建RESTful 服務的框架。
科學計算與分析
用於科學計算和分析的函數庫。
搜索引擎
文檔索引引擎,用於搜索和分析。
安全
用於處理安全、認證、授權或會話管理的函數庫。
序列化
用來高效處理序列化的函數庫。
應用伺服器
用來部署應用程序的伺服器。
模板引擎
在模板中替換表達式的工具。
測試
測試內容從對象到介面,涵蓋性能測試和基準測試工具。
通用工具庫
通用工具類函數庫。
網路爬蟲
用於分析網站內容的函數庫。
Web框架
用於處理Web應用程序不同層次間通訊的框架。
業務流程管理套件
流程驅動的軟體系統構建。
資源
社區
『陸』 如何快速讀懂項目源碼javaWeb
一:學會如何讀一個JavaWeb項目源代碼 步驟:表結構->web.xml->mvc->db->spring
ioc->log-> 代碼
1、先了解項目資料庫的表結構,這個方面是最容易忘記 的,有時候我們只顧著看每一個方法是怎麼進行的,卻沒
有去了解資料庫之間的主外鍵關聯。其實如果先了解數據 庫表結構,再去看一個方法的實現會更加容易。
2、然後需要過一遍web.xml,知道項目中用到了什麼攔
截器,監聽器,過濾器,擁有哪些配置文件。如果是攔截 器,一般負責過濾請求,進行AOP 等;如果是監 可能是定時任務,初始化任務;配置文件有如使用了 spring
後的讀取mvc 相關,db 相關,service 相關,aop 相關的文件。
3、查看攔截器,監聽器代碼,知道攔截了什麼請求,這
個類完成了怎樣的工作。有的人就是因為缺少了這一步, 自己寫了一個action,配置文件也沒有寫錯,但是卻怎麼
調試也無法進入這個action,直到別人告訴他,請求被攔
4、接下來,看配置文件,首先一定是mvc相關的,如 springmvc
中,要請求哪些請求是靜態資源,使用了哪些 view 策略,controller 註解放在哪個包下等。 然後是db 相關配置文件,看使用了什麼資料庫,使用了
什麼orm框架,是否開啟了二級緩存,使用哪種產品作 為二級緩存,事務管理的處理,需要掃描的實體類放在什 么位置。最後是spring 核心的ioc
功能相關的配置文件, 知道介面與具體類的注入大致是怎樣的。當然還有一些如 apectj 置文件,也是在這個步驟中完成
5、log
相關文件,日誌的各個級別是如何處理的,在哪些 地方使用了log 記錄日誌
6、從上面幾點後知道了整個開源項目的整體框架,閱讀 每個方法就不再那麼難了。
7、當然如果有項目配套的開發文檔也是要閱讀的。
『柒』 APIJSON,鵝廠開源的零代碼、全功能、強安全ORM庫
APIJSON是鵝廠開源出來的零代碼、全功能、強安全的ORM庫,是一種專為 API 而生的 JSON 網路傳輸協議以及基於這套協議實現的庫。為各種增刪改查提供了 完全自動化的萬能通用介面 , 零代碼 實時滿足千變萬化的各種新增和變更需求。
能大幅降低開發和溝通成本,簡化開發流程,縮短開發周期。適合中小型前後端分離的項目,尤其是 初創項目、內部項目、低代碼/零桐清閉代碼、小程序、BaaS、Serverless 等。
其社區非常活躍,生態完善,早已形成了 .net,python,php,go 等多語言的版本,你能遇到的問題都能在這里解決。
資料庫:MySql5.7;
資料庫管理工具:Navicat;
開發IDE:IntelliJ IDEA
1.下載後端源碼
2.初始化資料庫
運行Navicate,新建sys模式(如果存在則不用新建),運行sql文件( sql文件位置:根目錄MySQLsys.sql )初始化數據表,執行成功後刷新會看到初始化後的數據表。
3.使用IntelliJ IDEA打開項目
打開 IntelliJ IDEA工具, File->Open ,選擇」 解壓根目錄/D:MSourceAPIJSON-Demo-masterAPIJSON-Java-Server 「文件夾下面的 APIJSONBoot項目,導入源碼。
IDE工具會自動從載入局裂所需的庫文件。
打開 DemoSQLConfig類,編輯 getDBUri,getDBAccount,getDBPassword,getSchema 的返正晌回值為你自己資料庫的配置。
DemoSQLConfig.java
APIJSONDemo/APIJSONBoot: 右鍵 DemoApplication > Run DemoApplication.main
APIJSONFinal: 右鍵 DemoAppConfig > Run DemoAppConfig.main
在瀏覽器輸入 http://localhost:8080/get/{},如果出現以下代碼段說明運行成功。
語法學習請參考官方文檔:https://github.com/Tencent/APIJSON/blob/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md
使用 Apache License 2.0,對 公司、團隊、個人 等 商用、非商用 都自由免費且非常友好,請放心使用和登記。
『捌』 你的第一份Python庫源碼閱讀:records庫
records庫的使用非常簡單且人性化,定義資料庫連接串和sql語句,然後將返回值作為rows列印出來,或森螞者輸出為文件,沒有復雜的orm邏輯,實現邏輯很清晰
records有一些pip依賴,每扮告個依賴項的作用如下:
Database類:
封裝基本資料庫操作,主要使用query方法,調用SQLAlchemy的方法,獲取結果後調用廳春明Record類獲得Record生成器,再調用RecordCollection獲得所有的結果
Record類:
接收database查詢後的keys和rows,初始化時,檢測是否長度一致,然後對其包裝,使其支持迭代,支持直接to_dict轉為dict對象,支持直接export導出。
RecordCollection類:
部分方法和Record類相同,但RecordCollection實現了first方法,獲取第一個row,如果不存在,則默認default為none,如果defalut本身就是實例或者exception的子類,直接拋出異常,另外,實現了一次實例化後多次查詢時的緩存。
全局變數和方法:
基礎概念:
『玖』 有什麼好的支持多種資料庫的ORM框架
1、傳統的建表方式
其實為了方便我們對資料庫表進行管理,Android本身就提供了一個幫助類:SQLiteOpenHelper。這個類集創建和升級資料庫於一身,並且自動管理了資料庫版本,算是一個非常好用的工具。
那我們現在就來試試SQLiteOpenHelper的用法吧。首先你要知道SQLiteOpenHelper是一個抽象類,這意味著如果我們想要使用它的話,就需要創建一個自己的幫助類去繼承它。SQLiteOpenHelper中有兩個抽象方法,分別是onCreate()和onUpgrade(),我們必須在自己的幫助類裡面重寫這兩個方法,然後分別在這兩個方法中去實現創建、升級資料庫的邏輯。本篇文章只需要把注意力放空纖在創建資料庫這里就行了,升級資料庫我們會在下一篇文章中去討論。
新建一個MySQLiteHelper類並讓它繼承SQLiteOpenHelper,這樣一個最基本的資料庫幫助類的代碼如下所示:
[java] view plain
public class MySQLiteHelper extends SQLiteOpenHelper {
public MySQLiteHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
其中簡晌,當資料庫創建的時候會調用onCreate()方法,在這里去執行建表操作就可以了。比如說我們想新建一張news表,其中有title,content,publishdate,commentcount這幾列,分別代表著新聞標題、新聞內容、發布時間和評論數,那麼代碼就可以這樣寫:
[java] view plain
public class MySQLiteHelper extends SQLiteOpenHelper {
public static final String CREATE_NEWS = "create table news ("
+ "id integer primary key autoincrement, "
+ "title text, "
+ "content text, "
+ "publishdate integer,"
+ "commentcount integer)";
public MySQLiteHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_NEWS);
}
...
}
可以看到,我們把建表語句定義成了一個常量,然後在onCreate()方法中去執行了這條建表語句,news表也就創建成功了。這條建表語句雖然簡單,斗咐仿但是裡面還是包含了一些小的細節,我來解釋一下。首先,根據資料庫的範式要求,任何一張表都應該是有主鍵的,所以這里我們添加了一個自增長的id列,並把它設為主鍵。然後title列和content列都是字元串類型的,commentcount列是整型的,這都很好理解,但是publishdate列該怎麼設計呢?由於SQLite中並不支持存儲日期這種數據類型,因此我們需要將日期先轉換成UTC時間(自1970年1月1號零點)的毫秒數,然後再存儲到資料庫中,因此publishdate列也應該是整型的。
現在,我們只需要獲取到SQLiteDatabase的實例,資料庫表就會自動創建了,如下所示:
[java] view plain
SQLiteOpenHelper dbHelper = new MySQLiteHelper(this, "demo.db", null, 1);
SQLiteDatabase db = dbHelper.getWritableDatabase();
LitePal的基本用法
雖說LitePal宣稱是近乎零配置,但也只是「近乎」而已,它還是需要進行一些簡單配置才可以使用的,那麼我們第一步就先快速學習一下LitePal的配置方法。
快速配置
1. 引入Jar包或源碼
首先我們需要將LitePal的jar包引入到項目當中,可以點擊這里查看LitePal的最新版本,選擇你需要的下載即可。下載好了jar包之後,把它復制到項目的libs目錄中就算是引入成功了,如下圖所示:
如果你不想用jar包的話,也可以把LitePal的源碼下載下來,然後作為一個library庫導入到Eclipse當中,再讓我們的項目去引用這個library庫就可以了。
2. 配置litepal.xml
接著在項目的assets目錄下面新建一個litepal.xml文件,並將以下代碼拷貝進去:
[java] view plain
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="demo" ></dbname>
<version value="1" ></version>
<list>
</list>
</litepal>
配置文件相當簡單,<dbname>用於設定資料庫的名字,<version>用於設定資料庫的版本號,<list>用於設定所有的映射模型,我們稍後就會用到。
3. 配置LitePalApplication
由於操作資料庫時需要用到Context,而我們顯然不希望在每個介面中都去傳一遍這個參數,那樣操作資料庫就顯得太繁瑣了。因此,LitePal使用了一個方法來簡化掉Context這個參數,只需要在AndroidManifest.xml中配置一下LitePalApplication,所有的資料庫操作就都不用再傳Context了,如下所示:
[java] view plain
<manifest>
<application
android:name="org.litepal.LitePalApplication"
...
>
...
</application>
</manifest>
當然,有些程序可能會有自己的Application,並在這里配置過了。比如說有一個MyApplication,如下所示:
[java] view plain
<manifest>
<application
android:name="com.example.MyApplication"
...
>
...
</application>
</manifest>
沒有關系,這時只需要修改一下MyApplication的繼承結構,讓它不要直接繼承Application類,而是繼承LitePalApplication類,就可以使用一切都能正常工作了,代碼如下所示:
[java] view plain
public class MyApplication extends LitePalApplication {
...
}
但是,有些程序可能會遇到一些更加極端的情況,比如說MyApplication需要繼承另外一個AnotherApplication,並且這個AnotherApplication還是在jar包當中的,不能修改它的代碼。這種情況應該算是比較少見了,但是如果你遇到了的話也不用急,仍然是有解釋方案的。你可以把LitePal的源碼下載下來,然後把src目錄下的所有代碼直接拷貝到你項目的src目錄下面,接著打開LitePalApplication類,將它的繼承結構改成繼承自AnotherApplication,再讓MyApplication繼承自LitePalApplication,這樣所有的Application就都可以在一起正常工作了。
僅僅三步,我們就將所有的配置工作全部完成了,並且這是一件一本萬利的事情,自此以後,你就可以開心地體驗LitePal提供的各種便利了,就讓我們從建表開始吧。
開始建表
前面在介紹的時候已經說了,LitePal採取的是對象關系映射(ORM)的模式,那麼什麼是對象關系映射呢?簡單點說,我們使用的編程語言是面向對象語言,而我們使用的資料庫則是關系型資料庫,那麼將面向對象的語言和面向關系的資料庫之間建立一種映射關系,這就是對象關系映射了。
但是我們為什麼要使用對象關系映射模式呢?這主要是因為大多數的程序員都很擅長面向對象編程,但其中只有少部分的人才比較精通關系型資料庫。而且資料庫的SQL語言晦澀難懂,就算你很精通它,恐怕也不喜歡經常在代碼中去寫它吧?而對象關系映射模式則很好地解決了這個問題,它允許我們使用面向對象的方式來操作資料庫,從而可以從晦澀難懂的SQL語言中解脫出來。
那麼接下來我們就看一看LitePal中是如何建表的吧。根據對象關系映射模式的理念,每一張表都應該對應一個模型(Model),也就是說,如果我們想要建一張news表,就應該有一個對應的News模型類。新建一個News類,如下所示:
[java] view plain
package com.example.databasetest.model;
public class News {
}
然後,表中的每一列其實就是對應了模型類中的一個欄位,比如news表中有id、title、content、publishdate、commentcount這幾個列,那麼在News類中就也應該有這幾個欄位,代碼如下所示:
[java] view plain
[java] view plain
public class News {
private int id;
private String title;
private String content;
private Date publishDate;
private int commentCount;
// 自動生成get、set方法
...
}
其中id這個欄位可寫可不寫,因為即使不寫這個欄位,LitePal也會在表中自動生成一個id列,畢竟每張表都一定要有主鍵的嘛。
這里我要特別說明一下,LitePal的映射規則是非常輕量級的,不像一些其它的資料庫框架,需要為每個模型類單獨配置一個映射關系的XML,LitePal的所有映射都是自動完成的。根據LitePal的數據類型支持,可以進行對象關系映射的數據類型一共有8種,int、short、long、float、double、boolean、String和Date。只要是聲明成這8種數據類型的欄位都會被自動映射到資料庫表中,並不需要進行任何額外的配置。
那麼有的朋友可能會問了,既然是自動映射的話,如果News類中有一個字元串欄位我並不想讓它映射到資料庫表中,這該怎麼辦呢?對此,LitePal同樣採用了一種極為輕量的解決方案,只有聲明成private修飾符的欄位才會被映射到資料庫表中,如果你有某一個欄位不想映射的話,只需要將它改成public、protected或default修飾符就可以了。
現在模型類已經建好了,我們還差最後一步,就是將它配置到映射列表當中。編輯assets目錄下的litepal.xml文件,在<list>標簽中加入News模型類的聲明:
[java] view plain
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<dbname value="demo" ></dbname>
<version value="1" ></version>
<list>
<mapping class="com.example.databasetest.model.News"></mapping>
</list>
</litepal>
注意這里一定要填入News類的完整類名。
OK,這樣所有的工作就都已經完成了,現在只要你對資料庫有任何的操作,news表就會被自動創建出來。比如說LitePal提供了一個便捷的方法來獲取到SQLiteDatabase的實例,如下所示:
[java] view plain
SQLiteDatabase db = Connector.getDatabase();
好了,到目前為止你已經算是對LitePal的用法有點入門了,那麼本篇文章的內容就到這里,下篇文章當中我們將學習使用LitePal進行升級表的操作。感興趣的朋友請繼續閱讀 Android資料庫高手秘籍(三)——使用LitePal升級表 。
『拾』 如何學習hibernate源碼
學習 Hibernate 源碼一
1. 下載 hibernate 源碼,並構建起 eclipse 項目
( 1 ) hibernate 的源代碼採用 git 管理,安裝 git 客戶端以後,通過點擊 github.com/hibernate/hibernate-orm 頁面右側的「 Clone in Desktop 」可啟動客戶端將代碼 clone 到本地。當然也可以直接使用
git clone git://github.com/hibernate/hibernate-orm.git
命令下載代碼。
下載完畢後,打開根目錄下的 readme 文件,可以看到詳細的把源代碼構建為不同 IDE 項目的說明;以及其他的一些信息。
對應文檔的網站鏈接:
community.jboss.org/wiki/BuildingHibernateORM4x5x
構建 IDE 部分:
Eclipse
To create the Eclipse project files you can run
After changes to the dependencies you need to clean the project files and recreate them:
./gradlew cleanEclipse eclipse
See also Contributing to Hibernate using Eclipse
Idea
To create the Idea project files you can run
./gradlew idea
After changes to the dependencies you need to clean the project files and recreate them:
./gradlew cleanIdea idea
此處的 gradle 是 hibernate 所使用的自動構建工具,官網地址為行基:
.gradle.org/
下載地址為: .gradle.org/downloads ,選擇一個版本進行下載
此處是 Hibernate 團隊闡述其從 Maven 遷移到 Gradle 的原因: community.jboss.org/wiki/GradleWhy
褲腔至於 grable ,有時間會深入學習一下,感興趣的同學可以看看這位博主的博客:
.blogjava.net/wldandan/archive/2012/06/26/381532.html
言歸正傳,下載 grable 後,解壓,我將胡帶衫其解壓到了 C 盤根目錄,解壓完畢的 grable 所在目錄為: C:\gradle-1.7 ,將其子目錄 C:\gradle-1.7\bin 目錄加入系統的 Path 變數
編譯代碼為 eclipse 項目:
( 1 )進入 hibernate 源碼的根目錄:
cd C:\Users\Administrator\Documents\GitHub\hibernate-orm
( 2 )執行 gradlew.bat eclipse
接著會自動下載項目所需要的依賴項,具體輸出如下:
C:\Users\Administrator\Documents\GitHub\hibernate-orm >gradlew.bat eclipse
Creating properties on demand (a.k.a. dynamic properties) has been deprecated and is scheled to be removed in Gradle 2.0. Please read gradle.org/docs/current/dsl/org.gradle.api.plugins.ExtraPropertiesExtension.html for information on
Deprecated dynamic property: "exportPackageVersion" on "project ':documentation'", value: "4.3.0".
Deprecated dynamic property "exportPackageVersion" created in multiple locations.
FAILURE: Build failed with an exception.
* Where:
Build file 'C:\Users\Administrator\Documents\GitHub\hibernate-orm\build.gradle' line: 85
* What went wrong:
A problem occurred evaluating root project 'hibernate-orm'.
> org/hibernate/build/gradle/publish/auth/maven/AuthenticationManager : Unsupported major.minor version 51.0
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
此時我去查看我的環境變數, JAVA_HOME 指向的是 64 位的 JDK6 ,將其指向 32 位 JDK7 後再次執行
gradlew.bat eclipse
發現此時 gradlew 又去下載了其他的依賴包,查看 hibernate-rom 目錄下的 libraries.gradle 文件,可以看到 hibernate 的依賴包。
重新編譯過程中還是報錯了,具體錯誤:
:hibernate-core:compileJava
警告 : [options] 未與 -source 1.6 一起設置引導類路徑
C:\Users\Administrator\Documents\GitHub\hibernate-orm\hibernate-core\src\main\java\org\hibernate\annotations\Loader.java:38: 錯誤 : 編碼 GBK 的不可映射字元
* @author L 錕絪 zl 錕 ?Benke
^
C:\Users\Administrator\Documents\GitHub\hibernate-orm\hibernate-core\src\main\java\org\hibernate\annotations\ResultCheckStyle.java:29: 錯誤 : 編碼 GBK 的不可映射字元
* @author L 錕絪 zl 錕 ?Benke
^
C:\Users\Administrator\Documents\GitHub\hibernate-orm\hibernate-core\src\main\java\org\hibernate\annotations\SQLDelete.java:37: 錯誤 : 編碼 GBK 的不可映射字元
* @author L 錕絪 zl 錕 ?Benke
^
C:\Users\Administrator\Documents\GitHub\hibernate-orm\hibernate-core\src\main\java\org\hibernate\annotations\SQLDeleteAll.java:37: 錯誤 : 編碼 GBK 的不可映射字元
* @author L 錕絪 zl 錕 ?Benke
^
C:\Users\Administrator\Documents\GitHub\hibernate-orm\hibernate-core\src\main\java\org\hibernate\annotations\SQLInsert.java:37: 錯誤 : 編碼 GBK 的不可映射字元
* @author L 錕絪 zl 錕 ?Benke
^
C:\Users\Administrator\Documents\GitHub\hibernate-orm\hibernate-core\src\main\java\org\hibernate\annotations\SQLUpdate.java:37: 錯誤 : 編碼 GBK 的不可映射字元
* @author L 錕絪 zl 錕 ?Benke
^
注 : 某些輸入文件使用或覆蓋了已過時的 API 。
注 : 有關詳細信息 , 請使用 -Xlint:deprecation 重新編譯。
注 : 某些輸入文件使用了未經檢查或不安全的操作。
注 : 有關詳細信息 , 請使用 -Xlint:unchecked 重新編譯。
1 個警告
google 了一下,貌似是區域語言設置的問題,需要修改為「英語(英國)」,但編譯並沒用中斷,接著編譯。我將控制面板中的區域語言設置修改後,繼續觀察,看其是否還會報同樣的錯誤。
最終還是失敗了:
:hibernate-entitymanager:compileJava
警告 : [options] 未與 -source 1.6 一起設置引導類路徑
C:\Users\Administrator\Documents\GitHub\hibernate-orm\hibernate-entitymanager\src\main\java\org\hibernate\jpa\AvailableSettings.java:290: 錯誤 : 編碼 GBK 的不可映射字元
* contains 鈥淐 REATE SCHEMA 鈥 ?commands. If this property is not supplied (or is explicitly {@code false}), the
^
注 : 某些輸入文件使用或覆蓋了已過時的 API 。
注 : 有關詳細信息 , 請使用 -Xlint:deprecation 重新編譯。
注 : 某些輸入文件使用了未經檢查或不安全的操作。
注 : 有關詳細信息 , 請使用 -Xlint:unchecked 重新編譯。