CINXE.COM

Apache Empire-db

<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <!-- #BeginTemplate "../site.dwt" --> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <!-- additinal tags --> <meta name="description" content="Apache Empire-db - full SQL-freedom for Java"> <meta name="keywords" content="java, jdbc, database, sql, ddl, dbms, rdbms, metadata, entity, persistence, query, jpa, orm, or-mapping, annotations, hibernate, jdo" > <meta name="robots" content="index, follow" > <meta name="revisit-after" content="7 days" > <meta http-equiv="imagetoolbar" content="no"> <!-- icons --> <link rel="shortcut icon" href="../empire-db.ico"> <!-- css --> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Montserrat:400,600"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/github-fork-ribbon-css/0.2.3/gh-fork-ribbon.min.css" /> <link rel="stylesheet" href="../css/layout.css" type="text/css" /> <!-- JavaScript --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <!-- app-specific --> <script type="text/javascript" src="../js/site.js"></script> <!-- #BeginEditable "head" --> <link href="../css/home.css" rel="stylesheet"> <style type="text/css"> </style> <title>Apache Empire-db</title> <!-- #EndEditable --> </head> <body> <div id="bodywrapper"> <a class="github-fork-ribbon" target="_blank" href="https://github.com/apache/empire-db" data-ribbon="Fork me on GitHub" title="Fork me on GitHub"></a> <nav id="navigation"> <!-- Main Nav --> <div class="navbar navbar-dark navbar-fixed-top navbar-main-style" id="navbar-main"> <div class="container"> <!-- brand and toggle --> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#nav-main" aria-expanded="false" aria-controls="navbar"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-link logo-empire homeLink" href="home.html"> <img alt="Empire-db" src="../res/empire-db-lg.png" /> </a> </div> <!-- Main Nav --> <div class="navbar-collapse collapse" id="nav-main"> <div class="navbar-nav-wrapper"> <!-- row 1 --> <ul class="nav navbar-nav"> <li id="mi.home"> <a class="homeLink" data-target="mi.home" href="home.html"><span class="first-letter">H</span>OME</a> <div class="nav-indicator"><span></span></div> </li> <li id="mi.project"> <a class="pageLink" data-target="mi.project" href="project.html"><span class="first-letter">W</span>HY?</a> <div class="nav-indicator"><span></span></div> </li> <li id="mi.download" class="highlight"> <div class="nav-highlight"><span></span></div> <a class="pageLink" data-target="mi.download" href="download.html"><span class="first-letter">G</span>ET IT <span class="first-letter">N</span>OW</a> <div class="nav-indicator"><span></span></div> </li> <li id="mi.community"> <a class="pageLink" data-target="mi.community" href="community.html"><span class="first-letter">C</span>OMMUNITY</a> <div class="nav-indicator"><span></span></div> </li> </ul> </div> <div class="navbar-nav-right"> <a class="navbar-link logo-apache" href="https://apache.org" target="_blank"> <img alt="Apache.org" src="../res/apache-small.png" /> </a> </div> </div> </div> </div> <!-- Sub Nav --> <div class="navbar navbar-light navbar-fixed-top" id="navbar-sub"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#nav-sub" aria-expanded="false" aria-controls="navbar"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> </div> <div class="navbar-collapse collapse" id="nav-sub"> <ul class="nav navbar-nav"> <!-- #BeginEditable "subnav" --> <!-- #EndEditable --> </ul> </div> </div> </div> <!-- end nav --> </nav> <article id="content"> <!-- #BeginEditable "content" --> <header class="band title"> <div class="content"> <table class="empire-logo inline"> <tr> <td class="logo-fl" rowspan="3"><img src="../res/feather.png"/></td> <td><img src="../res/empire-db-logo-b.png"/></td> <td class="logo-fr" rowspan="3"><div style="width:95px"></div></td> </tr> <tr> <td><div class="slogan">Full SQL Freedom for Java</div></td> </tr> <tr> <td><a class="pageLink version" href="download.html">Version 3.2.0 Released 2024-06-25</a></td> </tr> </table> </div> </header> <section id="sec1" class="band odd"> <div class="content"> <ul class="bigpoints large-font"> <li>Apache Empire-db lets you utilize Relational-DBMS in Java without limitations, thus allowing to unleash the full power of the database-system.</li> <li>Forget OR-Mapping, Entity Beans, Lazy vs Eager, Bytecode Proxies, TupleQuery and black box magic and reclaim your full SQL freedom.</li> <li>No Annotation madness, No Mapping-File pain, No fancy stuff to represent your data model. Just simple old, plain old Java API.</li> <li>Create even the most complex SQL in code in the simplest and most intuitive way, with "No Strings attached" (literally!)</li> <li>Improve Compile-Time-Safety and code maintainability. Write DBMS independent code. Benefit from Identity-management and concurrency control. Perform DDL operations. Access Metadata. You name it…</li> <li>Clever Object Model lets you customize and extend almost every aspect of its API by simple subclassing and overriding. No rocket science!</li> <li>100% Open-Source. 100% Free. Lightweight and straightforward.</li> <li>Support for Oracle, SQLServer, PostgreSQL, MySQL, HsqlDB, Derby, H2 and more…</li> </ul> </div> </section> <section id="sec2" class="band even"> <div class="content"> <h1 style="display: inline-block">Natural selection</h1> <div class="non-optional"> <p>Here's a little appetizer showing a query of car model sales:</p> <div class="content-box"> <div class="codebox"> <div class="title">Java</div> <pre> <span class="comment">// create a command</span> <span class="type">DBCommand</span> <span class="var">cmd</span> = <span class="var">context</span>.<span class="func">createCommand</span>() .<span class="func">select</span> (<span class="obj">BRAND</span>.<span class="field">NAME</span>, <span class="obj">MODEL</span>.<span class="field">SPECIFICATION</span>, <span class="obj">MODEL</span>.<span class="field">BASE_PRICE</span>) .<span class="func">select</span> (<span class="obj">SALES</span>.<span class="field">MODEL_ID</span>.<span class="func">count</span>(), <span class="obj">SALES</span>.<span class="field">PRICE</span>.<span class="func">avg</span>()) .<span class="func">select</span> (<span class="obj">SALES</span>.<span class="field">PRICE</span>.<span class="func">avg</span>().<span class="func">minus</span>(<span class="obj">MODEL</span>.<span class="field">BASE_PRICE</span>.<span class="func">avg</span>()).<span class="func">round</span>(<span class="literal">2</span>).<span class="func">as</span>(<span class="literal">"DIFFERENCE"</span>)) .<span class="func">join</span> (<span class="obj">MODEL</span>.<span class="field">WMI</span>.<span class="func">on</span>(<span class="obj">BRAND</span>.<span class="field">WMI</span>)) .<span class="func">joinLeft</span>(<span class="obj">MODEL</span>.<span class="field">ID</span>.<span class="func">on</span>(<span class="obj">SALES</span>.<span class="field">MODEL_ID</span>).<span class="func">and</span>(<span class="obj">SALES</span>.<span class="field">YEAR</span>.<span class="func">is</span>(<span class="literal">2021</span>))) <span class="comment">// only year 2021</span> .<span class="func">where</span> (<span class="obj">MODEL</span>.<span class="field">ENGINE_TYPE</span>.<span class="func">in</span>(<span class="type">EngineType</span>.P, <span class="type">EngineType</span>.H, <span class="type">EngineType</span>.E)) <span class="comment">// Petrol, Hybrid, Electric</span> .<span class="func">where</span> (<span class="obj">MODEL</span>.<span class="field">BASE_PRICE</span>.<span class="func">isGreaterThan</span>(<span class="literal">30000</span>)) .<span class="func">groupBy</span> (<span class="obj">BRAND</span>.<span class="field">NAME</span>, <span class="obj">MODEL</span>.<span class="field">SPECIFICATION</span>, <span class="obj">MODEL</span>.<span class="field">BASE_PRICE</span>) .<span class="func">having</span> (<span class="obj">SALES</span>.<span class="field">MODEL_ID</span>.<span class="func">count</span>().<span class="func">isGreaterThan</span>(<span class="literal">5</span>)) <span class="comment">// more than 5 sales</span> .<span class="func">orderBy</span> (<span class="obj">BRAND</span>.<span class="field">NAME</span>.<span class="func">desc</span>(), <span class="obj">MODEL</span>.<span class="field">SPECIFICATION</span>.<span class="func">asc</span>()); <span class="comment">// Return a list of Java beans (needs matching fields constructor or setter methods)</span> <span class="comment">// This is just one of several options to obtain and process query results</span> <span class="type">List</span>&lt;<span class="type">QueryResult</span>&gt; <span class="var">list</span> = <span class="var">context</span>.<span class="func">getUtils</span>().<span class="func">queryBeanList</span>(<span class="var">cmd</span>, <span class="type">QueryResult</span>.<span class="keyword">class</span>, <span class="literal">null</span>); log.<span class="func">info</span>(<span class="literal">"queryBeanList returned {} items"</span>, <span class="var">list</span>.<span class="func">size</span>()); </pre> </div> <!-- sql --> <div class="sqlbox"> <div class="title">SQL</div> <pre> <span class="word">SELECT</span> <span class="alias">t1</span>.NAME, <span class="alias">t2</span>.SPECIFICATION, <span class="alias">t2</span>.BASE_PRICE , <span class="func">count</span>(<span class="alias">t5</span>.MODEL_ID), <span class="func">avg</span>(<span class="alias">t5</span>.PRICE) , <span class="func">round</span>(<span class="func">avg</span>(<span class="alias">t5</span>.PRICE)-<span class="func">avg</span>(<span class="alias">t2</span>.BASE_PRICE),2) AS DIFFERENCE <span class="word">FROM</span> MODEL <span class="alias">t2</span> <span class="word">INNER JOIN</span> BRAND <span class="alias">t1</span> <span class="word">ON</span> <span class="alias">t1</span>.WMI = <span class="alias">t2</span>.WMI <span class="word">LEFT JOIN</span> SALES <span class="alias">t5</span> <span class="word">ON</span> <span class="alias">t5</span>.MODEL_ID = <span class="alias">t2</span>.ID <span class="word">AND</span> <span class="alias">t5</span>.YEAR=<span class="param"><span class="literal">2021</span></span> <span class="word">WHERE</span> <span class="alias">t2</span>.ENGINE_TYPE <span class="word">IN</span> (<span class="param"><span class="literal">'P'</span></span>, <span class="param"><span class="literal">'H'</span></span>, <span class="param"><span class="literal">'E'</span></span>) <span class="word">AND</span> <span class="alias">t2</span>.BASE_PRICE&gt;<span class="param"><span class="literal">30000</span></span> <span class="word">GROUP BY</span> <span class="alias">t1</span>.NAME, <span class="alias">t2</span>.SPECIFICATION, <span class="alias">t2</span>.BASE_PRICE <span class="word">HAVING</span> <span class="func">count</span>(<span class="alias">t5</span>.MODEL_ID)&gt;<span class="literal">5</span> <span class="word">ORDER BY</span> <span class="alias">t1</span>.NAME DESC, <span class="alias">t2</span>.SPECIFICATION </pre> </div> </div> </div> <p>Want to know more?<br/>Then click no further than <a class="pageLink" href="project.html#sec2">here</a></p> </div> </section> <!-- #EndEditable --> </article> <!-- footer --> <footer id="footer"> <!-- <div id="footer-nav"> <div class="container"> </div> </div> --> <div id="footer-bar"> <div class="container"> <div class="footer-info"> <table class="inline"> <tr> <td class="logo"><img alt="Empire-db" src="../res/empire-db-sg.png" /></td> <td class="info"> <span>Copyright © The Apache Software Foundation. All Rights Reserved.</span> <br/> <span>Apache Empire-db, Apache, the Apache feather logo, and the Apache Empire-db logos are trademarks of The Apache Software Foundation.</span> </td> </tr> </table> </div> </div> </div> </footer> <!-- goto-top --> <a id="goto-top" href="#top"><span class="icon"></span></a> </div> <!-- #BeginEditable "page setup" --> <script type="text/javascript"> window.onload = function () { Page.init("mi.home"); } </script> <!-- #EndEditable --> </body> <!-- #EndTemplate --> </html>

Pages: 1 2 3 4 5 6 7 8 9 10