hibernatetemplate使得开发的效率得到很到的提升,只需要传进实体就可以,不许要在写那么多sql语句,加上泛型编程,开发效率那是大大滴啊
一下介绍一些hibernatetemplate的curd操作,hibernate结合泛型编程和复杂的联合查询后面会提到……
spring配置hibernateTemplate
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="packagesToScan">
<list>
<value>com.will.model</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</prop>
<!-- <prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.format_sql">true</prop> -->
</props>
</property>
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:advice id="txAdvice" transaction-manager="txManager">
<tx:attributes>
<tx:method name="test*" propagation="REQUIRED" />
<tx:method name="save*" propagation="REQUIRED" />
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="modify*" propagation="REQUIRED" />
<tx:method name="find*" propagation="NOT_SUPPORTED"
read-only="true" />
</tx:attributes>
</tx:advice>
<!-- 配置事务过滤 -->
<aop:config>
<aop:pointcut id="methodPointcut"
expression="execution(public * com.bjsxt.registration.service.*.*(..))" />
<aop:advisor pointcut-ref="methodPointcut" advice-ref="txAdvice" />
</aop:config>
@Repository("userDao")
public class UserDaoImpl implements UserDao {
private HibernateTemplate hibernateTemplate;
@Resource(name="hibernateTemplate")
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
// save(Object entity):保存新的实例
public void save(User u) {
this.hibernateTemplate.save(u);
}
// void delete(Object entity):删除指定持久化实例
public void delete(User u) {
this.hibernateTemplate.delete(u);
}
// deleteAll(Collection entities):删除集合内全部持久化类实例
public void deleteAll(List<User> list) {
this.hibernateTemplate.deleteAll(list);
}
// find(String queryString):根据HQL查询字符串来返回实例集合
@SuppressWarnings("unchecked")
public List<User> findUsers1() {
String hql = "from User";
return (List<User>) this.hibernateTemplate.find(hql);
}
// find(String hql, Object value);跟句一个条件查询返回实例集合
@SuppressWarnings("unchecked")
public List<User> findUser2(String firstname) {
String hql = "from User u where u.firstname like ?";
return (List<User>) this.hibernateTemplate.find(hql, firstname);
}
// find(String hql, Object []values);根据多个条件查询返回实例集合
@SuppressWarnings("unchecked")
public List<User> findUser3(String firstname, String lastname) {
String hql = "from User u where u.firstname=? and u.lastname=?";
return (List<User>) this.hibernateTemplate.find(hql, new Object[] {
firstname, lastname });
}
// get(Class entityClass, Serializable id):根据主键加载特定持久化类的实例
public User getById(int id) {
return (User) this.hibernateTemplate.get(User.class, id);
}
// update(Object entity):更新实例的状态,要求entity是持久状态
public void update(User u) {
this.hibernateTemplate.update(u);
}
// saveOrUpdate(Object entity):根据实例状态,选择保存或者更新
public void saveOrUpdate(User u) {
this.hibernateTemplate.saveOrUpdate(u);
}
// 多表查询
@SuppressWarnings("rawtypes")
public List getJoin() {
String hql = "select u.id,u.firstname,u.lastname,c.id,c.firstname,c.lastname from User u , Cat c where u.lastname=c.lastname";
return this.hibernateTemplate.find(hql);
}
@SuppressWarnings("rawtypes")
public List findBySomeParameter(final String hql, final List parameter) {
// TODO Auto-generated method stub
Object result = this.hibernateTemplate.execute(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
// TODO Auto-generated method stub
Query query = session.createQuery(hql);
if (parameter != null) {
for (int i = 0; i < parameter.size(); i++) {
query.setParameter(i, parameter.get(i));
}
}
return query.list();
}
});
return (List) result;
}
@SuppressWarnings("unchecked")
public List getUsers() {
final String sql = "select u.id,u.firstname,c.lastname from user u right join cat c on u.lastname=c.lastname order by u.id desc";
List list = this.hibernateTemplate.executeFind(new HibernateCallback() {
public Object doInHibernate(Session session)
throws HibernateException, SQLException {
// TODO Auto-generated method stub
Query query = session.createSQLQuery(sql).setResultTransformer(
Transformers.aliasToBean(test.class));
return query.list();
}
});
return list;
}
}