一,HQL查询:
配置基本信息,不会的可以看我之前的文章
链接:https://blog.csdn.net/chlei_/article/details/100042012
1.基本索引
数据库表格:

主要代码:
Query query = session.createQuery("from Customer");
List<Customer> list = query.list();
System.out.println(list);结果:

2.排序索引
主要代码:
Query query = session.createQuery("from Customer order by id desc ");
List<Customer> list = query.list();
System.out.println(list);测试输出结果:

3.条件索引
主要代码:
Query query = session.createQuery("from Customer where id = 2");
List<Customer> list = query.list();
System.out.println(list);结果:

这里要注意的一个问题就是,这里之前资料不是这么直接操作的,但是我按照资料来,报错了(希望知道原因的小伙伴可以帮助解答):
主要代码:
Query query = session.createQuery("from Customer where id = ?");
query.setParameter(0,2);
List<Customer> list = query.list();
System.out.println(list);结果:
八月 25, 2019 11:02:17 上午 org.hibernate.resource.transaction.backend.jdbc.internal.DdlTransactionIsolatorNonJtaImpl getIsolatedConnection
INFO: HHH10001501: Connection obtained from JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@69e308c6] for (non-JTA) DDL execution was not in auto-commit mode; the Connection 'local transaction' will be committed and the Connection will be set into auto-commit mode.
Exception in thread "main" java.lang.IllegalArgumentException: org.hibernate.QueryException: Legacy-style query parameters (`?`) are no longer supported; use JPA-style ordinal parameters (e.g., `?1`) instead : from customer.Customer where id = ? [from customer.Customer where id = ?]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:138)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:181)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:188)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:729)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:104)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.hibernate.context.internal.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:350)
at com.sun.proxy.$Proxy39.createQuery(Unknown Source)
at test.test.main(test.java:41)
Caused by: org.hibernate.QueryException: Legacy-style query parameters (`?`) are no longer supported; use JPA-style ordinal parameters (e.g., `?1`) instead : from customer.Customer where id = ? [from customer.Customer where id = ?]
at org.hibernate.QueryException.generateQueryException(QueryException.java:120)
at org.hibernate.QueryException.wrapWithQueryString(QueryException.java:103)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:220)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:144)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:113)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:73)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:158)
at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:611)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:720)
... 8 more
Caused by: org.hibernate.QueryException: Legacy-style query parameters (`?`) are no longer supported; use JPA-style ordinal parameters (e.g., `?1`) instead : from customer.Customer where id = ?
at org.hibernate.hql.internal.ast.HqlSqlWalker.generatePositionalParameter(HqlSqlWalker.java:1099)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.parameter(HqlSqlBaseWalker.java:3463)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.expr(HqlSqlBaseWalker.java:1374)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.exprOrSubquery(HqlSqlBaseWalker.java:4706)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.comparisonExpr(HqlSqlBaseWalker.java:4177)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.logicalExpr(HqlSqlBaseWalker.java:2138)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.whereClause(HqlSqlBaseWalker.java:815)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.query(HqlSqlBaseWalker.java:609)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.selectStatement(HqlSqlBaseWalker.java:313)
at org.hibernate.hql.internal.antlr.HqlSqlBaseWalker.statement(HqlSqlBaseWalker.java:261)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.analyze(QueryTranslatorImpl.java:272)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:192)
... 14 more4.分页检索
主要代码:
Query query = session.createQuery("from Customer");
//表示从第几个开始
query.setFirstResult(1);
//表示需要查询几条数据
query.setMaxResults(2);
List<Customer> list = query.list();
System.out.println(list);结果:

5.分页统计检索
主要代码:
1.count函数
Query query = session.createQuery("select count (*) from Customer");
Object count = query.uniqueResult();
System.out.println(count);2.sum函数(这里因为id是可以统计的类型,用作实验)
Query query = session.createQuery("select sum(id) from Customer");
List<Customer> list = query.list();
System.out.println(list);结果:


6.投影检索
主要代码:
Query query = session.createQuery("select username from Customer ");
List<Customer> list = query.list();
System.out.println(list);结果:

二,QBC查询
1.基本检索
主要代码:
Criteria criteria = session.createCriteria(Customer.class);
List<Customer> list = criteria.list();
System.out.println(list);结果:

2.排序查询
主要代码:
Criteria criteria = session.createCriteria(Customer.class);
criteria.addOrder(org.hibernate.criterion.Order.desc("id"));
List<Customer> list = criteria.list();
System.out.println(list);输出结果:

3.条件检索
主要代码:
Criteria criteria = session.createCriteria(Customer.class);
criteria.add(Restrictions.eq("username","AT&T"));
Object result = criteria.uniqueResult();
System.out.println(result);输出结果:

4.条件查询
主要代码:
Criteria criteria = session.createCriteria(Customer.class);
criteria.setFirstResult(2);
criteria.setMaxResults(1);
List<Customer> list = criteria.list();
System.out.println(list);输出结果:

5.统计分页查询
主要代码:
Criteria criteria = session.createCriteria(Customer.class);
criteria.setProjection(Projections.rowCount());
Object count = criteria.uniqueResult();
System.out.println(count);输出结果:

6.离线条件查询
主要代码:
DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Customer.class);
detachedCriteria.add(Restrictions.eq("username","AT&T"));
Criteria criteria = detachedCriteria.getExecutableCriteria(session);
Customer c = (Customer) criteria.uniqueResult();
System.out.println(c);输出结果:

三,SQL查询
SQL查询就是直接输入sql语句查询,这里只举个查询整个顾客列表信息的例子
主要代码:
SQLQuery query = session.createSQLQuery("select * from customer");
query.addEntity(Customer.class);
List<Customer> list = query.list();
System.out.println(list);输出结果:

版权声明:本文为chlei_原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。