getByProperty 查询优化

yun-zuoyi
wei.peng 5 years ago
parent 212dccad6c
commit fb65b042f0

@ -243,6 +243,9 @@ public interface BaseRepository <T, ID extends Serializable> extends JpaReposito
T getByProperty(String[] propertyNames, Object[] values);
@Deprecated
T getByPropertyPager(String[] propertyNames, Object[] values,Pager pager);
int listCount();
int findByPropertyCount(String propertyName, Object value);

@ -46,6 +46,8 @@ public class BaseRepositoryImpl<T, ID extends Serializable> extends SimpleJpaRep
private Class<T> persistentClass;
private SnowflakeIdMaker snowflakeIdMaker;
/* 默认查询数据条数 */
private static final Pager DEFAULT_PAGER = new Pager(0,10);
public BaseRepositoryImpl(Class<T> clz, EntityManager em, SnowflakeIdMaker snowflakeIdMaker) {
super(clz, em);
@ -506,10 +508,9 @@ public class BaseRepositoryImpl<T, ID extends Serializable> extends SimpleJpaRep
@Override
public T getByProperty(DdlPackBean packBean) {
try {
List<T> list = findByHqlWhere(packBean);
return list.size() != 0 ? list.get(0) : null;
List<T> list = findByHqlWherePage(packBean,DEFAULT_PAGER);
return list != null && list.size() != 0 ? list.get(0) : null;
}catch(NoResultException ne){
LOGGER.error("数据不存在DdlPackBean{}",packBean);
return null;
@ -521,21 +522,18 @@ public class BaseRepositoryImpl<T, ID extends Serializable> extends SimpleJpaRep
@Override
public T getByProperty(String propertyName, Object value) {
String queryString = "from " + persistentClass.getSimpleName() + " as model where model." + propertyName + "= :" + propertyName;
try {
List<T> list = entityManager.createQuery(queryString).setParameter(propertyName, value).getResultList();
return list.size() != 0 ? list.get(0) : null;
}catch(NoResultException ne){
LOGGER.error("数据不存在prop{},value{}",propertyName,value,ne);
return null;
}catch(NonUniqueResultException ex){
LOGGER.error("查询单条记录但出现多条。prop{},value{}",propertyName,value,ex);
throw new RuntimeException("存在多条记录:" + ex.getMessage());
}
return getByPropertyPager(new String[]{propertyName}, new Object[]{value}, DEFAULT_PAGER);
}
@Override
public T getByProperty(String[] propertyNames, Object[] values) {
return getByPropertyPager(propertyNames, values, DEFAULT_PAGER);
}
@Override
public T getByPropertyPager(String[] propertyNames, Object[] values, Pager pager) {
pager = pager == null ? DEFAULT_PAGER: pager;
if(propertyNames.length != values.length){
throw new IllegalArgumentException("参数名的数量和参数值不匹配!propertyNames:" + propertyNames.length + ",values:" + values.length);
}
@ -561,7 +559,10 @@ public class BaseRepositoryImpl<T, ID extends Serializable> extends SimpleJpaRep
}
try{
List<T> list = queryObject.getResultList();
List<T> list = queryObject
.setFirstResult(pager.getStartRow())
.setMaxResults(pager.getPageSize())
.getResultList();
return list.size() != 0 ? list.get(0) : null;
}catch(NoResultException ne){
LOGGER.error("数据不存在",ne);

Loading…
Cancel
Save