Day 18, Java Holiday Calendar 2016, Easily Create Database Content

by Per Minborg

on December 18, 2016


Day 18, Easily Create Database Content




Today's tips is about creating database content. There are a number of ways to do this, ranging from writing our own entity beans combined with using JDBC directly to fully automating the entire process.

Suppose we already have a database table like this:

mysql> explain country
+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| name | varchar(45) | YES | UNI | NULL | |
| local_name | varchar(45) | YES | | NULL | |
| code | int(11) | YES | | NULL | |
| domain | varchar(10) | YES | | NULL |
+------------+-------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

Then we could add the Speedment plugin and dependency to our POM and launch the Speedment graphic tool that will analyze the database and generate code automatically for us.

After generation we can do this:

Initialization:

final MyApplication app = new MyApplicationBuilder()
.withPassword("myPwd729") // Replace with the real pwd
.build();

final CountryManager countries = app.getOrThrow(CountryManager.class);

Insert DB Content:

countries.persist(
new CountryImpl()
.setName("Sweden")
.setLocalName("Sverige")
.setCode(40) // Intentionally wrong, should be 46!!
.setDomain(".se")
);

Update DB Content:

countries.stream()
.filter(Country.NAME.equal("Sweden")) // Filter out Sweden
.map(c -> c.setCode(46)) // Update code to 46
.forEach(countries.updater()); // Apply the database updater

Read more on Speedment on GitHub here.

Follow the Java Holiday Calendar 2016 with small tips and tricks all the way through the winter holiday season. I am contributing to open-source Speedment, a stream based ORM tool and runtime. Please check it out on GitHub.

About

Per Minborg

Per Minborg is a Palo Alto based developer and architect, currently serving as CTO at Speedment, Inc. He is a regular speaker at various conferences e.g. JavaOne, DevNexus, Jdays, JUGs and Meetups. Per has 15+ US patent applications and invention disclosures. He is a JavaOne alumni and co-author of the publication “Modern Java”.