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

com.invms.x.builders.EntityBuilder Maven / Gradle / Ivy

package com.invms.x.builders;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
import com.invms.x.utils.DaoUtils;

/**
 * 实体构造器
 */
@SuppressWarnings("unchecked")
public class EntityBuilder {
	/**
	 * 实体管理器
	 */
	private EntityManager entityManager;

	/**
	 * 获取实体管理器
	 * 
	 * @return 返回实体管理器
	 */
	public EntityManager getEntityManager() {
		return entityManager;
	}

	/**
	 * 设置实体管理器
	 * 
	 * @param entityManager
	 *            实体管理器
	 */
	public void setEntityManager(EntityManager entityManager) {
		this.entityManager = entityManager;
	}

	/**
	 * 开始事务
	 * 
	 * @return 返回事务
	 */
	public EntityTransaction beginTransaction() {
		EntityTransaction transaction = entityManager.getTransaction();
		if (!transaction.isActive()) {
			transaction.begin();
		}
		return transaction;
	}

	/**
	 * 关闭连接
	 */
	public void close() {
		entityManager.close();
	}

	/**
	 * 同步数据
	 */
	public void flush() {
		entityManager.flush();
	}

	/**
	 * 刷新实体
	 * 
	 * @param 
	 *            实体类型
	 * @param entity
	 *            实体
	 * @return 返回结果实体
	 */
	public  TEntity refresh(TEntity entity) {
		entityManager.refresh(entity);
		return entity;
	}

	/**
	 * 插入实体
	 * 
	 * @param 
	 *            实体类型
	 * @param entity
	 *            实体
	 * @return 返回结果实体
	 */
	public  TEntity insert(TEntity entity) {
		entityManager.persist(entity);
		return entity;
	}

	/**
	 * 批量插入实体
	 * 
	 * @param 
	 *            实体类型
	 * @param entities
	 *            实体
	 * @return 返回结果实体
	 */
	public  List inserts(TEntity... entities) {
		return inserts(Arrays.asList(entities));
	}

	/**
	 * 批量插入数据
	 * 
	 * @param 
	 *            实体类型
	 * @param entities
	 *            实体
	 * @return 返回结果实体
	 */
	public  List inserts(Iterable entities) {
		List results = new ArrayList();
		for (TEntity item : entities) {
			results.add(insert(item));
		}
		return results;
	}

	/**
	 * 更新实体
	 * 
	 * @param 
	 *            实体类型
	 * @param entity
	 *            实体
	 * @return 返回结果实体
	 */
	public  TEntity update(TEntity entity) {
		return entityManager.merge(entity);
	}

	/**
	 * 批量更新实体
	 * 
	 * @param 
	 *            实体类型
	 * @param entities
	 *            实体
	 * @return 返回结果实体
	 */
	public  List updates(TEntity... entities) {
		return updates(Arrays.asList(entities));
	}

	/**
	 * 批量更新实体
	 * 
	 * @param 
	 *            实体类型
	 * @param entities
	 *            实体
	 * @return 返回结果实体
	 */
	public  List updates(Iterable entities) {
		List results = new ArrayList();
		for (TEntity item : entities) {
			results.add(update(item));
		}
		return results;
	}

	/**
	 * 删除实体
	 * 
	 * @param 
	 *            实体类型
	 * @param entity
	 *            实体
	 * @return 返回结果实体
	 */
	public  TEntity delete(TEntity entity) {
		entityManager.remove(entityManager.merge(entity));
		return entity;
	}

	/**
	 * 批量删除实体
	 * 
	 * @param 
	 *            实体类型
	 * @param entities
	 *            实体
	 * @return 返回结果实体
	 */
	public  List deletes(TEntity... entities) {
		return deletes(Arrays.asList(entities));
	}

	/**
	 * 批量删除实体
	 * 
	 * @param 
	 *            实体类型
	 * @param entities
	 *            实体
	 * @return 返回结果实体
	 */
	public  List deletes(Iterable entities) {
		List results = new ArrayList();
		for (TEntity item : entities) {
			results.add(delete(item));
		}
		return results;
	}

	/**
	 * 清除实体
	 * 
	 * @param entityClass
	 *            实体类型
	 * @param query
	 *            查询语句
	 * @param args
	 *            查询参数
	 * @return 返回清除数量
	 */
	public long clear(Class entityClass, String query, Object... args) {
		String hql = DaoUtils.buildDeleteHql(entityClass, query);
		Query hqlQuery = createQuery(null, entityClass, hql, args);
		return hqlQuery.executeUpdate();
	}

