Hibernate的拦截器与监听器_使用SQL_命名查询

拦截器与监听器_使用SQL_命名查询 
 
拦截器与监听事件

  拦截器与事件都是hibernate的扩展机制

  Interceptor接口是老的实现机制

现在改成事件监听机制;  他们都是hibernate的回调接口,hibernate在save,delete,update…等会回调这些类。

 

事件设置

一、 根据要监听的事件,继承相应的接口,如SaveOrUpdateEventListener,DeleteEventListener。

SaveListener.java

package com.dwt1220;

import org.hibernate.HibernateException;
import org.hibernate.event.SaveOrUpdateEvent;
import org.hibernate.event.SaveOrUpdateEventListener;


public class SaveListener  implements SaveOrUpdateEventListener  {

	private static final long serialVersionUID = 7850872147039358837L;

	public void onSaveOrUpdate(SaveOrUpdateEvent event)
			throws HibernateException {
		if(event.getObject() instanceof com.dwt1220.User){
			User user=(User) event.getObject();
			System.out.println("--------"+user.getName().getFirstName());
		}

	}

}

二、hibernate.cfg.xml 中在配置Listener

在hibernate.cfg.xml中添加

 

		<event type="save">
			<listener class="com.dwt1220.SaveListener" />
			<listener class="org.hibernate.event.def.DefaultSaveEventListener"/>
		</event>

※listener配置的顺序,就是执行的顺序

※当自己配置了listener时,会把默认的覆盖掉。所以,配置时,要加上默认的Listener

 
使用SQL
使用,实现了Query 接口的类,
	public List sql() {
		Session session = HibernateUtil.getSession();
		/*****
		 * 返回的是 List<Object> Query
		 * query=session.createSQLQuery("select * from user")
		 * 要在之后添加.addEntity(User.class);
		 *********************/
		Query query = session.createSQLQuery("select * from user").addEntity(
				User.class);
		List<User> users = query.list();
		for (User user : users) {
			System.out.println(user.getName());
		}
		return users;
	}

 
命名查询
User.hbm.xml ,类的映射文件中,添加 <query>,<sql-query>设置

 

<query> 中填写的是 HQL <sql-query> 中填写的是SQL

这两个标签可以写在 <class>里面,也可以写在外面,如果写在<class>里面的话,Query query=session.getNamedQuery("getUserByBirthday");时就需要把包名,类名和别名都写上。

	<query name="getUserByBirthday">
		<![CDATA[from User where birthday=:birthday]]>
	</query>


类中使用。

	public List namedQuery(Date date) {
		Session session = HibernateUtil.getSession();
		//如果<query>标签写在<class>标签中的话,参数要全名
		//Query query=session.getNamedQuery("com.dwt1220.User.getUserByBirthday");
		Query query=session.getNamedQuery("getUserByBirthday");
		query.setDate("birthday", date);
		return query.list();
	}



 

你可能感兴趣的:(sql,Hibernate,session,Interceptor,user,query)