Classes.java

 package cn.itcast.hiberate.sh.domain;

 import java.io.Serializable;
import java.util.Set; public class Classes implements Serializable{
private Long cid;
private String cname;
private String description; public Classes(){} public Classes(String cname,String description){
this.cname = cname;
this.description = description;
} public Long getCid() {
return cid;
} public void setCid(Long cid) {
this.cid = cid;
} public String getCname() {
return cname;
} public void setCname(String cname) {
this.cname = cname;
} public String getDescription() {
return description;
} public void setDescription(String description) {
this.description = description;
} public Set<Student> getStudents() {
return students;
} public void setStudents(Set<Student> students) {
this.students = students;
} private Set students;
}
 <?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="cn.itcast.hiberate.sh.domain.Classes">
<id name="cid" length="5" type="java.lang.Long">
<generator class="increment"></generator>
</id>
<property name="cname" length="20" type="java.lang.String"></property> <property name="description" length="100" type="java.lang.String"></property>
<!--
set元素对应类中的set集合
通过set元素使classes表与student表建立关联
key是通过外键的形式让两张表建立关联
one-to-many是通过类的形式让两个类建立关联 cascade 级联
save-update
1、当 保存班级的时候,对学生进行怎么样的操作
如果学生对象在数据库中没有对应的值,这个时候会执行save操作
如果学生对象在数据库中有对应的值,这个时候会执行update操作
delete
all
inverse 维护关系
true 不维护关系
false 维护关系
default false
-->
<set name="students" cascade="save-update" inverse="true" lazy="false" fetch="join">
<!--
key是用来描述外键
-->
<key>
<column name="cid"></column>
</key>
<one-to-many class="cn.itcast.hiberate.sh.domain.Student"/>
</set>
</class>
</hibernate-mapping>

Course.java

 package cn.itcast.hiberate.sh.domain;

 import java.io.Serializable;
import java.util.Set; public class Course implements Serializable{
private Long cid;
private String cname;
private String description; public Long getCid() {
return cid;
} public void setCid(Long cid) {
this.cid = cid;
} public String getCname() {
return cname;
} public void setCname(String cname) {
this.cname = cname;
} public String getDescription() {
return description;
} public void setDescription(String description) {
this.description = description;
} public Set<Student> getStudents() {
return students;
} public void setStudents(Set<Student> students) {
this.students = students;
} private Set<Student> students;
}
 <?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="cn.itcast.hiberate.sh.domain.Course">
<id name="cid" type="java.lang.Long" length="5">
<generator class="increment"></generator>
</id>
<property name="cname" type="java.lang.String" length="20"></property>
<property name="description" type="java.lang.String" length="50"></property>
<!--
table
student与course在数据库的层次上通过该表实现关联
-->
<set name="students" table="student_course">
<key>
<!--
在哪个映射文件中,就添加哪个
-->
<column name="cid"></column>
</key>
<!--
column表示外键
-->
<many-to-many class="cn.itcast.hiberate.sh.domain.Student" column="sid"></many-to-many>
</set>
</class>
</hibernate-mapping>

Student.java

 package cn.itcast.hiberate.sh.domain;

 import java.io.Serializable;
