Hibernate学习---第十三节:hibernate过滤器和拦截器的实现
一、hibernate 过滤器
1、在持久化映射文件中配置过滤器,代码如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="learn.hibernate.bean">
<!-- 定义过滤器,并指定参数 -->
<filter-def name="password_filter">
<filter-param name="ps" type="integer"/>
<filter-param name="ps2" type="integer"/>
</filter-def> <class name="Person" table="t_person">
<id name="id" column="person_id">
<generator class="native"/>
</id>
<property name="name" column="t_name"/>
<property name="age"/>
<property name="passwork"/>
<property name="birthday"/>
<filter name="password_filter" condition="password between :ps and :ps2"/>
</class>
</hibernate-mapping>
2、测试过滤器:
@Test
public void testQuery(){
// 启用指定名称对应的过滤器
Filter filter = session.enableFilter("password_filter");
// 过滤器参数绑定(过滤条件的绑定)
filter.setParameter("ps", 123458);
filter.setParameter("ps2", 123464);
Query query = session.createQuery("from Person");
List<Person> list = query.list();
for(Person p : list){
System.out.println(p);
} System.out.println("--------------------------");
// 停用指定的过滤器
// 如果在一个有开启开启过滤器的 session 中进行对应的持久化类的查询操作都会自动加上过滤条件
// session.disableFilter("password_filter");
Query query2 = session.createQuery("from Person where id in (:ids)");
query2.setParameter("ids", new Object[]{4,5});
List<Person> list2 = query2.list();
for(Person p : list2){
System.out.println(p);
} System.out.println("--------------------------");
// 通过以下实验证明过滤器只是加在 create* 方法上
session.clear();
Person person = (Person)session.get(Person.class, 6);
System.out.println(person);
}
二、hibernate 拦截器
1、写一个继承 EmptyInterceptor 类实现相关的方法,代码如下:
package learn.hibernate.interceptor; import java.io.Serializable;
import java.util.Arrays;
import java.util.Date; import learn.hibernate.bean.Person; import org.hibernate.EmptyInterceptor;
import org.hibernate.type.Type; /**
* 自定义拦截器
* 在执行某个动作之前或之后加一个自己的业务操作
* @author Administrator
*
*/
public class MyInterceptor extends EmptyInterceptor{ @Override
public boolean onSave(Object entity, Serializable id, Object[] state,
String[] propertyNames, Type[] types) {
System.out.println("-------------拦截保存-------------");
System.out.println("entity:"+entity);
System.out.println("id:"+id);
System.out.println("state:"+Arrays.toString(state));
System.out.println("propertyNames:"+Arrays.toString(propertyNames));
System.out.println("types:"+Arrays.toString(types)); if(entity.getClass() == Person.class){
for(int i = 0, len = propertyNames.length; i < len; i++){
if(propertyNames[i].equals("birthday")){
if(state[i]==null){
Person p = (Person) entity;
p.setBirthday(new Date());
}
}
}
} return super.onSave(entity, id, state, propertyNames, types);
}
}
以上的类实现了 EmptyInterceptor 类的 onSave() 方法,也就是说在保存数据的时候调用该方法可做相关的拦截
2、测试类代码如下:
/**
* 批量写入数据
*/
@Test
public void testAdd(){
// 开启拦截器(局部拦截器)
session = factory.withOptions().interceptor(new MyInterceptor()).openSession();
tx = session.beginTransaction(); Person person = new Person("admin", 22, 123456, null);
session.persist(person); tx.commit();
}
Hibernate学习---第十三节:hibernate过滤器和拦截器的实现的更多相关文章
- 风炫安全WEB安全学习第二十三节课  利用XSS获取COOKIE
		
风炫安全WEB安全学习第二十三节课 利用XSS获取COOKIE XSS如何利用 获取COOKIE 我们使用pikachu写的pkxss后台 使用方法: <img src="http:/ ...
 - (转)SpringMVC学习(十二)——SpringMVC中的拦截器
		
http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...
 - struts2动态调用+Servlet过滤器+struts2拦截器
		
周末真的是懒到心慌...... 本文是在完整s2sh项目基础上添加的,不太了解s2sh项目构建的朋友可以先参考一下这几篇文章: eclipse环境下基于tomcat-7.0.82构建struts2项目 ...
 - Struts2之过滤器和拦截器的区别
		
