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();
    } 

}

原文地址:https://www.cnblogs.com/DawnCHENXI/p/9237976.html

时间: 2024-11-13 09:45:50

Hibernate-ORM:17.Hibernate中多表分页携带条件的相关文章

Hibernate ORM框架——Hibernate查询

MySQL数据库-------------------------------------------------- use demo; select * from CLASSINFO; select * from persons; delete from CLASSINFO; delete from persons; insert into CLASSINFO values('c111','banji1'); insert into CLASSINFO values('c222','banji

django项目中的ajax分页和条件查询。

1,路由 #主页面路由 re_path('article/article_list/', article.article_list,name='article/article_list/'), #分页面路由 re_path('article/list_part/', article.list_part,name='article/list_part/'), 2,前端主页面html #引用的js <script src="/static/jQuery-1.8.2.min.js"&g

hibernate中删除表遇到主键被外键引用违反完整约束条件不能删除的问题

MySQL在InnoDB中设置了foreign key关联,造成无法更新或删除数据.可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况.  SET FOREIGN_KEY_CHECKS = 0; 删除完成后设置 SET FOREIGN_KEY_CHECKS = 1;  其他: 关闭唯一性校验 set unique_checks=0; set unique_checks=1; 扩展: hibernate和Oracle两方不能同时处理数据完整性.解决方法如下: (方法1)将数据完整性

Hibernate之ORM与Hibernate

ORM: ORM是 Object /Relation Mapping,对象/关系数据库映射. 目前比较流行的编程语言,如java ,c#等,它们都是面向对象的编程语言,而目前比较主流的数据库产品,如Oracle,DB2则是关系型数据库.编程语言与底层数据库之间的 这种不协调,催生出了ORM框架.ORM框架可看做是编程语言和数据库之间的桥梁. 当我们采用ORM框架之后,应用程序不再直接访问底层数据库,而是以面向对象的方式操作持久化对象(例如对象的创建,对象的修改,对象的删除),而ORM框架则将这

使用Spring整合Hibernate,并实现对数据表的增、删、改、查的功能

1.1 问题 使用Spring整合Hibernate,并实现资费表的增.删.改.查. 1.2 方案 Spring整合Hibernate的步骤: 1.3 步骤 实现此案例需要按照如下步骤进行. 采用的环境是eclipse ,jdk 7.0 ,Tomcat7.0 ,Spring 3.2  ,Hibernate 3.2 . 步骤一:导包 创建WEB项目SpringHibernate,并导入数据库驱动包.Hibernate开发包以及Spring开发包,完成后项目中包结构如下图 然后,增加到类编译中. H

Spring Boot + JPA(hibernate 5) 开发时,数据库表名大小写问题

这几天在用spring boot开发项目, 在开发的过程中遇到一个问题hibernate在执行sql时,总会提示表不存在. 寻找之后发现, 建表时,表统一采用了大写.hibernate会把大写统一转换成小写.且 mysql在 linux下 大小写敏感. 解决: 1. 尝试修改mysql的cnf文件,改成不区分大小写.修改完成之后发现问题并没有解决,还产生了新的问题,表名无论大小写都失败了. 2. 数据库层面修改没有效果, 表结构和表名不能修改,那只能通过代码实现来解决此问题了. 先感谢  三个博

eclipse从数据库逆向生成Hibernate实体类(eclipse中反向生成hibernate实体类+jpa注释)

eclipse从数据库逆向生成Hibernate实体类 做项目必然要先进行数据库表设计,然后根据数据库设计建立实体类(VO),这是理所当然的,但是到公司里做项目后,让我认识到,没有说既进行完数据库设计后还要再"自己"建立一变VO.意思是,在项目设计时,要么根据需求分析建立实体类,由正向生成数据库表:要么就先进行数据库表设计,再逆向生成实体类.没有说进行完任意一方的设计后再去花时间去自己匹配建立另一方的设计. 原因是: 1. 1.5倍工作量,浪费时间.(时间对公司来说很重要) 2. 无法

Hibernate多对一,多对多的表映射关系

版权声明:本文为博主原创文章,未经博主允许不得转载. 本文旨在介绍hibernate的实体与数据库表的各种关系映射 1.多对一/一对多关系映射 User-------用户表 Department -------------部门表 Contact---------------组件部分,(地址类)) 下面开始各实体代码: User.java实体类 package com.huangchao.model; import java.io.Serializable; import java.util.Da

spring和hibernate整合时无法自动建表

在使用spring整合hibernate时候代码如下: <property name="dataSource" ref="dataSource" /> <!-- 配置hibernate的属性 --> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hiber