import java.util.HashSet;
import java.util.Set; public class Student implements Serializable{
private Long sid;
private String sname; private Classes classes; private Set<Course> courses = new HashSet<Course>(0); public Set<Course> getCourses() {
return courses;
}
public void setCourses(Set<Course> courses) {
this.courses = courses;
}
public Classes getClasses() {
return classes;
}
public void setClasses(Classes classes) {
this.classes = classes;
}
public Long getSid() {
return sid;
}
public void setSid(Long sid) {
this.sid = sid;
}
public String getSname() {
return sname;
}
public void setSname(String sname) {
this.sname = sname;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
private String description;
}
 <?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="cn.itcast.hiberate.sh.domain.Classes">
<id name="cid" length="5" type="java.lang.Long">
<generator class="increment"></generator>
</id>
<property name="cname" length="20" type="java.lang.String"></property> <property name="description" length="100" type="java.lang.String"></property>
<!--
set元素对应类中的set集合
通过set元素使classes表与student表建立关联
key是通过外键的形式让两张表建立关联
one-to-many是通过类的形式让两个类建立关联 cascade 级联
save-update
1、当 保存班级的时候,对学生进行怎么样的操作
如果学生对象在数据库中没有对应的值,这个时候会执行save操作
如果学生对象在数据库中有对应的值,这个时候会执行update操作
delete
all
inverse 维护关系
true 不维护关系
false 维护关系
default false
-->
<set name="students" cascade="save-update" inverse="true" lazy="false" fetch="join">
<!--
key是用来描述外键
-->
<key>
<column name="cid"></column>
</key>
<one-to-many class="cn.itcast.hiberate.sh.domain.Student"/>
</set>
</class>
</hibernate-mapping>

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只能连接一个数据库
-->
<session-factory>
<!--
数据库的用户名
-->
<property name="connection.username">root</property> <property name="connection.driver_class">
com.mysql.jdbc.Driver
</property> <!--
密码
-->
<property name="connection.password">friends</property>
<!--
url
-->
<property name="connection.url">
jdbc:mysql://localhost:3306/mydatabase
</property>
<!--
作用:根据持久化类和映射文件生成表
validate
create-drop
create
update
-->
<property name="hbm2ddl.auto">update</property> <property name="hibernate.dialect">
org.hibernate.dialect.MySQLInnoDBDialect
</property>
<!--
显示hibernate内部生成的sql语句
-->
<property name="show_sql">true</property>
<property name="format_sql">true</property>
<mapping resource="cn/itcast/hiberate/sh/domain/Classes.hbm.xml" />
<mapping resource="cn/itcast/hiberate/sh/domain/Student.hbm.xml" />
<mapping resource="cn/itcast/hiberate/sh/domain/Course.hbm.xml" /> </session-factory>
</hibernate-configuration>
 package cn.itcast.hibernate.sh.dao;

 import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set; import org.hibernate.Query;
import org.hibernate.Session;
import org.junit.Test; import cn.itcast.hiberate.sh.domain.Classes;
import cn.itcast.hiberate.sh.domain.Course;
import cn.itcast.hiberate.sh.domain.Student;
import cn.itcast.hibernate.sh.utils.HiberanteUtils; /**
* 单表
*
* 一对多和多对多
*
* 多表的结合
* @author Think
*
*/
public class HQLDao extends HiberanteUtils{
public List<Classes> queryAllClasses(){
Session session = sessionFactory.openSession();
List<Classes> cList = session.createQuery("from Classes").list();
session.close();
return cList;
} public List queryClasses_Properties(){
Session session = sessionFactory.openSession();
List cList = session.createQuery("select cid,cname from Classes").list();
session.close();
return cList;
} public List<Classes> queryClasses_Constructor(){
Session session = sessionFactory.openSession();
List<Classes> cList = session.createQuery("select new cn.itcast.hiberate.sh.domain.Classes(cname,description) from Classes").list();
session.close();
return cList;
} public Classes queryClasses_Condition(){
Session session = sessionFactory.openSession();
Query query = session.createQuery("select new cn.itcast.hiberate.sh.domain.Classes(cname,description) from Classes where cid=:cid");
query.setLong("cid", 1L);
Classes classes = (Classes)query.uniqueResult();
System.out.println(classes.getCname());
session.close();
return classes;
} public Classes queryClasses_Condition_2(){
Session session = sessionFactory.openSession();
Query query = session.createQuery("select new cn.itcast.hiberate.sh.domain.Classes(cname,description) from Classes where cid=?");
query.setLong(0, 1L);
Classes classes = (Classes)query.uniqueResult();
System.out.println(classes.getCname());
session.close();
return classes;
} /**
* order by,group by,sun,min,max,avg,having等都适用
* @return
*/ /**
* 子查询
*/
public void queryClasses_SubSelect(){
Session session = sessionFactory.openSession();
List<Classes> cList = session.createQuery("from Classes where cid in(select cid from Classes where cid in(1,2,3))").list();
session.close();
} public static HQLDao getInstance(){
return new HQLDao();
} /*********************************************************************************************/
/**
* 一对多
* 等值连接 查询出来的机构很差
* 内连接
* 左外连接
* 迫切左外连接
*/
public List<Classes> queryClasses_Student_EQ(){
Session session = sessionFactory.openSession();
List<Classes> cList = session.createQuery("from Classes c,Student s where c.cid=s.classes.cid").list();
session.close();
return cList;
} /**
* 内连接
* @return
*/
public List<Classes> queryClasses_Student_INNER(){
Session session = sessionFactory.openSession();
List<Classes> cList = session.createQuery("from Classes c inner join c.students").list();
session.close();
return cList;
} /**
* 迫切内连接
* @return
*/
public List<Classes> queryClasses_Student_INNER_FETCH(){
Session session = sessionFactory.openSession();
List<Classes> cList = session.createQuery("from Classes c inner join fetch c.students").list();
session.close();
return cList;
} /**
* 左外连接
*/
public List<Classes> queryClasses_Student_LeftJoin(){
Session session = sessionFactory.openSession();
List<Classes> cList = session.createQuery("from Classes c left outer join c.students").list();
session.close();
return cList;
} /**
* 迫切左外连接
*/
public List<Classes> queryClasses_Student_LeftJoin_fetch(){
Session session = sessionFactory.openSession();
String hql = "from Classes c left outer join fetch c.students";
hql = "from Student s left outer join fetch s.classes c";
List<Classes> cList = session.createQuery(hql).list();
session.close();
return cList;
} /**
* 带select的查询
*/
public List<Classes> queryClasses_Student_Select(){
Session session = sessionFactory.openSession();
String hql = "select new cn.itcast.hiberate.sh.domain.ClassesView(c.cname,s.sname) " +
"from Student s left outer join s.classes c";
List<Classes> cList = session.createQuery(hql).list();
session.close();
return cList;
} /**
* 多对多
*/
public void testQueryCourse_Student(){
Session session = sessionFactory.openSession();
List<Student> studentList = session.createQuery("from Student s inner join fetch s.courses c").list();
session.close();
} /**
* 一对多结合多对多
*/
public List<Student> queryClasses_Student_Course(){
Session session = sessionFactory.openSession();
String hql = "from Classes cs inner join fetch cs.students s inner join fetch s.courses c";
hql = "from Student s inner join fetch s.classes cs inner join fetch s.courses c";
//hql = "from Classes cs left outer join fetch cs.students s left outer join fetch s.courses c";
List<Student> cList = session.createQuery(hql).list();
// Set<Classes> cset = new HashSet<Classes>(cList);
// cList = new ArrayList<Classes>(cset);
System.out.println(cList.size());
// for(Classes classes:cList){
// System.out.println(classes.getCid());
// Set<Student> students = classes.getStudents();
// for(Student student:students){
// System.out.println(student.getSname());
// Set<Course> courses = student.getCourses();
// for(Course course:courses){
// System.out.println(course.getCname());
// }
// }
// }
session.close();
return cList;
}
}

hql查询语句 内存中的情况,fetch迫切查询关键字的更多相关文章

  1. 如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?

    如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?(2006-12-14 09:25:36) 与这个问题具有相同性质的其他描述还包括:如何 ...

  2. T_SQL查询语句(一): 单表查询

    ############################################ 查询语句--SELECT ########################################## ...

  3. Java的各类型数据在内存中分配情况详解

    1.      有这样一种说法,如今争锋于IT战场的两大势力,MS一族偏重于底层实现,Java一族偏重于系统架构.说法根据无从考证,但从两大势力各自的社区力量和图书市场已有佳作不难看出,此说法不虚,但 ...

  4. PHP实现查询Memcache内存中的所有键与值

    使用Memcache时,我们可以用memcache提供的get方法,通过键查询到当前的数据,但是有时候需要查询内存中所有的键和值,这个时候可以使用下面的代码实现: <?php /** * Cre ...

  5. MYSQL——解题查询语句答题思路,再难的查询都不怕!

    select查询语句,作为测试人员,使用此语句是家常便饭,是必须掌握的部分,由开始学习mysql到网上搜索试题做,开始做题一塌糊涂,拿到题目就晕,无从下手,现在慢慢总结了一套自己做题的方式,很开森,嘿 ...

  6. SpringBoot使用注解的方式构建Elasticsearch查询语句,实现多条件的复杂查询

    背景&痛点 通过ES进行查询,如果需要新增查询条件,则每次都需要进行硬编码,然后实现对应的查询功能.这样不仅开发工作量大,而且如果有多个不同的索引对象需要进行同样的查询,则需要开发多次,代码复 ...

  7. 查询语句为“%string_”的情况

    select * from t_user where user_name like '%Joe_%'实际查询出来的语句为: 而不像预计的前两条.

  8. Oracle中分页查询语句

    Oracle分页查询语句使我们最常用的语句之一,下面就为您介绍的Oracle分页查询语句的用法,如果您对此方面感兴趣的话,不妨一看. Oracle分页查询语句基本上可以按照本文给出的格式来进行套用.O ...

  9. (数据科学学习手册28)SQL server 2012中的查询语句汇总

    一.简介 数据库管理系统(DBMS)最重要的功能就是提供数据查询,即用户根据实际需求对数据进行筛选,并以特定形式进行显示.在Microsoft SQL Serve 2012 中,可以使用通用的SELE ...

随机推荐

  1. 性能标准:Apdex介绍

    目前的应用程序性能测试工具有多方面的局限.每种工具都有其自己对性能的定义,产生太多混乱或矛盾的数值,并缺少简洁的结论.IT经理们无法深入了解性能,而这是软件与用户对关键应用的体验有关的事. 听云作为新 ...

  2. JavaWeb笔记——上传文件

    jsp上传文件 *<form>标签method属性必须为post,并且添加enctype="multipart/form-data"属性   ------------- ...

  3. WebSphere常用设置

    WebSphere常用设置 1.查看环境配置信息D:\Program Files\IBM\WebSphere\AppServer\profiles\AppSrv01\logs\AboutThisPro ...

  4. Jenkins 构建JavaHelloWorld

    原文:http://www.cnblogs.com/itech/archive/2011/11/03/2234662.html 注意:我们知道Jenkins通过master/slave来支持分布式的j ...

  5. CentOS中通过stat查看文件的元数据

    CentOS中可以通过stat查看文件的元数据 [baby@xiaoxiao abc]$ stat honey  File: `honey'  Size: 25         Blocks: 8   ...

  6. java Cache框架

    Cache框架乱炖   各类开源的缓存解决方案 JBossCache/TreeCacheJBossCache是一个复制的事务处理缓存,它允许你缓存企业级应用数据来更好的改善性能.缓存数据被自动复制,让 ...

  7. Data Flow ->> DQS Cleansing

    Data Quality Services(DQS)是SQL Server 2012引入的一大特性.这个服务的任务是为了实现客户端数据标准化和清理错误数据的.比如客户端数据容易因为用户输出诸如像城市名 ...

  8. Test Tools

    1. http://www.dummytextgenerator.com/: Generate dummy text 2. fsutil file createnew D:\New.txt 1024: ...

  9. URL重写案例

    实现url重写的基本方法:  将下载的URLRewriter.dll,放到你的web程序的bin下 然后在web.config里配置如下: <?xml version="1.0&quo ...

  10. (六)C#中判断空字符串的三种方法性能分析

    三种方法分别是: string a=""; 1.if(a=="") 2.if(a==string.Empty) 3.if(a.Length==0) 三种方法是等 ...