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请求起作用,而 ...
随机推荐
- CIA 读书笔记
对此书的评价只有八个字:粗制滥造,到处粘贴. 对于通过表情识别人情绪的教程,最好要有图,图很重要,也最好有案例.
- Modern.IE,创建现代网站的给力开发工具!
Modern.IE是微软推出的用来帮助开发者创建现代网站的基本开发工具.作为Web攻城师,最头疼的问题莫过于浏览器兼容性测试,各种类型浏览器,各种版本的浏览器,还有各种头疼的前缀等等.Modern.I ...
- JQuery不能加载click事件的问题
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- hibernate 注解之 SequenceGenerator
hibernate 注解之 SequenceGenerator https://blog.csdn.net/zgf19930504/article/details/54694807 JPA @Id 和 ...
- java getResourcesAsStream()如何获取WEB-INF下的文件流
getResourcesAsStream()来读取.properties文件,但是getResourcesAsStream()仅在java项目时能获取根目录的文件: 在web项目中,getResour ...
- Laravel手记:执行route:cache时报LogicException
laravel5的路由支持缓存.需要执行以下命令: php artisan route:cache 执行完毕后,报出以下错误: Route cache cleared! [LogicException ...
- MySQL复制经常使用拓扑结构具体解释
复制的体系结构有下面一些基本原则: (1) 每一个slave仅仅能有一个master: (2) 每一个slave仅仅能有一个唯一的serverID: (3) 每一个master能够有 ...
- Linux服务器性能日志收集和分析脚本(转)
最近老大要求分析服务器的性能数据,找到服务器运行的性能瓶颈,结果花了两天时间,写了两个脚本可以生成日志并可以进行数据提取,最终生成数据可以放到excel生成报表.过程中也学到了不少shell编程技术. ...
- lua(简单的传参)
#include <iostream> #include <string.h> extern "C" { /*头文件lua.h定义了Lua提供的基础函数,包 ...
- Collecting Bugs (概率dp)
Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other material stu ...