Hibernate:
    insert
    into
        Customer
        (cname)
    values
        (?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?


Hibernate:
    insert
    into
        Customer
        (cname)
    values
        (?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?


Hibernate:
    insert
    into
        Customer
        (cname)
    values
        (?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    insert
    into
        orders
        (addr, cno)
    values
        (?, ?)
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?
Hibernate:
    update
        orders
    set
        cno=?
    where
        oid=?


初始化数据之后使用三种方式检索数据。


客户这里打印也打印出订单的集合,订单这边又打印客户了。这是死循环了,所以这里应该去掉一方的打印。


用SQL的时候给列起过别名。Mysql数据库用As起别名,HQL也是支持这种操作的。



package cn.itcast.test;

import java.util.Arrays;
import java.util.List; import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test; import cn.itcast.utils.HibernateUtils;
import cn.itcast.vo.Customer;
import cn.itcast.vo.Order; /**
* Hibernate的检索方式
* @author zhongzh
*
*/
public class HibernateDemo1 {
@Test
/*
* 使用别名:
*
*/
public void demo3(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction(); //使用别名
//List<Customer> list = session.createQuery("from Customer as c where c.cname = ?").list();
/* List<Customer> list = session.createQuery("from Customer as c").list();
System.out.println(list);*/ //使用别名:带参数
/* List<Customer> list = session.createQuery("from Customer as c where c.cname = ?").setString(0, "小沈").list();
System.out.println(list);*/ //别名as可以省略
/* List<Customer> list = session.createQuery("from Customer c").list();
System.out.println(list);*/
//不支持 select * from Customer写法.可以写成select 别名 from Customer as 别名;
//List<Customer> list = session.createQuery("select * from Customer").list();//createQuery不支持select *的写法,会报语法错误
List<Customer> list = session.createQuery("select c from Customer c").list();//createQuery不支持select *的写法,会报语法错误 System.out.println(list);
tx.commit();
session.close();
} @Test
public void demo2(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction(); //1.使用HQL查询所有客户信息:
/* Query query = session.createQuery("from Customer");//"from Customer"是一个HQL语句。返回一个Query接口
query.list();
*
*/
//session.createQuery("from Customer").setString("", "").list();//HQL支持方法链编程
/* List<Customer> list = session.createQuery("from Customer").list();//HQL支持方法链编程
for(Customer customer:list){
System.out.println(customer);
}*/ //2.使用QBC的方式查询所有记录:
/* List<Customer> list= session.createCriteria(Customer.class).list();//返回Criteria接口
for (Customer customer:list){
System.out.println(customer);
}*/ //3.使用SQL语句查询所有记录:
/* List<Object[]> list = session.createSQLQuery("select * from customer").list();//这里要写SQL语句 这里操作的是数据库表
//但是HQL和QBC方式操作的都是对象 这种SQL查询的方式得到的List集合不会直接装到实体对象里面。而是放到Object数组中。
for(Object[] objects:list){
System.out.println(Arrays.toString(objects));//把Object数组打印一下
}*/
//4.使用SQL语句查询所有记录:封装到实体对象中
List<Customer> list = session.createSQLQuery("select * from customer").addEntity(Customer.class).list();//这里要写SQL语句 这里操作的是数据库表
//但是HQL和QBC方式操作的都是对象 这种SQL查询的方式得到的List集合不会直接装到实体对象里面。而是放到Object数组中。这也是方法链编程
for(Customer customer:list){
System.out.println(customer);//这个时候就是打印出实体对象的方式
}
tx.commit();
session.close();
}
@Test
/*
*
* 初始化数据
*/
public void demo1(){
Session session = HibernateUtils.openSession();
Transaction tx = session.beginTransaction(); Customer customer = new Customer();
//customer.setCname("小金");
//customer.setCname("小明");
customer.setCname("小沈"); for(int i=0;i<=10;i++){
Order order = new Order();
//order.setAddr("西三旗"+i);
order.setAddr("山东"+i);
order.setCustomer(customer); customer.getOrders().add(order);
}
session.save(customer);
//还需要设置订单,如果不想设置订单那就要配置级联才行
tx.commit();
session.close();
}
}
package cn.itcast.vo;

import java.util.HashSet;
import java.util.Set; /**
* 客户的实体:
* @author 姜涛
*
*/
public class Customer {
private Integer cid;
private String cname;
// 一个客户有多个订单.
private Set<Order> orders = new HashSet<Order>();
public Integer getCid() {
return cid;
}
public void setCid(Integer cid) {
this.cid = cid;
}
public String getCname() {
return cname;
}
public void setCname(String cname) {
this.cname = cname;
}
public Set<Order> getOrders() {
return orders;
}
public void setOrders(Set<Order> orders) {
this.orders = orders;
}
@Override
public String toString() {//客户这里打印也打印出订单的集合。这是死循环了,所以这里应该去掉一方的打印。
/* return "Customer [cid=" + cid + ", cname=" + cname + ", orders="
+ orders + "]";*/
return "Customer [cid=" + cid + ", cname=" + cname + "]";//客户这里去掉订单集合的打印 } }
package cn.itcast.vo;
/**
* 订单的实体:
* @author 姜涛
*
*/
public class Order {
private Integer oid;
private String addr;
// 订单属于某一个客户.放置一个客户的对象.
private Customer customer;
public Integer getOid() {
return oid;
}
public void setOid(Integer oid) {
this.oid = oid;
}
public String getAddr() {
return addr;
}
public void setAddr(String addr) {
this.addr = addr;
}
public Customer getCustomer() {
return customer;
}
public void setCustomer(Customer customer) {
this.customer = customer;
}
@Override
public String toString() {//订单这边又打印客户了。这是死循环了,所以这里应该去掉一方的打印。
return "Order [oid=" + oid + ", addr=" + addr + ", customer="
+ customer + "]";
} }
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--
<class name="cn.itcast.hibernate3.demo2.Customer" table="customer">
-->
<class name="cn.itcast.vo.Customer">
<!-- 配置唯一标识 -->
<id name="cid" column="cid">
<generator class="native"/>
</id>
<!-- 配置普通属性 -->
<property name="cname" column="cname" length="20"/> <!-- 建立映射 -->
<!-- 配置一个集合 <set>的name Customer对象中的关联对象的属性名称. -->
<!-- 这里把级联去掉 要最简短的配置
<set name="orders" cascade="save-update" inverse="true">
-->
<set name="orders" cascade="save-update">
<!-- <key>标签中column:用来描述一对多多的一方的外键的名称. -->
<key column="cno"></key>
<!-- 配置一个<one-to-many>标签中class属性:订单的类的全路径 -->
<!--
<one-to-many class="cn.itcast.hibernate3.demo2.Order"/>
-->
<one-to-many class="cn.itcast.vo.Order"/>
</set>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--
<class name="cn.itcast.hibernate3.demo2.Order" table="orders">
-->
<class name="cn.itcast.vo.Order" table="orders">
<!-- 配置唯一标识 -->
<id name="oid" column="oid">
<generator class="native"/>
</id>
<!-- 配置普通属性 -->
<property name="addr" column="addr" length="50"/>
<!-- 配置映射 -->
<!--
<many-to-one>标签
name :关联对象的属性的名称.
column :表中的外键名称.
class :关联对象类的全路径
-->
<!--
<many-to-one name="customer" column="cno" class="cn.itcast.hibernate3.demo2.Customer"/>
-->
<many-to-one name="customer" column="cno" class="cn.itcast.vo.Customer"/>
</class>
</hibernate-mapping>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration>
<session-factory>
<!-- 必须去配置的属性 -->
<!-- 配置数据库连接的基本信息: -->
<property name="hibernate.connection.driver_class">
com.mysql.jdbc.Driver
</property>
<property name="hibernate.connection.url"><!-- 连接的数据库是hibernate3_day02 -->
jdbc:mysql:///hibernate3_day03
</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<!-- Hibernate的方言 -->
<!-- 生成底层SQL不同的 -->
<property name="hibernate.dialect">
org.hibernate.dialect.MySQLDialect
</property> <!-- 可选的属性 -->
<!-- 显示SQL -->
<property name="hibernate.show_sql">true</property>
<!-- 格式化SQL -->
<property name="hibernate.format_sql">true</property> <property name="hibernate.connection.autocommit">false</property>
<!-- hbm:映射 to DDL: create drop alter -->
<property name="hibernate.hbm2ddl.auto">update</property> <!-- C3P0连接池设定-->
<!-- 使用c3po连接池 配置连接池提供的供应商-->
<property name="connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</property> <!--在连接池中可用的数据库连接的最少数目 -->
<property name="c3p0.min_size">5</property>
<!--在连接池中所有数据库连接的最大数目 -->
<property name="c3p0.max_size">20</property>
<!--设定数据库连接的过期时间,以秒为单位,
如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
<property name="c3p0.timeout">120</property>
<!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
<property name="c3p0.idle_test_period">3000</property> <!-- 通知Hibernate加载那些映射文件 -->
<!-- <mapping resource="cn/itcast/hibernate3/demo1/Book.hbm.xml" />
<mapping resource="cn/itcast/hibernate3/demo2/Customer.hbm.xml" />
<mapping resource="cn/itcast/hibernate3/demo2/Order.hbm.xml" />
<mapping resource="cn/itcast/hibernate3/demo1/Book.hbm.xml" /> -->
<!-- 把映射文件中的这几个都拿掉 重新把它引入 -->
<mapping resource="cn/itcast/vo/Customer.hbm.xml" />
<mapping resource="cn/itcast/vo/Order.hbm.xml" /> </session-factory>
</hibernate-configuration>

day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询的更多相关文章

  1. 攻城狮在路上(壹) Hibernate(十四)--- Hibernate的检索方式(下)

    本节介绍HQL和QBC的高级用法:各种连接查询.投影查询.报表查询.动态查询.集合过滤和子查询等.另外将归纳优化查询程序代码,从而提高查询性能的各种技巧.一.连接查询: HQL与QBC支持的各种连接类 ...

  2. 攻城狮在路上(壹) Hibernate(十二)--- Hibernate的检索策略

    本文依旧以Customer类和Order类进行说明.一.引言: Hibernate检索Customer对象时立即检索与之关联的Order对象,这种检索策略为立即检索策略.立即检索策略存在两大不足: A ...

  3. [原创]java WEB学习笔记90:Hibernate学习之路-- -HQL检索方式,分页查询,命名查询语句,投影查询,报表查询

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. Hibernate学习(八)———— Hibernate检索策略(类级别,关联级别,批量检索)详解

    序言 很多看起来很难的东西其实并不难,关键是看自己是否花费了时间和精力去看,如果一个东西你能看得懂,同样的,别人也能看得懂,体现不出和别人的差距,所以当你觉得自己看了很多书或者学了很多东西的时候,你要 ...

  5. 02.Hibernate映射基础

    前言:Hibernate的核心功能是根据数据库到实体类的映射,自动从数据库绑定数据到实体类.使我们操作实体类(Java对象)就能对数据库进行增.删.查.改,而不用调用JDBC API使数据操作变得简单 ...

  6. Spring/Hibernate 应用性能优化的7种方法

    对于大多数典型的 Spring/Hibernate 企业应用而言,其性能表现几乎完全依赖于持久层的性能.此篇文章中将介绍如何确认应用是否受数据库约束,同时介绍七种常用的提高应用性能的速成法.本文系 O ...

  7. 性能优化之Hibernate缓存讲解、应用和调优

    JavaMelody——一款性能监控.调优工具, 通过它让我觉得项目优化是看得见摸得着的,优化有了针对性.而无论是对于分布式,还是非分布,缓存是提示性能的有效工具. 数据层是EJB3.0实现的,而EJ ...

  8. [原]性能优化之Hibernate缓存讲解、应用和调优

    近来坤哥推荐我我们一款性能监控.调优工具--JavaMelody,通过它让我觉得项目优化是看得见摸得着的,优化有了针对性.而无论是对于分布式,还是非分布,缓存是提示性能的有效工具. 数据层是EJB3. ...

  9. 【java】itoo项目实战之hibernate 懒载入优化性能

    在做itoo 3.0 的时候,考评系统想要上线,就開始导入数据了,仅仅导入学生2万条数据,可是导入的速度特别的慢.这个慢的原因是由于导入的时候进行了过多的IO操作.可是导入成功之后,查询学生的速度更加 ...

随机推荐

  1. uva11922splay

    题意:一个值1到n的数组,一种(多次)操作把l到r的区间反转,然后放到数组尾部 题解:裸的splay,用区间合并和区间分割,反转用lazy标记+pushdown就好了 #include<bits ...

  2. 1009 失恋的小 T(后缀数组¥)

    1009: 失恋的小 T 时间限制: 1 Sec  内存限制: 128 MB提交: 160  解决: 76[提交][状态][讨论版] 题目描述 小 T 最近失恋了,开始怀疑人生和爱情,他想知道在这世界 ...

  3. uva 1025 A Spy int the Metro

    https://vjudge.net/problem/UVA-1025 看见spy忍俊不禁的想起省赛时不知道spy啥意思 ( >_< f[i][j]表示i时刻处于j站所需的最少等待时间,有 ...

  4. MyEclipse设置默认的文档注释和背景色设置

  5. 从jQuery学细节

    前言 最近看了两遍jQuery源码,感觉只是看懂了jQuery的小部分小部分,不过仅此,就已经对john resig佩服的五体投地咯.. 下面附上这位帅哥的靓照,记住吧,是他改变了世界. 看的大多是实 ...

  6. enumerate 枚举

  7. MySQL实战 | 05 如何设计高性能的索引?

    原文链接:MySQL | 05 如何设计高性能的索引? 上回我们主要研究了为什么使用索引,以及索引的数据结构.今天带你了解如何设计高性能的索引. 其中,有这么一个点,说的是 InnoDB 引擎中使用的 ...

  8. 1151 LCA in a Binary Tree(30 分)

    The lowest common ancestor (LCA) of two nodes U and V in a tree is the deepest node that has both U ...

  9. GO语言list剖析

    GO语言list剖析 本节内容 使用方法 list提供的方法 源码剖析 1. 使用方法 在GO语言的标准库中,提供了一个container包,这个包中提供了三种数据类型,就是heap,list和rin ...

  10. jacksi(比较实用的工具批处理)

    批处理类别: 国产软件 批处理语言: 简体中文 授权方式: 免费软件 运行环境: Windows平台 警告:运行BAT源码是一种危险的动作,如果你不熟悉,请不要尝试! 这里分享的是用bat写的比较实用 ...