- Java >= 1.8
Configuration file example:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<databases>
<database>
<name>h2</name>
<support>com.github.luischavez.database.h2.H2Support</support>
<properties>
<item key="database" value="test.h2"/>
<item key="user" value="root"/>
<item key="password" value="test"/>
</properties>
</database>
<database>
<name>mysql</name>
<support>com.github.luischavez.database.mysql.MySQLSupport</support>
<properties>
<item key="server" value="localhost"/>
<item key="database" value="test"/>
<item key="port" value="3306"/>
<item key="user" value="root"/>
<item key="password" value=""/>
</properties>
</database>
</databases>
<migrators>
<migrator>com.github.luischavez.database.examples.MyMigrator</migrator>
</migrators>
</configuration>
Local source configuration should be placed on the project working directory.
Database.load(new XMLBuilder(), new LocalSource("database.xml"));
Project source configuration (project resource) should be placed on project resources folder.
Database.load(new XMLBuilder(), new ProjectSource("/database.xml"));
Database mysql = Database.use("mysql");
Database h2 = Database.use("h2");
Before use database is necessary perform the connection.
Database mysql = Database.use("mysql");
mysql.open();
And release the resources when finished.
mysql.close();
Row row = mysql.table("users").first();
RowList rows = mysql.table("users").get();
Row row = mysql.table("users").first("name, lastname");
RowList rows = mysql.table("users").get("name");
Row row = mysql.table("users").where("name", "=", "Luis").first();
Multiple where clauses
Row row = mysql.table("users")
.where("name", "=", "Luis")
.orWhere("name", "=", "Walter")
.first();
Row row = mysql.table("users").having("name", "=", "Luis").first();
Multiple having clauses
Row row = mysql.table("users")
.having("name", "=", "Luis")
.orHaving("name", "=", "Walter")
.first();
Row row = mysql.table("users u")
.where("u.name", "=", "Luis")
.join("profiles p", "p.user_id", "=", "u.user_id")
.first();
Multiple join filters
Row row = mysql.table("users u")
.where("u.name", "=", "Luis")
.join("profiles p", join -> {
join.on("p.user_id", "=", "u.user_id")
.or("p.user_id", "=", 100);
})
.first();
RowList rows = mysql.table("users")
.group("user_type")
.get("user_type, name, lastname");
Asc order
RowList rows = mysql.table("users")
.order("name", true);
.get("name");
Desc order
RowList rows = mysql.table("users")
.order("name", false);
.get("name");
RowList rows = mysql.table("users").limit(10).get();
Offset support
RowList rows = mysql.table("users").limit(10).offset(5).get();
Insert one row
mysql.insert("users", "name, lastname", "Luis", "Chávez");
Insert multiple rows
mysql.insert("users", "name, lastname", new Object[][] {
{"Luis", "Chávez"},
{"Walter", "White"}
});
Handle generated keys
Affecting affecting = mysql.insert("users", "name, lastname", "Luis", "Chávez");
Object[] keys = affecting.getGeneratedKeys();
mysql.where("name", "=", "Luis").update("users", "lastname", "Chávez");
Delete all records
mysql.delete("users");
Using filters
mysql.where("name", "=", "Luis").delete("users");
Type | Schema function |
---|---|
Boolean | table.bool(columnName); |
Time | table.time(columnName); |
Date | table.date(columnName); |
Datetime | table.timestamp(columnName); |
String | table.string(columnName, length); |
Text | table.text(columnName); |
Integer | table.integer(columnName, length); |
Decimal | table.decimal(columnName, length, zeros); |
Type | Schema function |
---|---|
Null | table.text(columnName).nullable(); |
Unsigned | table.integer(columnName).unsigned(); |
Autoincrement | table.integer(columnName).incremented(); |
Default | table.timestamp(columnName).defaults(value); |
Type | Schema function |
---|---|
Primary | table.primary(columnName); |
Unique | table.unique(columnName); |
Index | table.index(columnName); |
Foreign | table.foreign(columnName, relatedTableName, relatedColumnName, onDelete, onUpdate); |
mysql.create("users", table -> {
table.integer("user_id").incremented();
table.string("name", 64);
table.string("lastname", 64);
table.string("user_type", 20).defaults("USER");
table.primary("user_id");
});
mysql.table("users", table -> {
// add columns.
table.timestamp("register_datetime");
// modify columns.
table.modify(columns -> {
columns.string("user_type", 10).defaults("ADMIN");
});
// drop columns.
table.drop("user_type");
// drop primary key.
table.dropPrimary();
});
mysql.drop("users");
if (mysql.exists("users")) {
}
Define migrations
public class CreateUsersTable implements Migration {
@Override
public void up(Database database) {
database.create("users", table -> {
table.string("name", 32);
table.string("lastname", 32);
});
}
@Override
public void down(Database database) {
database.drop("users");
}
}
Create custom migrator
public class MyMigrator extends Migrator {
@Override
public void setup() {
this.register(new CreateUsersTable());
}
}
Configuration
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<migrators>
<migrator>com.github.luischavez.database.examples.MyMigrator</migrator>
</migrators>
</configuration>
mysql.migrate();
mysql.rollback();
- Luis Chávez https://github.com/luischavez