Hibernate使用HQL查询集合

还是以区县和街道为例:
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">
<hibernate-configuration>
    <session-factory>
        <!--加载数据源-->
        <property name="hibernate.connection.driver_class">com.mysql.cj.jdbc.Driver</property>
        <property name="hibernate.connection.username">root</property> <!-- 账户 -->
        <property name="hibernate.connection.password">xxxx</property> <!-- 密码 -->
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate?serverTimezone=GMT%2B8</property>
        <!--加载的是什么数据库-->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>  <!-- 打印sql语句 -->
        <property name="hibernate.hbm2ddl.auto">update</property> <!-- 自动建表 -->
        <!--<mapping resource="mapper/User.hbm.xml"></mapping>  &lt;!&ndash; 加载实体类的Mysql对应xml文件 &ndash;&gt;-->
        <!--<mapping resource="mapper/userAdress.hbm.xml"></mapping>  &lt;!&ndash; 加载实体类的Mysql对应xml文件 &ndash;&gt;-->
        <!-- 街道区县 一对多  -->
        <mapping resource="jiedao/jiedao.hbm.xml"></mapping>  <!-- 加载实体类的Mysql对应xml文件 -->
        <mapping resource="jiedao/quxian.hbm.xml"></mapping>  <!-- 加载实体类的Mysql对应xml文件 -->


    </session-factory>
</hibernate-configuration>

区县的配置

    <?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.text.hibernate.jiedao.QuXian" table="quxian">
            <id name="QXId" column="qx_id" type="integer" unsaved-value="null">
                <generator class="assigned"/>
            </id>
            <property name="QXName" column="qx_name" type="string"/>
            <!--lazy="true" 延时加载 默认为true  DUG模式能看出结果 -->
            <set name="jieDaoSet" cascade="save-update" inverse="true" lazy="true">
                <key column="qx_id"/>
                <one-to-many class="com.text.hibernate.jiedao.JieDao"/>
            </set>
        </class>
    </hibernate-mapping>

街道的配置

<?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.text.hibernate.jiedao.JieDao" table="jiedao" >
        <id name="JDId" column="jd_id" type="integer">
            <generator class="assigned"/>
        </id>
        <property name="JDName" column="jd_name" type="string"/>
        <many-to-one name="quXian" class="com.text.hibernate.jiedao.QuXian" column="qx_id"/>
    </class>
</hibernate-mapping>

测试类

public class HQLdemo4 {
    public static void main(String[]args){
        Session session = HibernateUtils.getSession();
        // 分页查询
        /*String myHql1 = " from JieDao jd";
        Query query = session.createQuery(myHql1);
        query.setFirstResult(1);
        query.setMaxResults(2);
        List<JieDao> jieDaos = query.list();
        jieDaos.forEach(System.out::println);
        */
        // 聚合函数
        /*String myHql2 = " select count(jd.JDId) from JieDao jd";
        Query query = session.createQuery(myHql2);
        Long rowCount = (Long)query.uniqueResult();
        System.out.println(rowCount);*/

        // 按条件查询
       /* String myHql3 = " from JieDao jd where jd.JDName=:name";
        Query query = session.createQuery(myHql3);
        query.setString("name","街");
        List<JieDao> jieDaos = query.list();
        jieDaos.forEach(System.out::println);*/

       // 模糊查询
        /*String myHql4 = " from JieDao jd where jd.JDName like ?";
        Query query = session.createQuery(myHql4);
        query.setString(0,"街道%");
        List<JieDao> jieDaos = query.list();
        jieDaos.forEach(System.out::println);*/

        //返回部分字段
       /* String myHql5 = " select jd.JDId,jd.JDName from JieDao jd";
        Query query = session.createQuery(myHql5);
        List<Object[]> objects = query.list();
        for (Object[] oneOjb:objects){
            System.out.println("id为="+oneOjb[0]);
            System.out.println("名字为="+oneOjb[1]);
        }*/
       // 延迟查询
        /*String myHql6 = " from QuXian qx where qx.QXName=:name";
        Query query = session.createQuery(myHql6);
        query.setString("name","锦江区");
        List<QuXian> quXians = query.list();
        for (QuXian quXian:quXians){
            System.out.println(quXian);
            System.out.println(quXian.getJieDaoSet());
        }*/
    }
}

这里看一下延迟查询
当设置为true时:
在这里插入图片描述
结果为:
在这里插入图片描述

当设置为flase时:
在这里插入图片描述
结果为:
在这里插入图片描述
经过对比可以看出Sql语句的区别,
当设置为true时:
查询第一个打印完成后再去查询第二个再打印
当设置为false时:
执行Sql语句,Sql语句执行完成后再打印

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:技术黑板 设计师:CSDN官方博客 返回首页

打赏作者

被闲置的鱼

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值