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. C++标准文档下载

    C++真正正式公布的标准只有三个:C++98.C++03.C++11. C++98是第一个正式的C++标准, C++03是在C++98上面进行了小幅度的修订, C++11则是一次全面的大进化(之前称C ...

  2. Android核心分析之二十八Android GDI之Surface&Canvas

    Surface&Canvas Canvas为在画布的意思.Android上层的作图几乎都通过Canvas实例来完成,其实Canvas更多是一种接口的包装.drawPaints ,drawPoi ...

  3. ubuntu下搭建cocos2dx编程环境-下

         前两篇介绍了cocos2d-x 下linux开发环境配置和android 环境配置问题.在这其中遇到很多问题,所以最后一篇分享一下在处理这些问题时,我是如何解决的,是怎么想的.同时总结一些解 ...

  4. JAVA字符串格式化String.format()的使用

    JAVA字符串格式化-String.format()的使用常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprin ...

  5. AndroidManifest.xml 配置权限大全

    问登记属性 android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限 获取错略位置 android.permissi ...

  6. highCharts图表入门实例

    本文通过讲解Highcharts生成一个简单的3D柱状图实例来学习Highcharts的使用. JSP 页面 1.需要引入的js文件 <script src="<%=basePa ...

  7. Java 数据结构之vector

    Vector 实现了一个动态数组.是可实现自动增长的对象数组. vector和arraylist的比较: 1.都是采用数组格式存储数据,索引数据块插入数据慢 2.ArrayList会比Vector快, ...

  8. ajax练习习题二三级联动

    异步执行 1数据传输收发数据的时候不用等待对方接受,可以继续发送 2Ajax 在调用处理页面处理数据的时候,下面的代码可以继续执行,效率高 同步执行 1收发数据的时候要等到对方接受的成功,才可以继续发 ...

  9. ado执行sql查询出现“发送数据流时出现算术溢出”错误

    开发一个数据采集监控系统,比较变态的是有将近2000项数据.根据数据类型分多个表存储.数据库访问层采用ado.最近发现当一条sql一次性查询1700多个字段数据后就出现“发送数据流时出现算术溢出”错误 ...

  10. Java并发编程知识总结

    一.线程 1.线程创建: 继承Thread类创建线程类 实现Runnable接口创建线程类 使用Callable和Future创建线程 Runnable是执行工作的独立任务,但是它不返回任何值,如果希 ...