All Downloads are FREE. Search and download functionalities are using the official Maven repository.

panda.dao.entity.EntityDao Maven / Gradle / Ivy

Go to download

Panda Core is the core module of Panda Framework, it contains commonly used utility classes similar to apache-commons.

There is a newer version: 1.8.0
Show newest version
package panda.dao.entity;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

import panda.dao.Dao;
import panda.dao.DaoClient;
import panda.dao.DaoIterator;
import panda.dao.DatabaseMeta;
import panda.dao.query.Query;
import panda.lang.Texts;



/**
 * @param  entity type
 */
public class EntityDao {
	//--------------------------------------------------------------
	private final Dao dao;
	private final Entity entity;

	/**
	 * @param dao dao
	 * @param type entity type
	 */
	public EntityDao(Dao dao, Class type) {
		this(dao, type, null);
	}
	
	/**
	 * @param dao dao
	 * @param type entity type
	 * @param param parameter used for dynamic table
	 */
	public EntityDao(Dao dao, Class type, Object param) {
		this.dao = dao;
		Entity en = dao.getEntity(type);
		if (param != null && isNeedCopyEntity(en)) {
			Entity sen = new Entity(en);
			sen.setTable(Texts.translate(sen.getTable(), param));
			sen.setView(Texts.translate(sen.getView(), param));
			for (EntityField ef : en.getFields()) {
				if (ef.hasDefaultValue()) {
					ef.setDefaultValue(Texts.translate(ef.getDefaultValue(), param));
				}
			}
			this.entity = sen;
		}
		else {
			this.entity = en;
		}
	}

	private boolean isNeedCopyEntity(Entity en) {
		if (en.getTable().indexOf('$') >= 0) {
			return true;
		}
		if (en.getView().indexOf('$') >= 0) {
			return true;
		}
		
		for (EntityField ef : en.getFields()) {
			if (ef.hasDefaultValue() && ef.getDefaultValue().indexOf('$') >= 0) {
				return true;
			}
		}
		return false;
	}
	
	/**
	 * @return the DaoClient
	 */
	public DaoClient getDaoClient() {
		return dao.getDaoClient();
	}

	/**
	 * @return datease meta
	 */
	public DatabaseMeta meta() {
		return dao.meta();
	}

	public Dao getDao() {
		return dao;
	}

	public Entity getEntity() {
		return entity;
	}

	//-------------------------------------------------------------------------
	/**
	 * drop a table if exists
	 */
	public void drop() {
		dao.drop(entity);
	}

	//-------------------------------------------------------------------------
	/**
	 * create table
	 */
	public void create() {
		dao.create(entity);
	}

	//-------------------------------------------------------------------------
	/**
	 * check a table exists in the data store.
	 * 
	 * @return true if the record or the table exists in the data store
	 */
	public boolean exists() {
		return dao.exists(entity);
	}

	/**
	 * check a record exists in the data store.
	 * if the keys is not supplied, then check the table existence.
	 * 
	 * @param keys record keys (int, string or java bean with keys)
	 * @return true if the record or the table exists in the data store
	 */
	public boolean exists(Object ... keys) {
		return dao.exists(entity, keys);
	}

	/**
	 * check a record exists in the data store.
	 * if the query is not supplied, then check the table existence.
	 * 
	 * @param query WHERE conditions
	 * @return true if the record or the table exists in the data store
	 */
	public boolean exists(Query query) {
		return dao.exists(query);
	}

	//-------------------------------------------------------------------------
	/**
	 * get a record by the supplied keys
	 * 
	 * @param keys record keys (int, string or java bean with keys)
	 * @return the record object
	 */
	public T fetch(Object ... keys) {
		return dao.fetch(entity, keys);
	}

	/**
	 * get a record by the supplied query
	 * 
	 * @param query WHERE conditions
	 * @return record
	 */
	public T fetch(Query query) {
		return dao.fetch(query);
	}

	//-------------------------------------------------------------------------
	/**
	 * count all records.
	 * 
	 * @return record count
	 */
	public long count() {
		return dao.count(entity);
	}

	/**
	 * count records by the supplied query.
	 * 
	 * @param query WHERE conditions
	 * @return record count
	 */
	public long count(Query query) {
		return dao.count(query);
	}

	//-------------------------------------------------------------------------
	/**
	 * select all records.
	 * 
	 * @return record list
	 */
	public List select() {
		return dao.select(entity);
	}

