Newer
Older
simple-database / src / nl / astraeus / database / SimpleDao.java
package nl.astraeus.database;

import java.util.List;

/**
 * User: rnentjes
 * Date: 10-12-16
 * Time: 15:15
 */
public class SimpleDao<T> {

    private SimpleDatabase database;
    private ObjectPersister<T> persister;

    public SimpleDao(Class<T> cls) {
        this(cls, "default");
    }

    public SimpleDao(Class<T> cls, String database) {
        this.database = SimpleDatabase.get(database);
        this.persister = this.database.getObjectPersister(cls);
    }

    public void insert(T object) {
        persister.insert(object);
    }

    public void update(T object) {
        persister.update(object);
    }

    public void upsert(T object) {
        persister.upsert(object);
    }

    public void delete(T object) {
        persister.delete(object);
    }

    public T find(long id) {
        return persister.find(id);
    }

    public T find(String query, Object ... params) {
        return (T) persister.findWhere(query, params);
    }

    public List<T> all() {
        return persister.selectAll();
    }

    public List<T> from(String query, Object... params) {
        return persister.selectFrom(query, params);
    }

    public List<T> where(String query, Object ... params) {
        return persister.selectWhere(query, params);
    }

    public List<T> where(int from, int max, String query, Object ... params) {
        return persister.selectWhere(from, max, query, params);
    }

    public int count(String query, Object ... params) {
        return persister.selectCount(query, params);
    }

    public interface Executor<T> {
        void execute(SimpleDao<T> dao);
    }

    public void execute(Executor<T> executor) {
        if (database.transactionActive()) {
            executor.execute(this);
        } else {
            try {
                database.begin();

                executor.execute(this);

                database.commit();
            } finally {
                if (database.transactionActive()) {
                    database.rollback();
                }
            }
        }
    }

}