Struts2+hibernate+spring 已经搭建好了
我现在想写一个抽象的类实现 增删改查的操作。@Transactional
public abstract class DaoSupport implements DAO { @Resource
private SessionFactory sessionFactory;
@Override
public void delete(long id) {
// TODO Auto-generated method stub } @Override
public Object getObject(long id) {
// TODO Auto-generated method stub
return null;
} @Override
public List<Object> getObjects() {
// TODO Auto-generated method stub
return null;
} @Override
public void save(Object obj) { sessionFactory.getCurrentSession().persist(obj); } @Override
public void update(Object obj) {
// TODO Auto-generated method stub }
}但是在删除多条记录的时候,delete方法做不到我想通过泛型的方式封装这个类,我泛型不太会用,请高手帮我修改一下上面的代码,通过泛型实现 谢谢!
我现在想写一个抽象的类实现 增删改查的操作。@Transactional
public abstract class DaoSupport implements DAO { @Resource
private SessionFactory sessionFactory;
@Override
public void delete(long id) {
// TODO Auto-generated method stub } @Override
public Object getObject(long id) {
// TODO Auto-generated method stub
return null;
} @Override
public List<Object> getObjects() {
// TODO Auto-generated method stub
return null;
} @Override
public void save(Object obj) { sessionFactory.getCurrentSession().persist(obj); } @Override
public void update(Object obj) {
// TODO Auto-generated method stub }
}但是在删除多条记录的时候,delete方法做不到我想通过泛型的方式封装这个类,我泛型不太会用,请高手帮我修改一下上面的代码,通过泛型实现 谢谢!
只是类型转换一下而已
public void deleteMore(List list) {
for(int i = 0;i<list,size();i++){
//获取list里面存的对象。Entity为你的实体类。
Entity entity = (Entity)List.get(i);
int id = entity.getId();
//后面执行就可以了
}
}
用泛型不过少了类型转换而已
public void deleteMore(List<Entity> list) {
for(int i = 0;i<list,size();i++){
//获取list里面存的对象。Entity为你的实体类。
Entity entity = List.get(i);
int id = entity.getId();
//后面执行就可以了
}
}
public abstract class DaoSupport implements DAO {
/**
* 注入实体管理器
*/
@PersistenceContext protected EntityManager em;
//AOP
//EntityManager em = 实体赋值;
//打开事务
public <T> void delete(Class<T> entityClass,Object entityId) {
Object[] entityIds = new Object[]{entityId};
delete(entityClass, entityIds);
} public <T> void delete(Class<T> entityClass,Object[] entityIds) {
for(Object id : entityIds)
{
em.remove(em.getReference(entityClass, id));
}
} /**
* 不需要开启事务
*/
@Transactional(readOnly=true,propagation=Propagation.NOT_SUPPORTED)
public <T> T find(Class<T> entityClass, Object entityId) {
// TODO Auto-generated method stub
return em.find(entityClass, entityId);
} public void save(Object entity) {
em.persist(entity);
} public void update(Object entity) {
em.merge(entity);
}
/**
* 获取实体的名称
* @param <T>
* @param entityClass 实体类
* @return
*/
protected <T> String getEntityName(Class<T> entityClass)
{
String entityName=entityClass.getSimpleName();
Entity entity=entityClass.getAnnotation(Entity.class);
if(entity.name()!=null && !"".equals(entity.name()))
{
entityName=entity.name();
}
return entityName;
}
}
我看了这个代码是 用泛型实现的,但不是hibernate,是用JPA实现的。我想要的就是这个结果。
整体删除
public void delete(List<object> list) {
getHibernateTemplate.deleteAll(list);
}楼主既然用了泛型List<Obejct>还是换成List<删除的对象名>
@SuppressWarnings("unchecked")
public class SimpleHibernateDao<T, PK extends Serializable> {
Logger logger = Logger.getLogger(SimpleActionSupport.class.getName());
@Autowired
protected SessionFactory sessionFactory; protected Class<T> entityClass; public SimpleHibernateDao(final Class<T> entityClass) {
this.entityClass = entityClass;
} public Session getSession() {
return sessionFactory.getCurrentSession();
} public SessionFactory getSessionFactory() {
return sessionFactory;
} /**
* 保存新增或修改的对象.
*/
public void save(final T entity) {
Assert.notNull(entity, "entity不能为空");
getSession().saveOrUpdate(entity);
} /**
* 删除对象.
*
* @param entity 对象必须是session中的对象或含id属性的transient对象.
*/
public void delete(final T entity) {
Assert.notNull(entity, "entity不能为空");
getSession().delete(entity);
} /**
* 按id删除对象.
*/
public void delete(final PK id) {
Assert.notNull(id, "id不能为空");
delete(get(id));
} /**
* 按id获取对象.
*/
public T get(final PK id) {
Assert.notNull(id, "id不能为空");
return (T) getSession().load(entityClass, id);
} /**
* 获取全部对象.
*/
public List<T> getAll() {
return find();
} /**
* 获取全部对象,支持排序.
*/
public List<T> getAll(String orderBy, boolean isAsc) {
Criteria c = createCriteria();
if (isAsc) {
c.addOrder(Order.asc(orderBy));
} else {
c.addOrder(Order.desc(orderBy));
}
return c.list();
}.....
每个DAO只要继续这个类就可以了,例如,现在有一个Users表,对应的类有User.java,UserDao.java
那么,在UserDao中,需要如果定义public class UserDao extends SimpleHibernateDao<User,Long>{ public UserDao() {
super(User.class);
}
}