Hibernate-ORM:17.Hibernate中多表分页携带条件
Posted dawnchenxi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate-ORM:17.Hibernate中多表分页携带条件相关的知识,希望对你有一定的参考价值。
本次做个简单的多表带条件的分页,多对多,加多对一关联
1.三个实体类
1.1Admin
public class Admin { private Integer id; private Set<Notice> noticeSet=new <Notice>HashSet(); //get/set方法 }
1.2Notice通知
public class Notice { private int id;//流水好噢 private String texts;通知内容 private int readss;//是否查看 private Date notTime;//通知时间 private Set <Admin> adSet=new <Admin> HashSet();//和admin多对多 private Inform inform; //通知类型 //必须get/set方法 }
1.3Inform 通知类型
public class Inform { private int id; private String classify;//通知类型 //get/set方法 }
2.他们对应的hbm.xml文件
2.1Admin.hbm.xml
<set name="noticeSet" table="Ad_not"> <key column="a_id"></key> <many-to-many class="com.xy.model.Notice" column="n_id"></many-to-many> </set> <!--这是配置的多对多-->
2.2Inform.hbm.xml文件
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!--此处要改为你的包--> <class name="com.dawn.model.Inform" table="inform" catalog="homework"> <id name="id" type="java.lang.Integer"> <column name="id" /> <generator class="identity" /> </id> <property name="classify" type="java.lang.String"> <column name="classify" length="100" /> </property> </class> </hibernate-mapping>
2.3Notice.hbm.xml
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <!--包名需要注意一下--> <class name="com.dawn.model.Notice" table="notice" catalog="homework"> <id name="id" type="java.lang.Integer"> <column name="id"/> <generator class="identity" /> </id> <property name="texts" type="java.lang.String"> <column name="texts" length="1500"/> </property> <property name="readss" type="java.lang.Integer"> <column name="readss"/> </property> <property name="notTime" type="java.util.Date"> <column name="notTime"/> </property> <!-- 此处添加的是多对多的关系 新建一张表名为Ad_not示多对多关联关系--> <set name="adSet" table="Ad_not"> <!-- key写自己的表的 --> <key column="n_id"></key> <!-- many-to-many写关联的那张表的 --> <!--包名需要注意一下--> <many-to-many class="com.dawn.model.Admin" column="a_id"></many-to-many> </set> <!-- 此处是关联的inform表 name是本表字段名,class是关联类的确切全路径,列是表中对应的列 千万记得lazy=false,就是不懒加载,如果懒加载查询之后,条页面会报错--> <!--包名需要注意一下--> <many-to-one name="inform" class="com.dawn.model.Inform" column="informId" lazy="false"/> </class> </hibernate-mapping>
3.Hibernate在spring中的配置
3.1SessionFactory的配置
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.mysqlDialect </prop> <prop key="hibernate.show_sql">false</prop> <prop key="hibernate.hbm2ddl.auto">update</prop> <prop key="current_session_context_class">thread</prop> <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop> </props> </property> <property name="mappingResources"> <list> <value>com/dawn/model/Notice.hbm.xml</value> <value>com/dawn/model/Admin.hbm.xml</value> <value>com/dawn/model/Inform.hbm.xml</value> </list> </property>
3.2事务的配置,用aop的方式
<!-- xml方式事务的配置 --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" propagation="REQUIRED"/> </tx:attributes> </tx:advice> <aop:aspectj-autoproxy proxy-target-class="true" /> <aop:config> <!-- 记得修改自己的包名 --> <aop:pointcut id="allManagerMethod" expression="execution(* com.dawn.action.*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="allManagerMethod" /> </aop:config>
3.3dao层的注入
<!--DAO --> <!--修改包名--> <bean id="adminDAO" class="com.dawn.dao.imp.AdminDAOImp"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean> <!--修改包名--> <bean id="noticeDAO" class="com.dawn.dao.imp.NoticeDAOImp"> <property name="sessionFactory"> <ref bean="sessionFactory" /> </property> </bean>
4.daoImpl的使用
package com.dawn.dao.imp; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.SessionFactory; import com.dawn.dao.NoticeDAO; import com.dawn.model.Notice; import com.dawn.util.Page; public class NoticeDAOImp implements NoticeDAO{ private SessionFactory sessionFactory; public Session getSessionFactory() { return sessionFactory.getCurrentSession(); } public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } @Override //分页返回集合 public List<Notice> queryAll(Page page,int id) { String hql="from Notice n left outer join fetch n.adSet s where s.id=? "; Query query=getSessionFactory().createQuery(hql).setParameter(0,id); query.setFirstResult((page.getPageIndex()-1)*page.getPageSize()); List list=query.setMaxResults(page.getPageSize()).list(); return list; } //获取总数 public int pageAll(int id) { String hql="from Notice n left outer join fetch n.adSet s where s.id=?"; List list=getSessionFactory().createQuery(hql).setParameter(0,id).list(); list.size(); return list.size(); } }
以上是关于Hibernate-ORM:17.Hibernate中多表分页携带条件的主要内容,如果未能解决你的问题,请参考以下文章