spring 中HibernateTemplate的使用

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>


接着在dao层注入hibernatetemplate和crud操作,这里采用spring注解的方式注入


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蝶泳奈何桥.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值