| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| reservedwordsmap.properties | 2026-03-31 | 1.4 kB | |
| examplecodedtypes.zip | 2026-03-31 | 26.3 kB | |
| lgpl.txt | 2026-03-31 | 7.4 kB | |
| README.md | 2026-03-31 | 7.2 kB | |
| daomedge-javadoc-12.0.0.zip | 2026-03-31 | 708.7 kB | |
| daomedge-src-12.0.0.zip | 2026-03-31 | 165.3 kB | |
| daomedgegen-src-12.0.0.zip | 2026-03-31 | 2.6 MB | |
| daomedgegen-12.0.0.zip | 2026-03-31 | 2.6 MB | |
| daomedge-12.0.0.jar | 2026-03-31 | 200.3 kB | |
| daomanual-12.0.0.pdf | 2026-03-31 | 2.8 MB | |
| daomanual-12.0.0.odt | 2026-03-31 | 2.5 MB | |
| dao.png | 2026-03-31 | 1.8 kB | |
| Totals: 12 Items | 11.6 MB | 0 | |
NOTE:
This is a simple, fully documented, POJO using, light weight, fast, thoroughly tested, data access library with a code generator.
DAOMedge targets Java 17 and doesn't, strictly speaking, conform to the DAO pattern. It was developed over many years and simply works well as it is. Although DAOMedge is compiled to Java 17, you can run it using later JDKs and it will compile to that JDK (see the status label on the bottom of the screen).
For convenience the daomedgegen uses the latest daomedge.jar, but without the version number and date. This is useful to keep the projects together. You just really need the generator binary (which will be daomedgegen-12.0.0.zip) as that has daomedgegen.jar, daomedge.jar (in lib/), the reservedwordsmap.properties (for syntax highlighting and reserve word avoidance), documentation, and a slightly less cheesey icon than earlier.
The actual daomedge.jar has a version number in the file name but you can use either one.
I've attempted to ensure the documentation is extensive and up to date. You can grab either the source (daomedge.odt) or the compiled version (daomedge.pdf)
They are also in the source and compiled zips respectively.
There are entries in the supporting documents (manual and READMEs) that might sound condescending but that is because I have made these mistakes so I keep adding to the documentation to remind me.
Known Issues
There is a weird issue when adding the first interface, sometimes it works, other times it fails
and doesn't show up even though it is there (if you attempt to add the interface again it tells you that it is already there) I think it is a race condition, but am not sure. If you attempt to add another interface it fails with an index out of bounds exception. To get around this simply exit and restart.
Bash script to run the generator:
#!/bin/bash
cd /folder/daomedge/daomedgegen/
java -Xmx2g -jar daomedgegen.jar
Bash script to run the generator command line interface:
#!/bin/bash
cd /folder/daomedge/daomedgegen/
java -Xmx2g -jar daomedgegen.jar my_database
Or even:
#!/bin/bash
cd /folder/daomedge/daomedgegen/
java -Xmx2g -jar daomedgegen.jar $*
Sample Code
Simplest:
List<Customer> customers = dao.select(Customer.class);
Pattern Matching:
Customer c = new Customer();
c.setSurname("Smith");
List<Customer> customers = dao.select(c);
Sort and Filter:
daotable table = dao.getTable(Customer.class);
daoproperty property1 = dao.getProperty(Customer.class, Customer.SURNAME);
daoproperty property2 = dao.getProperty(Customer.class, Customer.GIVENS);
OrderBy orderBy2 = new OrderBy(property2);
SelectColumn column1 = new SelectColumn(property1);
SelectColumn column2 = new SelectColumn(property2);
Filter filter = new PropertyFilter(table, property1, "Smith");
List<Customer> customers = dao.select(table, new SelectColumn[]{column1, column2}, filter, new OrderBy[]{orderBy2});
NotSQL
Limits
Simple queries can only have one table's columns in the get clasue.
Multi-table queries cannot use the * syntaxt.
Aggregate queries need the operand and value (even if it is != null or similar)
The Script
set classbase my.business;
{Query1}
get database.Customer.*
filter (database.Customer.surname = Smith | database.Customer.surname = 'Jones') & database.Customer.givens = 'John'
sort home.Person.dateOfBirth >;
{Query2}
sort home.Person.dateOfBirth >;
filter (database.Customer.surname not in [Smith, Jones) & database.Customer.givens = 'John'
get database.Customer.*
The Code For NotSQL
SimpleNotSQL notsql = new SimpleNotSQL(dao, notSQLScriptFromAbove);
List<Customer> customers = notsql.selectNotSQL("Query1");
customers = notsql.selectNotSQL("Query2");
// OR
customers = notsql.selectNotSQL(0);
customers = notsql.selectNotSQL(1);
Grab the latest documentation for a full list of examples.
Version 12.0.0 changelog
As of 12.0.0 I'm not longer adding the release date to the files, just the version number.
Added export and import of Data Dictionary entries. It outputs to a text file which can be re-imported after editing.
Made building of the data dictionary optional.
Changed some File Chooser dialogs' approve button texts.
Added Save Style Sheet to save to a file not just the clipboard.
I have refactored the data dictionary on a table to be inline with the columns and relationships.
Removed the "Default Data Dictionary" functionality as it really isn't worth it with the export/import stuff.
Minor changes to the copyright, the copyright is included if there is a company name, but the copyright date is always included and is now called the Generation Date.
Printable data dictionary now, by default, honours background colours.
If you have already set up a style sheet (and you probably have as my default style sheet is terrible) but haven't added a print style section(ie missing media="print") then the default (below) will be added.
The default is this:
<style type="text/css" media="print">
@page
{
size: landscape;
}
body
{
-webkit-print-color-adjust:exact !important;
print-color-adjust:exact !important;
}
</style>
Have added override warnings for all file saves.
When I tested a login and got the URL incorrect I edited the URL on the generator frame and it logged in nicely, silently and without triggering a refresh of the tree. I've moved all of the connection information into a login/create dialog.
The interface attached panel didn't make much sense as the class preview gave you a better idea. It now just summarises the intefaces in play.
I've added a chunck of HTML to the printable data dictionary to show the coded type values for a table.
Interface usage dialog sorts by catalog then table name now and shows catalog name as well.
Made daoconnector Serializable.
Have added a sort on methods to the insert and update sql generation which removes the requirement for:
insert into table_name (column_name_1, column_name_2,...)
values (value_1, value_2,...)
I can use:
insert into table_name
values (value_1, value_2,...)
For the first time I ran a test where the case sensitivity played a part (LeBlanc vs Leachman) which highlighted that the internal sort and database handled strings differently. There is now an optional boolean on the sort method on the Sorter, which defaults to the database adapter's value which, in turn, defaults to false (IE not case sensitive).
12.0.0 was released 31-Mar-2026
Known Issues
In version 11.0.0 I introduced a check against used imports. If you have an import from another jar file that has the same package name, the 'Show Usage' dialog will incorrectly list it as being in use.
e.g. I have two jars, both have the same utilities package so both are flagged as being in use.