hibernate主鍵生成策略,hibernate示例_Hibernate條件示例教程

 2023-11-19 阅读 26 评论 0

摘要:hibernate示例Welcome to the Hibernate Criteria Example Tutorial. Today we will look into Criteria in Hibernate.hibernate主鍵生成策略? 歡迎使用Hibernate Criteria示例教程。 今天,我們將研究Hibernate中的條件。 Hibernate標準 (Hibernate Criteria) Most o

hibernate示例

Welcome to the Hibernate Criteria Example Tutorial. Today we will look into Criteria in Hibernate.

hibernate主鍵生成策略? 歡迎使用Hibernate Criteria示例教程。 今天,我們將研究Hibernate中的條件。

Hibernate標準 (Hibernate Criteria)

Most of the times, we use HQL for querying the database and getting the results. HQL is not preferred way for updating or deleting values because then we need to take care of any associations between tables.

大多數時候,我們使用HQL來查詢數據庫并獲取結果。 HQL不是更新或刪除值的首選方法,因為這樣我們就需要注意表之間的任何關聯。

hibernate框架基礎、Hibernate Criteria API provides object oriented approach for querying the database and getting results. We can’t use Criteria in Hibernate to run update or delete queries or any DDL statements. Hibernate Criteria query is only used to fetch the results from the database using object oriented approach.

Hibernate Criteria API提供了面向對象的方法來查詢數據庫和獲取結果。 我們不能在Hibernate中使用Criteria來運行更新或刪除查詢或任何DDL語句。 Hibernate Criteria查詢僅用于使用面向對象方法從數據庫中獲取結果。

For my Hibernate criteria example, I will use the same setup as in my HQL Example and show you how to use Criteria in Hibernate for querying databases.

hibernate session。 對于我的Hibernate標準示例,我將使用與HQL示例相同的設置,并向您展示如何在Hibernate中使用Criteria來查詢數據庫。

Some of the common usage of Hibernate Criteria API are;

Hibernate Criteria API的一些常見用法是:

  1. Hibernate Criteria API provides Projection that we can use for aggregate functions such as sum(), min(), max() etc.

    Hibernate Criteria API提供了Projection,我們可以將其用于聚合函數,例如sum(),min(),max()等。
  2. Hibernate Criteria API can be used with ProjectionList to fetch selected columns only.

    Hibernate Criteria API可以與ProjectionList一起使用,以僅獲取選定的列。
  3. Criteria in Hibernate can be used for join queries by joining multiple tables, useful methods for Hibernate criteria join are createAlias(), setFetchMode() and setProjection()

    Hibernate中的條件可以通過連接多個表來用于連接查詢,Hibernate條件中連接的有用方法是createAlias(),setFetchMode()和setProjection()
  4. Criteria in Hibernate API can be used for fetching results with conditions, useful methods are add() where we can add Restrictions.

    Hibernate API中的條件可用于獲取有條件的結果,有用的方法是add(),我們可以在其中添加限制。
  5. Hibernate Criteria API provides addOrder() method that we can use for ordering the results.

    Hibernate Criteria API提供了addOrder()方法,可用于對結果進行排序。

java hibernate,Below class shows different usages of Hibernate Criteria API, most of these are replacements of examples in HQL tutorial.

下面的類展示了Hibernate Criteria API的不同用法,其中大多數是HQL教程中示例的替代。

