/***
* CREATED BY: kaiser
* DATE: 2018/5/27
* INFO: 子类必须重写getSessionFactory方法
*/
public class BaseDaoImpl implements BaseDao
{
private Class clazz;
@Autowired
HibernateSessionFactory sessionFactory;
@SuppressWarnings("unchecked")
public BaseDaoImpl()
{
ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
Type[] actualTypeArguments = type.getActualTypeArguments();
clazz = (Class) type.getActualTypeArguments()[0];
}
@Override
public int insert(T entity)
{
getSessionFactory().getCurrentSession().save(entity);
return 0;
}
@Override
public int update(T entity)
{
getSessionFactory().getCurrentSession().update(entity);
return 0;
}
@Override
public int deleteById(Serializable id)
{
T entity = selectById(id);
getSessionFactory().getCurrentSession().delete(entity);
return 0;
}
@Override
public int delete(T entity)
{
getSessionFactory().getCurrentSession().delete(entity);
return 0;
}
@SuppressWarnings("unchecked")
@Override
public T selectById(Serializable id)
{
return (T) getSessionFactory().getCurrentSession().get(clazz, id);
}
@Override
public Collection selectAll()
{
// return sessionFactory.getCurrentSession().createQuery("from ")
this.getClazzName();
return null;
}
@SuppressWarnings("unchecked")
@Override
public Collection selectByHql(String hql,
Object[] params)
{
Query query = getSessionFactory().getCurrentSession()
.createQuery(hql);
if (params != null)
{
for(int i = 0; i < params.length; i++)
{
query.setParameter(i, params[i]);
}
}
return query.list();
}
@SuppressWarnings("unchecked")
@Override
public List selectByNativeSql(String sql,
Object[] params)
{
Query query = getSessionFactory().getCurrentSession()
.createSQLQuery(sql);
if (params != null)
{
for(int i = 0; i < params.length; i++)
{
query.setParameter(i, params[i]);
}
}
return query.list();
}
@SuppressWarnings("unchecked")
@Override
public Collection selectByNativeSql(String sql,
LinkedList params)
{
Query query = getSessionFactory().getCurrentSession().createSQLQuery(sql);
if (params != null)
{
for(int i = 0; i < params.size(); i++)
{
query.setParameter(i, params.get(i));
}
}
return query.list();
}
@Override
public List selectByNativeSql(String sql,
LinkedList params,
Class clazz)
{
SQLQuery query = getSessionFactory().getCurrentSession().createSQLQuery(sql);
if (params != null)
{
for(int i = 0; i < params.size(); i++)
{
query.setParameter(i, params.get(i));
}
}
query.addEntity(clazz);
return query.list();
}
@SuppressWarnings("unchecked")
@Override
public Collection selectByPage(String hql,
int pageNo,
int pageSize)
{
return getSessionFactory().getCurrentSession().createQuery(hql)
.setFirstResult((pageNo - 1) * pageSize)
.setMaxResults(pageSize)
.list();
}
@SuppressWarnings("unchecked")
@Override
public PageInfo> selectByPage(String hql,
LinkedList params,
int pageNo,
int pageSize)
{
Query query = getSessionFactory().getCurrentSession()
.createQuery(hql);
if (params != null)
{
for(int i = 0; i < params.size(); i++)
{
query.setParameter(i, params.get(i));
}
}
ScrollableResults scroll = query.scroll();
scroll.last();
query.setFirstResult(pageNo);
query.setMaxResults(pageSize);
PageInfo> pageInfo = new PageInfo>(pageNo, pageSize, scroll.getRowNumber() + 1, query.list());
return pageInfo;
}
@SuppressWarnings("unchecked")
@Override
public PageInfo selectByNativeSqlAndPage(String sql,
LinkedList params,
Class clazz,
int pageNo,
int pageSize)
{
Query query = getSessionFactory().getCurrentSession()
.createSQLQuery(sql)
.addEntity(clazz);
if (params != null)
{
for(int i = 0; i < params.size(); i++)
{
query.setParameter(i, params.get(i));
}
}
ScrollableResults scroll = query.scroll();
scroll.last();
query.setFirstResult(pageNo);
query.setMaxResults(pageSize);
PageInfo pageInfo = new PageInfo(pageNo, pageSize, scroll.getRowNumber() + 1, query.list());
return pageInfo;
}
private String getClazzName()
{
System.out.println(this.clazz.getName());
return this.clazz.getName();
}
public void clearDataSourceType()
{
DataSourceContextHolder.clearDataSourceType();
}
protected SessionFactory getSessionFactory()
{
return null;
}
}