
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