package com.jaeson.springstudy.dao.impl; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate4.HibernateCallback; import org.springframework.orm.hibernate4.HibernateTemplate; import org.springframework.stereotype.Repository; import com.jaeson.hibernatestudy.bean.Student; import com.jaeson.springstudy.dao.StudentDao; @Repository("hibernateTemplateStudentDao") public class HibernateTemplateStudentDaoImpl implements StudentDao { private HibernateTemplate hibernateTemplate; @Autowired public void setSessionFactory(SessionFactory sessionFactory) { this.hibernateTemplate = new HibernateTemplate(sessionFactory); } @Override public Student findById(String id) { return this.hibernateTemplate.load(Student.class, id); } @Override public List<Student> findByQueryString(final String queryString, final Object... params) { return this.hibernateTemplate.execute(new HibernateCallback<List<Student>>() { @SuppressWarnings("unchecked") @Override public List<Student> doInHibernate(Session session) { Query query = session.createQuery(queryString); for (int i = 0; params != null && i < params.length; i++) { query.setParameter(i, params[i]); } return query.list(); } }); } @Override public void update(Student entity) { this.hibernateTemplate.update(entity); } @Override public String save(Student entity) { return (String) this.hibernateTemplate.save(entity); } @Override public void saveOrUpdate(Student entity) { this.hibernateTemplate.saveOrUpdate(entity); } @Override public void delete(Student entity) { this.hibernateTemplate.delete(entity); } @Override public void deleteById(String id) { this.delete(this.findById(id)); } @Override public void studentMethod() { throw new UnsupportedOperationException("studentMethod unsupported"); } @Override public List<Student> findByClassid(String id) { return this.findByQueryString("from Student s where s.clazz.id=?", new Object[]{id}); } }
package com.jaeson.springstudy.dao.impl; import java.util.List; import org.hibernate.Criteria; import org.hibernate.HibernateException; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.criterion.Restrictions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.orm.hibernate4.SessionFactoryUtils; import org.springframework.orm.hibernate4.support.HibernateDaoSupport; import org.springframework.stereotype.Repository; import com.jaeson.hibernatestudy.bean.Student; import com.jaeson.springstudy.dao.StudentDao; @Repository("hibernateDaoSupportStudentDao") public class HibernateDaoSupportStudentDaoImpl extends HibernateDaoSupport implements StudentDao { @Autowired public void setMySessionFactory(SessionFactory sessionFactory) { super.setSessionFactory(sessionFactory); } @Override public Student findById(String id) { return this.getHibernateTemplate().load(Student.class, id); } @SuppressWarnings("unchecked") @Override public List<Student> findByQueryString(String queryString, Object... params) { Session session = this.currentSession(); try { Query query = session.createQuery(queryString); for (int i = 0; params != null && i < params.length; i++) { query.setParameter(i, params[i]); } return query.list(); } catch (HibernateException ex) { throw SessionFactoryUtils.convertHibernateAccessException(ex); } } @Override public void update(Student entity) { this.getHibernateTemplate().update(entity); } @Override public String save(Student entity) { return (String) this.getHibernateTemplate().save(entity); } @Override public void saveOrUpdate(Student entity) { this.getHibernateTemplate().saveOrUpdate(entity); } @Override public void delete(Student entity) { this.getHibernateTemplate().delete(entity); } @Override public void deleteById(String id) { this.delete(this.findById(id)); } @Override public void studentMethod() { throw new UnsupportedOperationException("studentMethod unsupported"); } @SuppressWarnings("unchecked") @Override public List<Student> findByClassid(String id) { Criteria criteria = this.currentSession().createCriteria(Student.class); criteria.add(Restrictions.eq("clazz.id", id)); return criteria.list(); } }