一、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过滤器和拦截器的实现的更多相关文章

  1. 风炫安全WEB安全学习第二十三节课 利用XSS获取COOKIE

    风炫安全WEB安全学习第二十三节课 利用XSS获取COOKIE XSS如何利用 获取COOKIE 我们使用pikachu写的pkxss后台 使用方法: <img src="http:/ ...

  2. (转)SpringMVC学习(十二)——SpringMVC中的拦截器

    http://blog.csdn.net/yerenyuan_pku/article/details/72567761 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter, ...

  3. struts2动态调用+Servlet过滤器+struts2拦截器

    周末真的是懒到心慌...... 本文是在完整s2sh项目基础上添加的,不太了解s2sh项目构建的朋友可以先参考一下这几篇文章: eclipse环境下基于tomcat-7.0.82构建struts2项目 ...

  4. Struts2之过滤器和拦截器的区别

    刚学习Struts2这个框架不久,心中依然有一个疑惑未解那就是过滤器和拦截器的区别,相信也有不少人跟我一样对于这个问题没有太多的深入了解 那么下面我们就一起来探讨探讨 过滤器,是在java web中, ...

  5. Struts2 过滤器与拦截器

    学习Struts2时,发现有过滤器和拦截器,他们貌似都是一样的功能,但是为什么会有2个不同的名称呢?肯定是有区别的,所以打算自己整理一下. 过滤器,是在java web中,你传入的request,re ...

  6. springBoot之配置文件的读取以及过滤器和拦截器的使用

    前言 在之前的学习springBoot中,成功的实现了Restful风格的基本服务.但是想将之前的工程作为一个项目来说,那些是仅仅不够的.可能还需要获取自定义的配置以及添加过滤器和拦截器.至于为什么将 ...

  7. Servlet 过滤器、拦截器、监听器以及文件上传下载

    在学习之初,总是对过滤器.拦截器.监听器这三个搞不清楚,现在进行一些记录,方便大家交流,也为了提高自身的学习能力! 如果想要了解这三个的作用,首先对servlet流程进行熟悉了解,servlet是客户 ...

  8. springboot环境下配置过滤器和拦截器

    以前我们在配置过滤器和拦截器的时候,都是一个类继承一个接口,然后在xml中配置一下就ok 但是,但是,这是springboot的环境,没有xml的配置.所以我们还要继续学习啊啊啊啊啊~~~~~ 先简单 ...

  9. Struts2中过滤器和拦截器的区别

    拦截器和过滤器的区别: 1.拦截器是基于java的反射机制的,而过滤器是基于函数回调 2.过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3.拦截器只能对action请求起作用,而 ...

随机推荐

  1. 使用javac,手动编译一个java文件的方法

    参考<Tomcat与Java Web开发技术详解>中的命令: javac -classpath c:\tomcat\lib\servlet-api.jar                  ...

  2. AR实景购物强势来袭,华为nova3让你试完再买!

    没空买家具?没空挑壁纸? 浴盆挑了仨星期,还是老样子! 不敢下手买,没空往回退, 这样的生活,你说累不累! 别愁了, 按华为nova3说的办, 可省千元退货费! 刚刚过去的华为nova3发布会上,华为 ...

  3. Android Studio中查看类的继承关系

    查看类的继承关系的快捷键F4.在Android Studio经常使用快捷键这篇文章中.有写了.今天主要是讲一些关于这个快捷键出来的界面的一些配置.这块功能相对偏冷一些,可能非常多人都会用不到.可是关于 ...

  4. 解决ajax跨域问题的多种方法

    //第一种方法使用jsonp的方式 <script type="text/javascript" src="http://www.youxiaju.com/js/j ...

  5. GIS开发站点收藏

    Arcgis API for Silverlight ArcGIS API for Silverlight开发入门 C#开发ArcGIS

  6. PHP-Manual的学习----【语言参考】----【类型】-----【array数组】

    1.Array 数组  PHP 中的 数组 实际上是一个有序映射.映射是一种把 values 关联到 keys 的类型.此类型在很多方面做了优化,因此可以把它当成真正的数组,或列表(向量),散列表(是 ...

  7. spring mvc 伪静态处理

    spring mvc 伪静态处理 @RequestMapping(value = JsonUrlCommand.webshare_get_opuss+"/u{u:[\\w\\W]+}p{p: ...

  8. Bootstrap的js插件之轮播(carousel)

    轮播请查看下面演示样例.基本已经涵盖最经常使用的一个轮播 <!DOCTYPE html> <html lang="en"> <head> < ...

  9. Centos 安装libreoffice 生成office 报错信息见内容

    个人博客:https://blog.sharedata.info/ 错误信息:/opt/libreoffice5.2/program/soffice.bin: error while loading ...

  10. iOS 富文本类库RTLabel

      本文转载至 http://blog.csdn.net/duxinfeng2010/article/details/9004749  本节关于RTLable基本介绍,原文来自 https://git ...