拦截器与监听器_使用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();
}