package com.journaldev.hibernate.main;import java.util.Arrays;
import java.util.List;import org.hibernate.Criteria;
import org.hibernate.FetchMode;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.ProjectionList;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;import com.journaldev.hibernate.model.Employee;
import com.journaldev.hibernate.util.HibernateUtil;public class HibernateCriteriaExamples {@SuppressWarnings("unchecked")public static void main(String[] args) {// Prep workSessionFactory sessionFactory = HibernateUtil.getSessionFactory();Session session = sessionFactory.getCurrentSession();Transaction tx = session.beginTransaction();//Get All EmployeesCriteria criteria = session.createCriteria(Employee.class);List<Employee> empList = criteria.list();for(Employee emp : empList){System.out.println("ID="+emp.getId()+", Zipcode="+emp.getAddress().getZipcode());}// Get with ID, creating new Criteria to remove all the settingscriteria = session.createCriteria(Employee.class).add(Restrictions.eq("id", new Long(3)));Employee emp = (Employee) criteria.uniqueResult();System.out.println("Name=" + emp.getName() + ", City="+ emp.getAddress().getCity());//Pagination ExampleempList = session.createCriteria(Employee.class).addOrder(Order.desc("id")).setFirstResult(0).setMaxResults(2).list();for(Employee emp4 : empList){System.out.println("Paginated Employees::"+emp4.getId()+","+emp4.getAddress().getCity());}//Like exampleempList = session.createCriteria(Employee.class).add(Restrictions.like("name", "%i%")).list();for(Employee emp4 : empList){System.out.println("Employees having 'i' in name::"+emp4.getName()+","+emp4.getAddress().getCity());}//Projections examplelong count = (Long) session.createCriteria(Employee.class).setProjection(Projections.rowCount()).add(Restrictions.like("name", "%i%")).uniqueResult();System.out.println("Number of employees with 'i' in name="+count);//using Projections for sum, min, max aggregation functionsdouble sumSalary = (Double) session.createCriteria(Employee.class).setProjection(Projections.sum("salary")).uniqueResult();System.out.println("Sum of Salaries="+sumSalary);//Join example for selecting few columnscriteria = session.createCriteria(Employee.class, "employee");criteria.setFetchMode("employee.address", FetchMode.JOIN);criteria.createAlias("employee.address", "address"); // inner join by defaultProjectionList columns = Projections.projectionList().add(Projections.property("name")).add(Projections.property("address.city"));criteria.setProjection(columns);List<Object[]> list = criteria.list();for(Object[] arr : list){System.out.println(Arrays.toString(arr));}// Rollback transaction to avoid messing test datatx.commit();// closing hibernate resourcessessionFactory.close();}}

When we execute above Hibernate Criteria example program, we get following output.

hibernate-validator? 當我們執行上面的Hibernate Criteria示例程序時,我們得到以下輸出。

May 26, 2014 6:53:32 PM org.hibernate.annotations.common.reflection.java.JavaReflectionManager <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.4.Final}
May 26, 2014 6:53:32 PM org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.3.5.Final}
May 26, 2014 6:53:32 PM org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
May 26, 2014 6:53:32 PM org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
May 26, 2014 6:53:32 PM org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: hibernate.cfg.xml
May 26, 2014 6:53:32 PM org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: hibernate.cfg.xml
May 26, 2014 6:53:32 PM org.hibernate.internal.util.xml.DTDEntityResolver resolveEntity
WARN: HHH000223: Recognized obsolete hibernate namespace https://hibernate.sourceforge.net/. Use namespace https://www.hibernate.org/dtd/ instead. Refer to Hibernate 3.6 Migration Guide!
May 26, 2014 6:53:32 PM org.hibernate.cfg.Configuration doConfigure
INFO: HHH000041: Configured SessionFactory: null
Hibernate Configuration loaded
Hibernate serviceRegistry created
May 26, 2014 6:53:32 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
WARN: HHH000402: Using Hibernate built-in connection pool (not for production use!)
May 26, 2014 6:53:32 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000401: using driver [com.mysql.jdbc.Driver] at URL [jdbc:mysql://localhost/TestDB]
May 26, 2014 6:53:32 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000046: Connection properties: {user=pankaj, password=****}
May 26, 2014 6:53:32 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl buildCreator
INFO: HHH000006: Autocommit mode: false
May 26, 2014 6:53:32 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000115: Hibernate connection pool size: 20 (min=1)
May 26, 2014 6:53:32 PM org.hibernate.dialect.Dialect <init>
INFO: HHH000400: Using dialect: org.hibernate.dialect.MySQLDialect
May 26, 2014 6:53:32 PM org.hibernate.engine.jdbc.internal.LobCreatorBuilder useContextualLobCreation
INFO: HHH000423: Disabling contextual LOB creation as JDBC driver reported JDBC version [3] less than 4
May 26, 2014 6:53:32 PM org.hibernate.engine.transaction.internal.TransactionFactoryInitiator initiateService
INFO: HHH000399: Using default transaction strategy (direct JDBC transactions)
May 26, 2014 6:53:32 PM org.hibernate.hql.internal.ast.ASTQueryTranslatorFactory <init>
INFO: HHH000397: Using ASTQueryTranslatorFactory
Hibernate: select this_.emp_id as emp_id1_1_1_, this_.emp_name as emp_name2_1_1_, this_.emp_salary as emp_sala3_1_1_, address2_.emp_id as emp_id1_0_0_, address2_.address_line1 as address_2_0_0_, address2_.city as city3_0_0_, address2_.zipcode as zipcode4_0_0_ from EMPLOYEE this_ left outer join ADDRESS address2_ on this_.emp_id=address2_.emp_id
ID=1, Zipcode=95129
ID=2, Zipcode=95051
ID=3, Zipcode=560100
ID=4, Zipcode=100100
Hibernate: select this_.emp_id as emp_id1_1_1_, this_.emp_name as emp_name2_1_1_, this_.emp_salary as emp_sala3_1_1_, address2_.emp_id as emp_id1_0_0_, address2_.address_line1 as address_2_0_0_, address2_.city as city3_0_0_, address2_.zipcode as zipcode4_0_0_ from EMPLOYEE this_ left outer join ADDRESS address2_ on this_.emp_id=address2_.emp_id where this_.emp_id=?
Name=Lisa, City=Bangalore
Hibernate: select this_.emp_id as emp_id1_1_1_, this_.emp_name as emp_name2_1_1_, this_.emp_salary as emp_sala3_1_1_, address2_.emp_id as emp_id1_0_0_, address2_.address_line1 as address_2_0_0_, address2_.city as city3_0_0_, address2_.zipcode as zipcode4_0_0_ from EMPLOYEE this_ left outer join ADDRESS address2_ on this_.emp_id=address2_.emp_id order by this_.emp_id desc limit ?
Paginated Employees::4,New Delhi
Paginated Employees::3,Bangalore
Hibernate: select this_.emp_id as emp_id1_1_1_, this_.emp_name as emp_name2_1_1_, this_.emp_salary as emp_sala3_1_1_, address2_.emp_id as emp_id1_0_0_, address2_.address_line1 as address_2_0_0_, address2_.city as city3_0_0_, address2_.zipcode as zipcode4_0_0_ from EMPLOYEE this_ left outer join ADDRESS address2_ on this_.emp_id=address2_.emp_id where this_.emp_name like ?
Employees having 'i' in name::David,Santa Clara
Employees having 'i' in name::Lisa,Bangalore
Hibernate: select count(*) as y0_ from EMPLOYEE this_ where this_.emp_name like ?
Number of employees with 'i' in name=2
Hibernate: select sum(this_.emp_salary) as y0_ from EMPLOYEE this_
Sum of Salaries=1000.0
Hibernate: select this_.emp_name as y0_, address1_.city as y1_ from EMPLOYEE this_ inner join ADDRESS address1_ on this_.emp_id=address1_.emp_id
[Pankaj, San Jose]
[David, Santa Clara]
[Lisa, Bangalore]
[Jack, New Delhi]
May 26, 2014 6:53:32 PM org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop
INFO: HHH000030: Cleaning up connection pool [jdbc:mysql://localhost/TestDB]

Since I am using HQL example project, you would need to import that and then add this class for it to be working.

由于我使用的是HQL示例項目,因此您需要將其導入,然后添加此類以使其正常工作。

Notice the hibernate queries executed in the output, this way you can refine your queries and get the results you are looking for. That’s all for a quick roundup on Criteria in Hibernate.

注意輸出中執行的Hibernate查詢,這樣您可以優化查詢并獲得所需的結果。 這就是Hibernate中Criteria的快速總結。

翻譯自: https://www.journaldev.com/2963/hibernate-criteria-example-tutorial

hibernate示例

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/182936.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息