	/**
	 * select records by the supplied query.
	 * if query is null then select all records.
	 * 
	 * @param query WHERE conditions, order, offset, limit and filters
	 * @return record list
	 */
	public List select(Query query) {
		return dao.select(query);
	}

	/**
	 * select all records.
	 * 
	 * @return data iterator
	 */
	public DaoIterator iterate() {
		return dao.iterate(entity);
	}

	/**
	 * select records by the supplied query.
	 * 
	 * @param query WHERE conditions, order, offset, limit and filters
	 * @return data iterator
	 */
	public DaoIterator iterate(Query query) {
		return dao.iterate(query);
	}

	//--------------------------------------------------------------------
	/**
	 * select all records to collection.
	 * 
	 * @param coll the collection to store the value
	 * @param prop The property to be used as the value in the collection.
	 * @return the record object collection
	 */
	public Collection coll(Collection coll, String prop) {
		return dao.coll(coll, entity, prop);
	}

	/**
	 * select records by the supplied query.
	 * if query is null then select all records.
	 * 
	 * @param coll the collection to store the value
	 * @param prop The property to be used as the value in the collection.
	 * @param query WHERE conditions, order, offset, limit and filters
	 * @return the record object collection
	 */
	public Collection coll(Collection coll, Query query, String prop) {
		return dao.coll(coll, query, prop);
	}

	//--------------------------------------------------------------------
	/**
	 * select all records to list.
	 * 
	 * @param prop The property to be used as the value in the list.
	 * @return record value list
	 */
	public List list(String prop) {
		return dao.list(entity, prop);
	}

	/**
	 * select records by the supplied query.
	 * if query is null then select all records.
	 * 
	 * @param prop The property to be used as the value in the list.
	 * @param query WHERE conditions, order, offset, limit and filters
	 * @return record value list
	 */
	public List list(Query query, String prop) {
		return dao.list(query, prop);
	}

	//--------------------------------------------------------------------
	/**
	 * select all records to set.
	 * 
	 * @param prop The property to be used as the value in the set.
	 * @return record value set
	 */
	public Set set(String prop) {
		return dao.set(entity, prop);
	}

	/**
	 * select records by the supplied query.
	 * if query is null then select all records.
	 * 
	 * @param prop The property to be used as the value in the set.
	 * @param query WHERE conditions, order, offset, limit and filters
	 * @return record value set
	 */
	public Set set(Query query, String prop) {
		return dao.set(query, prop);
	}

	//--------------------------------------------------------------------
	/**
	 * select all records to map.
	 * 
	 * @param keyProp The property to be used as the key in the Map.
	 * @return record map
	 */
	public Map map(String keyProp) {
		return dao.map(entity, keyProp);
	}

	/**
	 * select records by the supplied query.
	 * if query is null then select all records.
	 * 
	 * @param keyProp The property to be used as the key in the Map.
	 * @param query WHERE conditions, order, offset, limit and filters
	 * @return record map
	 */
	public Map map(Query query, String keyProp) {
		return dao.map(query, keyProp);
	}

	//--------------------------------------------------------------------
	/**
	 * select all records to map.
	 * 
	 * @param keyProp The property to be used as the key in the Map.
	 * @param valProp The property to be used as the value in the Map.
	 * @return record map
	 */
	public Map map(String keyProp, String valProp) {
		return dao.map(entity, keyProp, valProp);
	}

	/**
	 * select records by the supplied query.
	 * if query is null then select all records.
	 * 
	 * @param keyProp The property to be used as the key in the Map.
	 * @param valProp The property to be used as the value in the Map.
	 * @param query WHERE conditions, order, offset, limit and filters
	 * @return record map
	 */
	public Map map(Query query, String keyProp, String valProp) {
		return dao.map(query, keyProp, valProp);
	}

	//--------------------------------------------------------------------
	/**
	 * select all records to map.
	 * 
	 * @param keyProp The property to be used as the key in the Map.
	 * @param valProp The property to be used as the value in the Map.
	 * @return record group
	 */
	public Map> group(String keyProp, String valProp) {
		return dao.group(entity, keyProp, valProp);
	}