刚学习Struts2这个框架不久,心中依然有一个疑惑未解那就是过滤器和拦截器的区别,相信也有不少人跟我一样对于这个问题没有太多的深入了解 那么下面我们就一起来探讨探讨 过滤器,是在java web中, ...
 - Struts2 过滤器与拦截器
		
学习Struts2时,发现有过滤器和拦截器,他们貌似都是一样的功能,但是为什么会有2个不同的名称呢?肯定是有区别的,所以打算自己整理一下. 过滤器,是在java web中,你传入的request,re ...
 - springBoot之配置文件的读取以及过滤器和拦截器的使用
		
前言 在之前的学习springBoot中,成功的实现了Restful风格的基本服务.但是想将之前的工程作为一个项目来说,那些是仅仅不够的.可能还需要获取自定义的配置以及添加过滤器和拦截器.至于为什么将 ...
 - Servlet 过滤器、拦截器、监听器以及文件上传下载
		
在学习之初,总是对过滤器.拦截器.监听器这三个搞不清楚,现在进行一些记录,方便大家交流,也为了提高自身的学习能力! 如果想要了解这三个的作用,首先对servlet流程进行熟悉了解,servlet是客户 ...
 - springboot环境下配置过滤器和拦截器
		
以前我们在配置过滤器和拦截器的时候,都是一个类继承一个接口,然后在xml中配置一下就ok 但是,但是,这是springboot的环境,没有xml的配置.所以我们还要继续学习啊啊啊啊啊~~~~~ 先简单 ...
 - Struts2中过滤器和拦截器的区别
		
拦截器和过滤器的区别: 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 2.过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3.拦截器只能对action请求起作用,而 ...
 
随机推荐
- Duang,HUAWEI DevEco IDE全面升级啦
			
想感受全新UI带来的视觉及交互体验. HiKey970开发板调测. HiAI API推荐和收藏. 深度AI模型分析等新功能, 体验高清晰度和流畅度的远程AI真机调测吗? 全新的UI设计 采用最优秀的视 ...
 - k8s调度-指定node
			
1.给node加标签 kubectl label nodes k8s-slave2 slave= 2.查看标签 [root@k8s_master centos7]# kubectl describe ...
 - SecureCRT 设置字体跟颜色
			
SecureCRT 绝佳配色方案, 保护你的眼睛 分类: Linux 软件使用2013-05-17 08:45 24038人阅读 评论(11) 收藏 举报 SecureCRT 绝佳配色方案, 保护你的 ...
 - 网络流合集:bzoj1433,1934,1854 题解
			
转载请注明:http://blog.csdn.net/jiangshibiao/article/details/23992205 网络流/二分图大合集 [NO.1*原题] 1433: [ZJOI200 ...
 - PHP-Manual的学习----【语言参考】----【类型】-----【NULL】
			
2017年8月24日11:34:061.特殊的 NULL 值表示一个变量没有值.NULL 类型唯一可能的值就是 NULL. 2.在下列情况下一个变量被认为是 NULL: ◦ 被赋值为 NULL. ◦ ...
 - Linux 技巧:让进程在后台运行的可靠方法
			
原文链接:http://www.ibm.com/developerworks/cn/linux/l-cn-nohup/ 想让进程在断开连接后依然保持运行?如果该进程已经开始运行了该如何补救? 如果有大 ...
 - Ant自己主动编译打包&公布 android项目
			
Eclipse用起来尽管方便,可是编译打包android项目还是比較慢,尤其将应用打包公布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我们自己主动编译打包了 ...
 - gridControl使用集锦
			
1.grid控件默认选择一行时,focused的cell并不是蓝色的,而是白色的 要想实现一次选择一行全都是蓝色的只要改一个属性就可以了 this.gridView1.OptionsSelection ...
 - c_str()方法使用
			
语法: const char *c_str(); c_str()函数返回一个指向正规C字符串的指针常量, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过 ...
 - springMVC的注释集合
			
SpringMVC的工作原理 主要核心实现是DispatcherServlet. 一般来讲客户端对服务器发送请求,是由DispatcherServlet控制的,DispatcherServlet接受到 ...