好贷网好贷款

Hibernate中过滤器的使用

发布时间:2016-12-4 12:03:24 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"Hibernate中过滤器的使用",主要涉及到Hibernate中过滤器的使用方面的内容,对于Hibernate中过滤器的使用感兴趣的同学可以参考一下。

我们有一个Team实体,一个Student实体,他们之间的关系是1对多,Team中持有一个Student集合,如果我们不想检索出全部的student,而是希望检索符合一定条件的Student集合,可以使用HQL和Filter的方 数据库结构:   create table testStu (id varchar(32),name varchar(32),age int,team_id varchar(32));insert into teststu values("1","tom1",11,"1");insert into teststu values("2","tom2",12,"2");insert into teststu values("3","tom3",13,"1");insert into teststu values("4","tom4",14,"2");insert into teststu values("5","tom5",15,"1");insert into teststu values("6","tom6",16,"2");insert into teststu values("7","tom7",17,"1");insert into teststu values("8","tom8",18,"2");insert into teststu values("9","tom9",19,"1");insert into teststu values("10","tom10",20,"2");create table testteam (id varchar(32) primary key,name varchar(32));insert into testteam values("1","team1");insert into testteam values("2","team2");  POJO:   package Search.filter;public class TestStu ...{    private String id; //标识id    private String name; //学生姓名    private int age; //岁数    private TestTeam team;       public int getAge() ...{        return age;    }    public String getName() ...{        return name;    }    public void setId(String id) ...{        this.id = id;    }    public void setAge(int age) ...{        this.age = age;    }    public void setName(String stuName) ...{        this.name = stuName;    }    public String getId() ...{        return id;    }    public TestStu() ...{ //无参的构造函数    }    public TestTeam getTeam() ...{        return team;    }    public void setTeam(TestTeam team) ...{        this.team = team;    }}package Search.filter;import java.util.Set;public class TestTeam ...{   private String id;   private String name;   private Set students;public String getId() ...{    return id;}public void setId(String id) ...{    this.id = id;}public String getName() ...{    return name;}public void setName(String name) ...{    this.name = name;}public Set getStudents() ...{    return students;}public void setStudents(Set students) ...{    this.students = students;}}   Hibernate.cfg.xml   <?xml version='1.0' encoding='UTF-8'?><!DOCTYPE hibernate-configuration PUBLIC          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"          "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><!-- Generated by MyEclipse Hibernate Tools.                   --><hibernate-configuration><session-factory>    <property name="connection.username">root</property>    <property name="connection.url">        jdbc:mysql://localhost:3306/schoolproject?characterEncoding=gb2312&amp;useUnicode=true    </property>    <property name="dialect">        org.hibernate.dialect.MySQLDialect    </property>    <property name="myeclipse.connection.profile">mysql</property>    <property name="connection.password">1234</property>    <property name="connection.driver_class">        com.mysql.jdbc.Driver    </property>    <property name="hibernate.dialect">        org.hibernate.dialect.MySQLDialect    </property>    <property name="hibernate.show_sql">true</property>    <property name="current_session_context_class">thread</property>    <mapping resource="Search/filter/TestStu.hbm.xml" />    <mapping resource="Search/filter/TestTeam.hbm.xml" /></session-factory></hibernate-configuration>   TestStu.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"><!--     Mapping file autogenerated by MyEclipse - Hibernate Tools--><hibernate-mapping package="Search.fetch" >       <class name="Search.filter.TestStu" table="teststu" lazy="true">       <id name="id" column="id" unsaved-value="null">         <generator class="uuid.hex"></generator>       </id>       <property name="name" column="name"></property>       <property name="age" column="age"></property>       <many-to-one name="team" column="team_id">       </many-to-one>      </class></hibernate-mapping>   TestTeam.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"><!--     Mapping file autogenerated by MyEclipse - Hibernate Tools--><hibernate-mapping><class name="Search.filter.TestTeam" table="testteam" lazy="true">    <id name="id" column="id" unsaved-value="null">        <generator class="uuid.hex"></generator>    </id>    <property name="name" column="name" type="string"></property>    <set name="students" inverse="true" lazy="true" fetch="select">      <key column="team_id"></key>      <one-to-many class="Search.filter.TestStu"/>           <filter name="stuFilter" condition="age>:age"/>    </set> </class>    <!-- 定义配置的filter --> <filter-def name="stuFilter">   <filter-param name="age" type="java.lang.Integer"/> </filter-def></hibernate-mapping>   实现方式有三种 (1)HQL条件检索(2)使用编码式过滤器createFilter(),注意,第一个参数必须是持久化的集合,第二个参数是过滤条件(3)使用hbm配置文件中的配置filter这样team.getStudent()返回的直接就是经过过滤的集合   package Search.filter;import java.io.File;import java.util.Iterator;import java.util.Set;import org.hibernate.Filter;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.Transaction;import org.hibernate.cfg.Configuration;public class Test ...{    public static void main(String[] args)...{        String filePath=System.getProperty("user.dir")+File.separator+"src/Search/filter"+File.separator+"hibernate.cfg.xml";        File file=new File(filePath);        SessionFactory sessionFactory=new Configuration().configure(file).buildSessionFactory();        Session session=sessionFactory.openSession();        Transaction t=(Transaction)session.beginTransaction();                /**//*         * 目标:查询年龄在15岁以上的学生         */        //方法1:使用HQL条件查询//        TestTeam team=(TestTeam)session.get(TestTeam.class, "1");//        Query query=session.createQuery("from TestStu s where s.team=:team and s.age>:age");//        query.setParameter("team",team,Hibernate.entity(TestTeam.class));//        //或者使用query.setEntity("team",team);//        query.setParameter("age", 15);//        List list=query.list();//        System.out.println(list.size());//        for (Iterator iterator = list.iterator(); iterator.hasNext();) {//            TestStu object = (TestStu) iterator.next();//            System.out.println(object.getAge());//        }                //方法1:使用集合过滤//        TestTeam team=(TestTeam)session.get(TestTeam.class, "1");//        //createFilter的第一个参数必须为持久化的对象//        Query query=session.createFilter(team.getStudents(), "where this.age>?");//        query.setParameter(0,15);//        List list=query.list();//        for (Iterator iterator = list.iterator(); iterator.hasNext();) {//            TestStu object = (TestStu) iterator.next();//            System.out.println(object.getAge());//        }        //方法1:使用hbm配置过滤器        TestTeam team=(TestTeam)session.get(TestTeam.class, "1");        Filter f=session.enableFilter("stuFilter");        f.setParameter("age",new Integer(15));        Set list=team.getStudents();        for (Iterator iterator = list.iterator(); iterator.hasNext();) ...{            TestStu object = (TestStu) iterator.next();            System.out.println(object.getAge());        }        t.commit();    }}

上一篇:如何在网址前面显示个性图标?(比如csdn的博客网址)
下一篇:正龙拍虎

相关文章

相关评论