前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Hibernate 过滤器

Hibernate 过滤器

作者头像
Hongten
发布2018-09-18 09:58:52
5600
发布2018-09-18 09:58:52
举报
文章被收录于专栏:Hongten

Hibernate的过滤器类似Servlet的过滤器,对获取的数据进行过滤处理。

Hibernate的过滤器的过滤条件,需要配置在映射文件中。

通过调用Session对象的setFilter()和enableFilter()方法使用过滤器。

举个例子:比如我们通过Hibernate查询获取了1000条记录,那么我们可以通过设置好的过滤器,安装某些条件

进行过滤。最终获得满足这些条件的小于1000条的记录,如经过过滤我们得到了300条记录。这就是Hibernate过滤器的作用。

PS:当然我们也可以通过使用HQL语句实现我们需要的查询结果,但是使用Filter要方便一点,容易修改

现在我们来实际操作一下:

新建java project项目:chapter15_filter

Add Hibernate Capabilities

数据库表:

user:id ,username,password

profile:id,email,phone,mobil,address,postcode,user_id

POJO类

User.java  和 Profile.java

User.java

代码:

package com.b510.examples;

public class User implements java.io.Serializable {  private static final long serialVersionUID = -580528678939921966L;  private Integer id;  private String username;  private String password;  private Profile profile;

 public Profile getProfile() {   return profile;  }

 public void setProfile(Profile profile) {   this.profile = profile;  }

 public User() {  }

 public Integer getId() {   return this.id;  }

 public void setId(Integer id) {   this.id = id;  }

 public String getUsername() {   return this.username;  }

 public void setUsername(String username) {   this.username = username;  }

 public String getPassword() {   return this.password;  }

 public void setPassword(String password) {   this.password = password;  }

}

Profile.java

代码:

package com.b510.examples;

public class Profile implements java.io.Serializable {  private static final long serialVersionUID = -3961555762499504617L;  private Integer id;  private String email;  private String phone;  private String mobile;  private String address;  private String postcode;  private User user;

 public User getUser() {   return user;  }

 public void setUser(User user) {   this.user = user;  }

 public Profile() {  }

 public Integer getId() {   return this.id;  }

 public void setId(Integer id) {   this.id = id;  }

 public String getEmail() {   return this.email;  }

 public void setEmail(String email) {   this.email = email;  }

 public String getPhone() {   return this.phone;  }

 public void setPhone(String phone) {   this.phone = phone;  }

 public String getMobile() {   return this.mobile;  }

 public void setMobile(String mobile) {   this.mobile = mobile;  }

 public String getAddress() {   return this.address;  }

 public void setAddress(String address) {   this.address = address;  }

 public String getPostcode() {   return this.postcode;  }

 public void setPostcode(String postcode) {   this.postcode = postcode;  }

}

User.hbm.xml

代码:

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping>  <class name="com.b510.examples.User" table="user" catalog="users">   <id name="id" type="java.lang.Integer">    <column name="id" />    <generator class="increment" />   </id>     <property name="username" type="java.lang.String">    <column name="username" length="200" />   </property>   <property name="password" type="java.lang.String">    <column name="password" length="200" />   </property>   <one-to-one name="profile" class="com.b510.examples.Profile"></one-to-one>

<!--         使用过滤器   名字:nameFilter    -->  <filter name="nameFilter" condition="USERNAME=:inputName"></filter>  </class>

<!--         定义过滤器   名字:nameFilter    -->  <filter-def name="nameFilter" >   <filter-param name="inputName" type="java.lang.String"/>  </filter-def> </hibernate-mapping>

Profile.hbm.xml

代码:

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping>  <class name="com.b510.examples.Profile" table="profile" catalog="users">   <id name="id" type="java.lang.Integer">    <column name="id" />    <generator class="foreign">     <param name="property">user</param>    </generator>   </id>   <property name="email" type="java.lang.String">    <column name="email" length="200" />   </property>   <property name="phone" type="java.lang.String">    <column name="phone" length="20" />   </property>   <property name="mobile" type="java.lang.String">    <column name="mobile" length="20" />   </property>   <property name="address" type="java.lang.String">    <column name="address" length="200" />   </property>   <property name="postcode" type="java.lang.String">    <column name="postcode" length="20" />   </property>   <one-to-one name="user" class="com.b510.examples.User"></one-to-one>  </class> </hibernate-mapping>

测试代码:

HIbernateTest.java

代码:

/**  *  */ package com.b510.examples;

import java.util.List;

import org.hibernate.Filter; import org.hibernate.Query; import org.hibernate.Session;

/**  *  * @author XHW  *  * @date 2011-6-9  *  */ public class HibernateTest {

 public static void main(String[] args) {   new HibernateTest().useFilter();

 }  public void useFilter() {   Session session = HibernateSessionFactoryUtil.getSessionFactory()     .getCurrentSession();   session.beginTransaction();   String hql="from User where id between 1 and 50";   Query query=session.createQuery(hql);   Filter filter=session.enableFilter("nameFilter");   filter.setParameter("inputName", "hanyuan1");   List<User> list=query.list();   session.getTransaction().commit();   for(User user:list){    System.out.println("id:  "+user.getId()+" username:  "+user.getUsername());   }  } }

