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;
}


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值