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. Windows Live Writer加载代码着色插件步骤

    博客园内置支持SyntaxHighlighter代码着色,代码着色语法:<pre class='brush:编程语言'>代码</pre>. 需要注意的是:如何你使用Syntax ...

  2. ural 2014 Zhenya moves from parents

    2014. Zhenya moves from parents Time limit: 1.0 secondMemory limit: 64 MB Zhenya moved from his pare ...

  3. AI探索(三)Tensorflow编程模型

    Tensorflow编程模型 ....后续完善 import os os.environ[' import numpy as np num_points = data_array = [] for i ...

  4. Git_学习_09_指定某些文件不上传

    一.前言 在git提交文件到远程分支时,可能有些文件我们并不想上传. 这时可以使用如下命令来将这些文件从暂存区移除 git rm --cached "文件路径" 注:git add ...

  5. 条款51:编写new以及delete的时候需要固守常规

    C++中delete一个指针之后,只是回收指针指向位置的空间,而指针本身的值不变.你需要手工将其赋值为NULL.注意的一点是delete NULL指针的时候不会有任何的事情发生   小结:     o ...

  6. java学习笔记 --- IO流小结

    IO流  |--字节流    |--字节输入流     InputStream      int read():一次读取一个字节      int read(byte[] bys):一次读取一个字节数 ...

  7. Android Studio 开始运行错误

    /******************************************************************************** * Android Studio 开 ...

  8. Linux命令学习(22):ss命令

    版权声明 更新:2017-05-20 博主:LuckyAlan 联系:liuwenvip163@163.com 声明:吃水不忘挖井人,转载请注明出处! 1 文章介绍 本文介绍了Linux下面的ss命令 ...

  9. Logstash详解之——input模块

    原文地址 Logstash由三个组件构造成,分别是input.filter以及output.我们可以吧Logstash三个组件的工作流理解为:input收集数据,filter处理数据,output输出 ...

  10. Visualforce入门第六篇_2017.3.1

    Visualforce实现过滤.数据列表显示.分页功能 可以参考salesforce官网开发文档:https://trailhead.salesforce.com/modules/visualforc ...