还是以区县和街道为例:
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> <!– 加载实体类的Mysql对应xml文件 –>-->
<!--<mapping resource="mapper/userAdress.hbm.xml"></mapping> <!– 加载实体类的Mysql对应xml文件 –>-->
<!-- 街道区县 一对多 -->
<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语句执行完成后再打印