zoukankan      html  css  js  c++  java
  • Hibernate 过滤器

    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

  • 相关阅读:
    最近。。。。。。。。。。。
    SQLServer中 多行合成一行 的方法.
    操作Excel
    minheight和height
    提高网页效率的14条准则
    IE和FireFox的Javascript的事件和事件处理总结
    id和class到底要用哪一个?
    XML.parentNode 与 parentElement 的说明
    window.event 对象详解
    padding和margin到底要用哪一个?
  • 原文地址:https://www.cnblogs.com/hongten/p/2104823.html
Copyright © 2011-2022 走看看