	/**
	 * 创建查询
	 * 
	 * @param resultClass
	 *            结果类型
	 * @param entityClass
	 *            实体类型
	 * @param query
	 *            查询语句
	 * @param args
	 *            查询参数
	 * @return 返回查询
	 */
	public Query createQuery(Class resultClass, Class entityClass, String query, Object... args) {
		String hql = DaoUtils.buildSimpleHql(entityClass, query);
		hql = DaoUtils.buildParamIndex(hql);
		Query hqlQuery;
		if (resultClass == null || resultClass.equals(entityClass)) {
			hqlQuery = entityManager.createQuery(hql);
		} else {
			hqlQuery = entityManager.createQuery(hql, resultClass);
		}
		hqlQuery = DaoUtils.setParameters(hqlQuery, args);
		return hqlQuery;
	}

	/**
	 * 创建原生查询
	 * 
	 * @param resultClass
	 *            结果类型
	 * @param entityClass
	 *            实体类型
	 * @param query
	 *            查询语句
	 * @param args
	 *            查询参数
	 * @return 返回原生查询
	 */
	public Query createNativeQuery(Class resultClass, Class entityClass, String query, Object... args) {
		String sql = DaoUtils.buildSimpleSql(entityClass, query);
		sql = DaoUtils.buildParamIndex(sql);
		Query sqlQuery;
		if (resultClass == null || resultClass.equals(entityClass)) {
			sqlQuery = entityManager.createNativeQuery(sql);
		} else {
			sqlQuery = entityManager.createNativeQuery(sql, resultClass);
		}
		sqlQuery = DaoUtils.setParameters(sqlQuery, args);
		return sqlQuery;
	}

	/**
	 * 查询实体
	 * 
	 * @param 
	 *            结果类型
	 * @param resultClass
	 *            结果类型
	 * @param entityClass
	 *            实体类型
	 * @param query
	 *            查询语句
	 * @param args
	 *            查询参数
	 * @return 返回结果实体
	 */
	public  List select(Class resultClass, Class entityClass, String query, Object... args) {
		Query hqlQuery = createQuery(resultClass, entityClass, query, args);
		List list = hqlQuery.getResultList();
		if (list == null) {
			list = new ArrayList();
		}
		return list;
	}

	/**
	 * 分页查询实体
	 * 
	 * @param 
	 *            结果类型
	 * @param resultClass
	 *            结果类型
	 * @param entityClass
	 *            实体类型
	 * @param query
	 *            查询语句
	 * @param index
	 *            开始索引
	 * @param count
	 *            查询数量
	 * @param args
	 *            查询查收
	 * @return 返回结果实体
	 */
	public  List selectRange(Class resultClass, Class entityClass, String query, long index, long count, Object... args) {
		Query hqlQuery = createQuery(resultClass, entityClass, query, args);
		if (index >= 0) {
			hqlQuery = hqlQuery.setFirstResult((int) index);
		}
		if (count > 0) {
			hqlQuery = hqlQuery.setMaxResults((int) count);
		}
		List list = hqlQuery.getResultList();
		if (list == null) {
			list = new ArrayList();
		}
		return list;
	}

	/**
	 * 查询单个实体
	 * 
	 * @param 
	 *            结果类型
	 * @param resultClass
	 *            结果类型
	 * @param entityClass
	 *            实体类型
	 * @param query
	 *            查询语句
	 * @param args
	 *            查询参数
	 * @return 返回结果实体
	 */
	public  TResult selectSingle(Class resultClass, Class entityClass, String query, Object... args) {
		List result = selectRange(resultClass, entityClass, query, 0, 1, args);
		if (result.size() > 0) {
			return result.get(0);
		}
		return null;
	}

	/**
	 * 查询实体数量
	 * 
	 * @param entityClass
	 *            实体类型
	 * @param query
	 *            查询语句
	 * @param args
	 *            查询参数
	 * @return 返回实体数量
	 */
	public long selectCount(Class entityClass, String query, Object... args) {
		String hql = DaoUtils.buildCountHql(entityClass, query);
		Query hqlQuery = createQuery(Long.class, entityClass, hql, args);
		Long result = (Long) hqlQuery.getSingleResult();
		if (result == null) {
			return 0;
		}
		return result.longValue();
	}

	/**
	 * 是否存在实体
	 * 
	 * @param entityClass
	 *            实体类型
	 * @param query
	 *            查询语句
	 * @param args
	 *            查询参数
	 * @return 返回是否存在实体
	 */
	public boolean selectExist(Class entityClass, String query, Object... args) {
		long count = selectCount(entityClass, query, args);
		return count != 0;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy