zoukankan      html  css  js  c++  java
  • hql查询语句 内存中的情况,fetch迫切查询关键字

     Classes.java

     1 package cn.itcast.hiberate.sh.domain;
     2 
     3 import java.io.Serializable;
     4 import java.util.Set;
     5 
     6 public class Classes implements Serializable{
     7     private Long cid;
     8     private String cname;
     9     private String description;
    10     
    11     public Classes(){}
    12     
    13     public Classes(String cname,String description){
    14         this.cname = cname;
    15         this.description = description;
    16     }
    17     
    18     public Long getCid() {
    19         return cid;
    20     }
    21 
    22     public void setCid(Long cid) {
    23         this.cid = cid;
    24     }
    25 
    26     public String getCname() {
    27         return cname;
    28     }
    29 
    30     public void setCname(String cname) {
    31         this.cname = cname;
    32     }
    33 
    34     public String getDescription() {
    35         return description;
    36     }
    37 
    38     public void setDescription(String description) {
    39         this.description = description;
    40     }
    41 
    42     public Set<Student> getStudents() {
    43         return students;
    44     }
    45 
    46     public void setStudents(Set<Student> students) {
    47         this.students = students;
    48     }
    49 
    50     private Set students;
    51 }
    View Code
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     4 <hibernate-mapping>
     5     <class name="cn.itcast.hiberate.sh.domain.Classes">
     6         <id name="cid" length="5" type="java.lang.Long">
     7             <generator class="increment"></generator>
     8         </id>
     9         <property name="cname" length="20" type="java.lang.String"></property>
    10         
    11         <property name="description" length="100" type="java.lang.String"></property>
    12         <!-- 
    13             set元素对应类中的set集合
    14             通过set元素使classes表与student表建立关联
    15                key是通过外键的形式让两张表建立关联
    16                one-to-many是通过类的形式让两个类建立关联
    17             
    18             cascade 级联
    19                save-update
    20                    1、当 保存班级的时候,对学生进行怎么样的操作
    21                         如果学生对象在数据库中没有对应的值,这个时候会执行save操作
    22                         如果学生对象在数据库中有对应的值,这个时候会执行update操作
    23                delete
    24                all
    25             inverse  维护关系
    26                true      不维护关系     
    27                false     维护关系
    28                default   false
    29          -->
    30         <set name="students" cascade="save-update" inverse="true" lazy="false" fetch="join">
    31             <!-- 
    32                 key是用来描述外键
    33              -->
    34             <key>
    35                 <column name="cid"></column>
    36             </key>
    37             <one-to-many class="cn.itcast.hiberate.sh.domain.Student"/>
    38         </set>
    39     </class>
    40 </hibernate-mapping>
    View Code

    Course.java

     1 package cn.itcast.hiberate.sh.domain;
     2 
     3 import java.io.Serializable;
     4 import java.util.Set;
     5 
     6 public class Course implements Serializable{
     7     private Long cid;
     8     private String cname;
     9     private String description;
    10     
    11     public Long getCid() {
    12         return cid;
    13     }
    14 
    15     public void setCid(Long cid) {
    16         this.cid = cid;
    17     }
    18 
    19     public String getCname() {
    20         return cname;
    21     }
    22 
    23     public void setCname(String cname) {
    24         this.cname = cname;
    25     }
    26 
    27     public String getDescription() {
    28         return description;
    29     }
    30 
    31     public void setDescription(String description) {
    32         this.description = description;
    33     }
    34 
    35     public Set<Student> getStudents() {
    36         return students;
    37     }
    38 
    39     public void setStudents(Set<Student> students) {
    40         this.students = students;
    41     }
    42 
    43     private Set<Student> students;
    44 }
    View Code
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     4 <!-- 
     5     建立表和类的对应关系
     6  -->
     7 <hibernate-mapping>
     8     <class name="cn.itcast.hiberate.sh.domain.Course">
     9         <id name="cid" type="java.lang.Long" length="5">
    10             <generator class="increment"></generator>
    11         </id>
    12         <property name="cname" type="java.lang.String" length="20"></property>
    13         <property name="description" type="java.lang.String" length="50"></property>
    14         <!-- 
    15             table
    16                student与course在数据库的层次上通过该表实现关联
    17          -->
    18         <set name="students" table="student_course">
    19             <key>
    20             <!-- 
    21                 在哪个映射文件中,就添加哪个
    22              -->
    23                 <column name="cid"></column>
    24             </key>
    25             <!-- 
    26                 column表示外键
    27              -->
    28             <many-to-many class="cn.itcast.hiberate.sh.domain.Student" column="sid"></many-to-many>
    29         </set>
    30     </class>
    31 </hibernate-mapping>
    View Code

    Student.java

     1 package cn.itcast.hiberate.sh.domain;
     2 
     3 import java.io.Serializable;
     4 import java.util.HashSet;
     5 import java.util.Set;
     6 
     7 public class Student implements Serializable{
     8     private Long sid;
     9     private String sname;
    10     
    11     private Classes classes;
    12     
    13     private Set<Course> courses = new HashSet<Course>(0);
    14     
    15     public Set<Course> getCourses() {
    16         return courses;
    17     }
    18     public void setCourses(Set<Course> courses) {
    19         this.courses = courses;
    20     }
    21     public Classes getClasses() {
    22         return classes;
    23     }
    24     public void setClasses(Classes classes) {
    25         this.classes = classes;
    26     }
    27     public Long getSid() {
    28         return sid;
    29     }
    30     public void setSid(Long sid) {
    31         this.sid = sid;
    32     }
    33     public String getSname() {
    34         return sname;
    35     }
    36     public void setSname(String sname) {
    37         this.sname = sname;
    38     }
    39     public String getDescription() {
    40         return description;
    41     }
    42     public void setDescription(String description) {
    43         this.description = description;
    44     }
    45     private String description;
    46 }
    View Code
     1 <?xml version="1.0" encoding="utf-8"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     4 <hibernate-mapping>
     5     <class name="cn.itcast.hiberate.sh.domain.Classes">
     6         <id name="cid" length="5" type="java.lang.Long">
     7             <generator class="increment"></generator>
     8         </id>
     9         <property name="cname" length="20" type="java.lang.String"></property>
    10         
    11         <property name="description" length="100" type="java.lang.String"></property>
    12         <!-- 
    13             set元素对应类中的set集合
    14             通过set元素使classes表与student表建立关联
    15                key是通过外键的形式让两张表建立关联
    16                one-to-many是通过类的形式让两个类建立关联
    17             
    18             cascade 级联
    19                save-update
    20                    1、当 保存班级的时候,对学生进行怎么样的操作
    21                         如果学生对象在数据库中没有对应的值,这个时候会执行save操作
    22                         如果学生对象在数据库中有对应的值,这个时候会执行update操作
    23                delete
    24                all
    25             inverse  维护关系
    26                true      不维护关系     
    27                false     维护关系
    28                default   false
    29          -->
    30         <set name="students" cascade="save-update" inverse="true" lazy="false" fetch="join">
    31             <!-- 
    32                 key是用来描述外键
    33              -->
    34             <key>
    35                 <column name="cid"></column>
    36             </key>
    37             <one-to-many class="cn.itcast.hiberate.sh.domain.Student"/>
    38         </set>
    39     </class>
    40 </hibernate-mapping>
    View Code

    Hibernate.cfg.xml

     1 <?xml version='1.0' encoding='utf-8'?>
     2 <!DOCTYPE hibernate-configuration PUBLIC
     3         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
     4         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
     5 <hibernate-configuration>
     6     <!-- 
     7         一个session-factory只能连接一个数据库
     8     -->
     9 <session-factory>
    10     <!-- 
    11         数据库的用户名
    12     -->
    13     <property name="connection.username">root</property>
    14 
    15     <property name="connection.driver_class">
    16         com.mysql.jdbc.Driver
    17     </property>
    18 
    19     <!-- 
    20         密码
    21     -->
    22     <property name="connection.password">friends</property>
    23     <!-- 
    24         url
    25     -->
    26     <property name="connection.url">
    27         jdbc:mysql://localhost:3306/mydatabase
    28     </property>
    29     <!-- 
    30         作用:根据持久化类和映射文件生成表
    31         validate
    32         create-drop
    33         create
    34         update
    35     -->
    36     <property name="hbm2ddl.auto">update</property>
    37 
    38     <property name="hibernate.dialect">
    39         org.hibernate.dialect.MySQLInnoDBDialect
    40     </property>
    41     <!-- 
    42         显示hibernate内部生成的sql语句
    43     -->
    44     <property name="show_sql">true</property>
    45     <property name="format_sql">true</property>
    46     <mapping resource="cn/itcast/hiberate/sh/domain/Classes.hbm.xml" />
    47     <mapping resource="cn/itcast/hiberate/sh/domain/Student.hbm.xml" />
    48      <mapping resource="cn/itcast/hiberate/sh/domain/Course.hbm.xml" /> 
    49 
    50 </session-factory>
    51 </hibernate-configuration>
    View Code
      1 package cn.itcast.hibernate.sh.dao;
      2 
      3 import java.util.ArrayList;
      4 import java.util.HashSet;
      5 import java.util.List;
      6 import java.util.Set;
      7 
      8 import org.hibernate.Query;
      9 import org.hibernate.Session;
     10 import org.junit.Test;
     11 
     12 import cn.itcast.hiberate.sh.domain.Classes;
     13 import cn.itcast.hiberate.sh.domain.Course;
     14 import cn.itcast.hiberate.sh.domain.Student;
     15 import cn.itcast.hibernate.sh.utils.HiberanteUtils;
     16 
     17 /**
     18  * 单表
     19  * 
     20  * 一对多和多对多
     21  * 
     22  * 多表的结合
     23  * @author Think
     24  *
     25  */
     26 public class HQLDao extends HiberanteUtils{
     27     public List<Classes> queryAllClasses(){
     28         Session session = sessionFactory.openSession();
     29         List<Classes> cList = session.createQuery("from Classes").list();
     30         session.close();
     31         return cList;
     32     }
     33     
     34     public List queryClasses_Properties(){
     35         Session session = sessionFactory.openSession();
     36         List cList = session.createQuery("select cid,cname from Classes").list();
     37         session.close();
     38         return cList;
     39     }
     40     
     41     public List<Classes> queryClasses_Constructor(){
     42         Session session = sessionFactory.openSession();
     43         List<Classes> cList = session.createQuery("select new cn.itcast.hiberate.sh.domain.Classes(cname,description) from Classes").list();
     44         session.close();
     45         return cList;
     46     }
     47     
     48     public Classes queryClasses_Condition(){
     49         Session session = sessionFactory.openSession();
     50         Query query = session.createQuery("select new cn.itcast.hiberate.sh.domain.Classes(cname,description) from Classes where cid=:cid");
     51         query.setLong("cid", 1L);
     52         Classes classes = (Classes)query.uniqueResult();
     53         System.out.println(classes.getCname());
     54         session.close();
     55         return classes;
     56     }
     57     
     58     public Classes queryClasses_Condition_2(){
     59         Session session = sessionFactory.openSession();
     60         Query query = session.createQuery("select new cn.itcast.hiberate.sh.domain.Classes(cname,description) from Classes where cid=?");
     61         query.setLong(0, 1L);
     62         Classes classes = (Classes)query.uniqueResult();
     63         System.out.println(classes.getCname());
     64         session.close();
     65         return classes;
     66     }
     67     
     68     /**
     69      * order by,group by,sun,min,max,avg,having等都适用
     70      * @return
     71      */
     72     
     73     /**
     74      * 子查询
     75      */
     76     public void queryClasses_SubSelect(){
     77         Session session = sessionFactory.openSession();
     78         List<Classes> cList = session.createQuery("from Classes where cid in(select cid from Classes where cid in(1,2,3))").list();
     79         session.close();
     80     }
     81     
     82     public static HQLDao getInstance(){
     83         return new HQLDao();
     84     }
     85     
     86     /*********************************************************************************************/
     87        /**
     88         * 一对多
     89         *    等值连接          查询出来的机构很差  
     90         *    内连接  
     91         *    左外连接  
     92         *    迫切左外连接
     93         */
     94     public List<Classes> queryClasses_Student_EQ(){
     95         Session session = sessionFactory.openSession();
     96         List<Classes> cList = session.createQuery("from Classes c,Student s where c.cid=s.classes.cid").list();
     97         session.close();
     98         return cList;
     99     }
    100     
    101     /**
    102      * 内连接
    103      * @return
    104      */
    105     public List<Classes> queryClasses_Student_INNER(){
    106         Session session = sessionFactory.openSession();
    107         List<Classes> cList = session.createQuery("from Classes c inner join c.students").list();
    108         session.close();
    109         return cList;
    110     }
    111     
    112     /**
    113      * 迫切内连接
    114      * @return
    115      */
    116     public List<Classes> queryClasses_Student_INNER_FETCH(){
    117         Session session = sessionFactory.openSession();
    118         List<Classes> cList = session.createQuery("from Classes c inner join fetch c.students").list();
    119         session.close();
    120         return cList;
    121     }
    122     
    123     /**
    124      * 左外连接
    125      */
    126     public List<Classes> queryClasses_Student_LeftJoin(){
    127         Session session = sessionFactory.openSession();
    128         List<Classes> cList = session.createQuery("from Classes c left outer join c.students").list();
    129         session.close();
    130         return cList;
    131     }
    132     
    133     /**
    134      * 迫切左外连接
    135      */
    136     public List<Classes> queryClasses_Student_LeftJoin_fetch(){
    137         Session session = sessionFactory.openSession();
    138         String hql = "from Classes c left outer join fetch c.students";
    139         hql = "from Student s left outer join fetch s.classes c";
    140         List<Classes> cList = session.createQuery(hql).list();
    141         session.close();
    142         return cList;
    143     }
    144     
    145     /**
    146      * 带select的查询
    147      */
    148     public List<Classes> queryClasses_Student_Select(){
    149         Session session = sessionFactory.openSession();
    150         String hql = "select new cn.itcast.hiberate.sh.domain.ClassesView(c.cname,s.sname) " +
    151                      "from Student s left outer join s.classes c";
    152         List<Classes> cList = session.createQuery(hql).list();
    153         session.close();
    154         return cList;
    155     }
    156     
    157     /**
    158      * 多对多
    159      */
    160     public void testQueryCourse_Student(){
    161         Session session = sessionFactory.openSession();
    162         List<Student> studentList = session.createQuery("from Student s inner join fetch s.courses c").list();
    163         session.close();
    164     }
    165     
    166     
    167     /**
    168      * 一对多结合多对多
    169      */
    170     public List<Student> queryClasses_Student_Course(){
    171         Session session = sessionFactory.openSession();
    172         String hql = "from Classes cs inner join fetch cs.students s inner join fetch s.courses c";
    173         hql = "from Student s inner join fetch s.classes cs inner join fetch s.courses c";
    174         //hql = "from Classes cs left outer join fetch cs.students s left outer join fetch s.courses c";
    175         List<Student> cList = session.createQuery(hql).list();
    176 //        Set<Classes> cset = new HashSet<Classes>(cList);
    177 //        cList = new ArrayList<Classes>(cset);
    178         System.out.println(cList.size());
    179 //        for(Classes classes:cList){
    180 //            System.out.println(classes.getCid());
    181 //            Set<Student> students = classes.getStudents();
    182 //            for(Student student:students){
    183 //                System.out.println(student.getSname());
    184 //                Set<Course> courses = student.getCourses();
    185 //                for(Course course:courses){
    186 //                    System.out.println(course.getCname());
    187 //                }
    188 //            }
    189 //        }
    190         session.close();
    191         return cList;
    192     }
    193 }

  • 相关阅读:
    IO流
    集合中的工具类Collections和Arrays
    排序 查找
    函数及数组
    变量、静态的和单例模式
    java流程控制
    configure使用
    --sysroot
    LD_PRELOAD
    Linux下内存检测工具:asan :编译-连接-运行选项
  • 原文地址:https://www.cnblogs.com/friends-wf/p/3779747.html
Copyright © 2011-2022 走看看