day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询
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;}@Overridepublic 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;}@Overridepublic 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>
?
轉載于:https://www.cnblogs.com/ZHONGZHENHUA/p/6682696.html
總結
以上是生活随笔為你收集整理的day36-hibernate检索和优化 02-Hibernate检索方式:简单查询及别名查询的全部內容,希望文章能夠幫你解決所遇到的問題。