运行效果:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment). log4j:WARN Please initialize the log4j system properly. Hibernate:  select         user0_.id as id1_,         user0_.username as username1_,         user0_.password as password1_     from         users.user user0_     where         user0_.USERNAME=?         and (             user0_.id between 1 and 50         ) Hibernate:     select         profile0_.id as id0_2_,         profile0_.email as email0_2_,         profile0_.phone as phone0_2_,         profile0_.mobile as mobile0_2_,         profile0_.address as address0_2_,         profile0_.postcode as postcode0_2_,         user1_.id as id1_0_,         user1_.username as username1_0_,         user1_.password as password1_0_,         profile2_.id as id0_1_,         profile2_.email as email0_1_,         profile2_.phone as phone0_1_,         profile2_.mobile as mobile0_1_,         profile2_.address as address0_1_,         profile2_.postcode as postcode0_1_     from         users.profile profile0_     left outer join         users.user user1_             on profile0_.id=user1_.id     left outer join         users.profile profile2_             on user1_.id=profile2_.id     where         profile0_.id=? Hibernate:     select         profile0_.id as id0_2_,         profile0_.email as email0_2_,         profile0_.phone as phone0_2_,         profile0_.mobile as mobile0_2_,         profile0_.address as address0_2_,         profile0_.postcode as postcode0_2_,         user1_.id as id1_0_,         user1_.username as username1_0_,         user1_.password as password1_0_,         profile2_.id as id0_1_,         profile2_.email as email0_1_,         profile2_.phone as phone0_1_,         profile2_.mobile as mobile0_1_,         profile2_.address as address0_1_,         profile2_.postcode as postcode0_1_     from         users.profile profile0_     left outer join         users.user user1_             on profile0_.id=user1_.id     left outer join         users.profile profile2_             on user1_.id=profile2_.id     where         profile0_.id=? Hibernate:     select         profile0_.id as id0_2_,         profile0_.email as email0_2_,         profile0_.phone as phone0_2_,         profile0_.mobile as mobile0_2_,         profile0_.address as address0_2_,         profile0_.postcode as postcode0_2_,         user1_.id as id1_0_,         user1_.username as username1_0_,         user1_.password as password1_0_,         profile2_.id as id0_1_,         profile2_.email as email0_1_,         profile2_.phone as phone0_1_,         profile2_.mobile as mobile0_1_,         profile2_.address as address0_1_,         profile2_.postcode as postcode0_1_     from         users.profile profile0_     left outer join         users.user user1_             on profile0_.id=user1_.id     left outer join         users.profile profile2_             on user1_.id=profile2_.id     where         profile0_.id=? Hibernate:     select         profile0_.id as id0_2_,         profile0_.email as email0_2_,         profile0_.phone as phone0_2_,         profile0_.mobile as mobile0_2_,         profile0_.address as address0_2_,         profile0_.postcode as postcode0_2_,         user1_.id as id1_0_,         user1_.username as username1_0_,         user1_.password as password1_0_,         profile2_.id as id0_1_,         profile2_.email as email0_1_,         profile2_.phone as phone0_1_,         profile2_.mobile as mobile0_1_,         profile2_.address as address0_1_,         profile2_.postcode as postcode0_1_     from         users.profile profile0_     left outer join         users.user user1_             on profile0_.id=user1_.id     left outer join         users.profile profile2_             on user1_.id=profile2_.id     where         profile0_.id=? Hibernate:     select         profile0_.id as id0_2_,         profile0_.email as email0_2_,         profile0_.phone as phone0_2_,         profile0_.mobile as mobile0_2_,         profile0_.address as address0_2_,         profile0_.postcode as postcode0_2_,         user1_.id as id1_0_,         user1_.username as username1_0_,         user1_.password as password1_0_,         profile2_.id as id0_1_,         profile2_.email as email0_1_,         profile2_.phone as phone0_1_,         profile2_.mobile as mobile0_1_,         profile2_.address as address0_1_,         profile2_.postcode as postcode0_1_     from         users.profile profile0_     left outer join         users.user user1_             on profile0_.id=user1_.id     left outer join         users.profile profile2_             on user1_.id=profile2_.id     where         profile0_.id=? Hibernate:     select         profile0_.id as id0_2_,         profile0_.email as email0_2_,         profile0_.phone as phone0_2_,         profile0_.mobile as mobile0_2_,         profile0_.address as address0_2_,         profile0_.postcode as postcode0_2_,         user1_.id as id1_0_,         user1_.username as username1_0_,         user1_.password as password1_0_,         profile2_.id as id0_1_,         profile2_.email as email0_1_,         profile2_.phone as phone0_1_,         profile2_.mobile as mobile0_1_,         profile2_.address as address0_1_,         profile2_.postcode as postcode0_1_     from         users.profile profile0_     left outer join         users.user user1_             on profile0_.id=user1_.id     left outer join         users.profile profile2_             on user1_.id=profile2_.id     where         profile0_.id=? Hibernate:     select         profile0_.id as id0_2_,         profile0_.email as email0_2_,         profile0_.phone as phone0_2_,         profile0_.mobile as mobile0_2_,         profile0_.address as address0_2_,         profile0_.postcode as postcode0_2_,         user1_.id as id1_0_,         user1_.username as username1_0_,         user1_.password as password1_0_,         profile2_.id as id0_1_,         profile2_.email as email0_1_,         profile2_.phone as phone0_1_,         profile2_.mobile as mobile0_1_,         profile2_.address as address0_1_,         profile2_.postcode as postcode0_1_     from         users.profile profile0_     left outer join         users.user user1_             on profile0_.id=user1_.id     left outer join         users.profile profile2_             on user1_.id=profile2_.id     where         profile0_.id=? id:  6 username:  Hanyuan1 id:  7 username:  Hanyuan1 id:  8 username:  Hanyuan1 id:  9 username:  Hanyuan1 id:  10 username:  Hanyuan1 id:  11 username:  Hanyuan1 id:  12 username:  Hanyuan1

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2011-07-13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档