	/**
	 * select records by the supplied query.
	 * if query is null then select all records.
	 * 
	 * @param keyProp The property to be used as the key in the Map.
	 * @param valProp The property to be used as the value in the Map.
	 * @param query WHERE conditions, order, offset, limit and filters
	 * @return record group
	 */
	public Map> group(Query query, String keyProp, String valProp) {
		return dao.group(query, keyProp, valProp);
	}

	//-------------------------------------------------------------------------
	/**
	 * delete a object.
	 * 
	 * @param obj object to be deleted
	 * @return deleted count
	 */
	public int delete(T obj) {
		return dao.delete(obj);
	}

	/**
	 * delete object collection
	 * 
	 * @param col object collection to be deleted
	 * @return deleted count
	 */
	public int deletes(Collection col) {
		return dao.deletes(col);
	}

	/**
	 * delete records by the supplied keys.
	 * if the supplied keys is null, all records will be deleted.
	 * 
	 * @param keys a record contains key property or composite keys
	 * @return deleted count
	 */
	public int delete(Object ... keys) {
		return dao.delete(entity, keys);
	}

	/**
	 * delete records by the supplied query
	 * 
	 * @param query WHERE conditions
	 * @return deleted count
	 */
	public int deletes(Query query) {
		return dao.deletes(query);
	}

	//-------------------------------------------------------------------------
	/**
	 * insert a record.
	 * 

* a '@Id' field will be set after insert. * set '@Id(auto=false)' to disable retrieving the primary key of the newly inserted row. *

* the '@Prep("SELECT ...")' sql will be executed before insert. *

* the '@Post("SELECT ...")' sql will be executed after insert. * * @param obj the record to be inserted * @return the inserted record */ public T insert(T obj) { return dao.insert(entity, obj); } /** * insert record collections. *

* a '@Id' field will be set after insert. * set '@Id(auto=false)' to disable retrieving the primary key of the newly inserted row. *

* the '@Prep("SELECT ...")' sql will be executed before insert. *

* the '@Post("SELECT ...")' sql will be executed after insert. * * @param col the record collection to be inserted * @return the inserted record collection */ public Collection inserts(Collection col) { return dao.inserts(entity, col); } //------------------------------------------------------------------------- /** * insert the object if not exists, * or update the record by the object. * * @param obj object * @return the saved record */ public T save(T obj) { return dao.save(obj); } //------------------------------------------------------------------------- /** * update a record by the supplied object and fields. * * @param obj sample object * @param fields the fields to update * @return updated count */ public int update(T obj, String... fields) { return dao.update(obj, fields); } /** * update a record by the supplied object and fields. * * @param obj sample object * @param fields the fields to update * @return updated count */ public int update(T obj, Collection fields) { return dao.update(obj, fields); } /** * update a record by the supplied object. * the null properties will be ignored. * * @param obj sample object * @return updated count */ public int updateIgnoreNull(T obj) { return dao.updateIgnoreNull(obj); } /** * update records by the supplied object collection. * * @param col record collection * @return updated count */ public int updatesIgnoreNull(Collection col) { return dao.updatesIgnoreNull(col); } /** * update records by the supplied object collection and fields. * * @param col record collection * @param fields the fields to update * @return updated count */ public int updates(Collection col, String... fields) { return dao.updates(col, fields); } /** * update records by the supplied object collection and fields. * * @param col record collection * @param fields the fields to update * @return updated count */ public int updates(Collection col, Collection fields) { return dao.updates(col, fields); } /** * update records by the supplied object and query * * @param obj sample object * @param query where condition and update fields filter * @return updated count */ public int updates(T obj, Query query) { return dao.updates(obj, query); } /** * update records by the supplied object and query. * the null properties will be ignored. * * @param obj sample object * @param query where condition and update fields filter * @return updated count */ public int updatesIgnoreNull(T obj, Query query) { return dao.updatesIgnoreNull(obj, query); } //------------------------------------------------------------------------- /** * execute a transaction * @param transaction the runnable transaction */ public void exec(Runnable transaction) { dao.exec(transaction); } /** * execute a transaction * @param transaction the runnable transaction * @param level transaction level */ public void exec(Runnable transaction, int level) { dao.exec(transaction, level); } //------------------------------------------------------------------------- /** * commit a transaction */ public void commit() { dao.commit(); } /** * rollback a transaction */ public void rollback() { dao.rollback(); } /** * check the identity value * @param id identity * @return true if id != null && id != 0 */ public boolean isValidIdentity(Object id) { return dao.isValidIdentity(id); } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy