struts2-spring-hibernate整合之hibernate的BaseDaompl

public class BaseDaoImpl<T> extends HibernateDaoSupport implements IBaseDao<T> {

private Class<T> entity;

@Override  //初始化的時候執行,拿到超類的全類名
protected void initDao() throws Exception {
ParameterizedType parameterizedType = (ParameterizedType)this.getClass().getGenericSuperclass();

Type[] types = parameterizedType.getActualTypeArguments();

entity = (Class<T>)types[0];
}

//初始化的時候執行,拿到超類的全類名,也可以在構造器裏執行
// public BaseDaoImpl(){
// ParameterizedType parameterizedType = (ParameterizedType)this.getClass().getGenericSuperclass();
//
// Type[] types = parameterizedType.getActualTypeArguments();
//
// entity = (Class<T>)types[0];
// }


// Dao層裏注入sessionFactory
@Autowired
@Override
protected HibernateTemplate createHibernateTemplate(SessionFactory sessionFactory) {
HibernateTemplate hibernateTemplate = super.createHibernateTemplate(sessionFactory);
setHibernateTemplate(hibernateTemplate);
return hibernateTemplate;
}

/**
* 生成hql語句
*/
private String getUpdateHql(T t) {
Field[] declaredFields = entity.getDeclaredFields();
StringBuffer buffer = new StringBuffer();
buffer.append("update ").append(entity.getSimpleName()).append(" set ");
Integer id = null;
for (Field field : declaredFields) {
try {
field.setAccessible(true);
String name = field.getName();
Object value = field.get(t);
if("id".equals(name)){
id=Integer.parseInt(value.toString());
continue;
}
if(value!=null){
if(value instanceof String){
buffer.append(name).append(" = ").append("'").append(value).append("'").append(",");
}else {
buffer.append(name).append(" = ").append(value).append(",");
}
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}

}
int lastIndexOf = buffer.lastIndexOf(",");
String hqlPrefix = buffer.substring(0,lastIndexOf);
String  updateHql = hqlPrefix.concat(" where id = "+id);
return updateHql;
}


public int add(T t) {
return Integer.parseInt(getHibernateTemplate().save(t).toString());
}


public int update(T t) {
String hql = getUpdateHql(t);//根據t拿到更新的hql
return getHibernateTemplate().bulkUpdate(hql);
}


public T getById(Integer id) {
return  getHibernateTemplate().get(entity, id);
}


public int delete(Integer id) {
getHibernateTemplate().bulkUpdate("delete from "+entity.getSimpleName()+" where id=?",id);
return 0;
}


public int getCount() {
return getHibernateTemplate().execute(new HibernateCallback<Integer>() {
public Integer doInHibernate(Session session) throws HibernateException, SQLException {
Query query = session.createQuery("select count(t) from "+entity.getSimpleName()+" t");
Long  count = (Long)query.uniqueResult();
return count.intValue();
}
});
}


public List<T> getList(Integer startIndex, Integer size) {
try {
return getHibernateTemplate().findByExample(entity.newInstance(), startIndex, size);
} catch (DataAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}


}
發佈了48 篇原創文章 · 獲贊 6 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章