Coding cruddy...

A couple of years ago I wrote an open source library called cruddy that I used to provide a simple data access layer. It's mission was to painlessly to convert objects into database records and back.

You use it like this...

public int update(SomeObject obj) throws SQLException {

    try (Database db = Database.connect(connection)) {
    
        // Save some object (called obj) to the database
        int rows = db.update(obj);
    
        return rows;
    
    } catch (SQLException e) {
        // handle errors here as per usual
    }
    
}

Here's is an example of an object that can be saved to a database...

@Table(name = "organization")
public class Organization {

	@PrimaryKey(isSerial = false)
	private UUID id = UUID.randomUUID();

	@Unique
	@NotNull
	private String name;

	@Ignore
	private List<OrganizationType> types = new ArrayList<>();

	@JsonField
	private Map<String, String> profile = new HashMap<>();

	public Organization() {
	}

	public UUID getId() {
		return id;
	}

	public void setId(UUID id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public List<OrganizationType> getTypes() {
		return types;
	}

	public void setTypes(List<OrganizationType> types) {
		this.types = types;
	}

	public Map<String, String> getProfile() {
		return profile;
	}

	public void setProfile(Map<String, String> profile) {
		this.profile = profile;
	}

}

A series of annotations allow the coder to mark up a class so that it can be easily persisted to the database. Notable are the @Table, and @PrimaryKey annotations as these are mandatory. There are also annotations to support field name mapping, database constraints, foreign keys etc.

I wrote this handy little library because I was saddened by the complexity, brittleness and performance of tools like Hibernate. It's served me well as the heart of a number of commercial projects I've used it on.