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请求起作用,而 ...
随机推荐
- 《TomCat与Java Web开发技术详解》(第二版) 第四章节的学习总结--常用Servlet API
要开发Servlet,自然要掌握常用的servlet的相关API.通过此章节的学习,了解到如下常用API 1.Servlet接口--->GenericServlet抽象类(实现Servlet接口 ...
- mongodb 安装及使用
https://www.cnblogs.com/shileima/p/7823434.html
- 从零开始学android -- notification通知
目前有三种通知 第一种是普通通知 看看效果 布局什么的太简单了我就不放在上面了给你们看核心的代码就行了 里面的 int notificationID = 1; //设置点击通知后的意图 Inten ...
- github 答题
头脑王者 / 百万英雄 / 冲顶大会 / 芝士超人 自动答题:https://github.com/cxs1994/python_answer 头脑王者:https://github.com/sear ...
- Robbery(记忆化搜索)
Robbery Inspector Robstop is very angry. Last night, a bank has been robbed and the robber has not b ...
- 九度OJ 1202:排序 (排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:19711 解决:6508 题目描述: 对输入的n个数进行排序并输出. 输入: 输入的第一行包括一个整数n(1<=n<=100). ...
- hdoj 1455 Sticks 【dfs】
题意:找最短的木棍可以组成的长度, hdoj 1518 的加强版 代码: #include <stdio.h> #include <string.h> #include &l ...
- ABAP xml
[转]Part 1 - Expressiveness of Simple TransformationsSimple Transformations are a SAP proprietary pro ...
- QT发布的EXE打包压缩成单文件
Enigma virtual box 是免费的软件虚拟化工具,它可以将多个文件封装到您的应用程序主文件,这样您的软件就可以制作成为单文件的绿色软件. enigma virtual box 支持所有类型 ...
- Data Structure Array: Find the two numbers with odd occurrences in an unsorted array
http://www.geeksforgeeks.org/find-the-two-numbers-with-odd-occurences-in-an-unsorted-array/ #include ...