Thursday 16 August 2012

BobSleigh - New SourceForge Project

I recently posted about my gripes with CRUD based generation tools which come with MyBatis / Hibernate etc.  These source code / entity generators are quite powerful but fall down somewhat with providing the ability to control precisely how the source looks.  In response to this I've decided to create my first SourceForge project (since JOGRE) called "BobSleigh" (Schema Lookup & Entity Item Generator).  It is being implemented with the following goals: -
  1. Simplicity - it must be simple to use i.e. no programming required for most scenarios - uses the FreeMarker template engine to generate the code.
  2. Power - must be powerful i.e. have full control over how and where the source is generated.
  3. Familiarity - uses XML and "borrows" concepts from ANT such as @basedir, and
  4. TDD - more of a side note but so far this project has been my first 100% test driven developed project.  Cobertura is being used as to ensure code coverage.
A release should be out fairly soon but in the mean time you can download a working prototype using SVN from SourceForge.

    https://sourceforge.net/p/bobsleigh/code-0/5/tree/trunk/BobSleigh/

The following is the README file provided with the project.



                             B O B - S L E I G H

What is it?
-----------

BobSleigh - Schema Lookup & Entity Item Generator. 

BobSliegh is a Java based utility which can examine a user specified database connection and produce a simple mapped model of the database schema. This model can then be transformed into one or more files e.g. database acccess objects,

MyBatis SQL map files, Hibernate Java source etc. The utility uses the powerful FreeMarker template engine which ensures the user has totally control over the output of the generated source files. The configuration file also borrows concepts from ANT such as specifying the project "basedir" and user defined  properties.


Why?
----

Simplicity and Power!

Why use another CRUD type generation application when utilities such as MyBatis Generator exist for MyBatis or Jboss Hibernate Tools? 

When starting with a library such as MyBatis, Hiberate for the first time users run the included generation tools they are usually dismayed with the lack of control they have over the output / formatting / etc.

These tools are also product dependent e.g. MyBatis Generator will only create MyBatis artifacts.

BobSliegh takes a different approach and makes it very simple for a user to create totally customised CRUD based entity items.  A target database is parsed into a simple in-memory model which can be transformed using the very powerful FreeMarker engine either on a per table basis or on the whole database.
 
For example, there may exist a database with a single table called PRODUCT_ITEM which contains 3 fields "PRODUCT_ID", "DESCRIPTION" and "NAME".

After a database schema parse you could have the following very simple object tree: -


    table.name = "PRODUCT_ITEM";
    table.jname = "ProductItem";

    tables.columns ("PRODUCT_ID", "DESCRIPTION", "NAME")
   
    e.g. a column object will contain
        column.name = "PRODUCT_ID";     
        column.jname = "ProductId";
        column.type = "INTEGER"
        column.jtype = "int";
        column.nullable = false;
        ... etc

    tables.pkeys (list of primary key column objects)
   

This model can be used in a FreeMarker style template as follows: -


   


This will create the following POJO [ ProductItem.java ]


    package org.project.test;

    public class ProductItem {

        private int productId;
        private String description;
        private String name;

        public ProductItem () {}

        public void setProductId (int productId) {
            this.productId = productId;
        }   
        public int getProductId () {
            return this.productId;
        }   
        public void setDescription (String description) {
            this.description = description;
        }   
        public String getDescription () {
            return this.description;
        }   
        public void setName (String name) {
            this.name = name;
        }   
        public String getName () {
            return this.name;
        }   
    }
   
   
In the previous simple example the POJO's don't contain comments and only have a single blank constructor.  However, it is fairly easy for the user to update the template if the user wants a complex constructor, comments, etc and with all the power of FreeMarker.
       

The Latest Version
------------------

Details of the latest version can be found on the BobSleigh SourceForge Project web site .


Documentation
-------------

Documentation is available.


Licensing
---------

This software is licensed under the terms you may find in the file named "LICENSE" in this directory.


Enjoy !!!
Author:   Bob Marks
HomePage: http://bobsleigh.sourceforge.net

No comments: