24.Hibernate-各种类型的查询.md
目录
1.查询的类别
按照查询的方式分为面向对象和非面向对象
面向对象
HQL查询:面向对象方式,可以跨数据库,但是需要SQL基础。最常用的方式。查询的对象是类和类的属性,不是表和字段!
Criteria查询:面向对象方式,可以跨数据库,不需要SQL基础
非面向对象方式
- SQL查询:非面向对象方式,不可以跨数据库,可以执行复杂的SQL语句
2.实例
上个例子中的App类改造后:
package per.liyue.code.hibernatehello;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;
public class AppQuery {
private static SessionFactory sessionFactory;
static {
sessionFactory = new Configuration().configure().buildSessionFactory();
}
/*
* HQL查询
*/
@Test
public void HQLDemo() {
Session session = sessionFactory.openSession();
Transaction transcation = session.beginTransaction();
// 面向对象方式:使用SQL方式的查询,但是查询的对象不是表,而是类,查询的条件不是字段,而是类的属性
Query query = session.createQuery("from Employee where empName = '李四'");
List<Employee> list = query.list();
System.out.println("**********使用HQL查询");
System.out.println(list);
transcation.commit();
session.close();
sessionFactory.close();
}
/*
* Criteria查询
*/
@Test
public void CriteriaDemo() {
Session session = sessionFactory.openSession();
Transaction transcation = session.beginTransaction();
// 面向对象方式:使用Criteria查询,和SQL无关
Criteria criteria = session.createCriteria(Employee.class);
// 条件查询类的属性
criteria.add(Restrictions.eq("empId", 2));
List<Employee> list = criteria.list();
System.out.println("**********使用Criteria查询");
System.out.println(list);
transcation.commit();
session.close();
sessionFactory.close();
}
/*
* SQL查询
*/
@Test
public void SqlDemo() {
Session session = sessionFactory.openSession();
Transaction transcation = session.beginTransaction();
//非面向对象查询:适合复杂的SQL语句,但是不跨数据库!!!
String sql = "select * from employee as e where e.EmpId = 6";
//如果不加封装,那么查询出来的list不是想要得到的值
//SQLQuery query = session.createSQLQuery(sql);
SQLQuery query = session.createSQLQuery(sql).addEntity(Employee.class);
List list = query.list();
System.out.println("**********使用SQL查询");
System.out.println(list);
transcation.commit();
session.close();
sessionFactory.close();
}
}
24.Hibernate-各种类型的查询.md的更多相关文章
- [转载]Hibernate如何提升数据库查询的性能
目录(?)[-] 数据库查询性能的提升也是涉及到开发中的各个阶段在开发中选用正确的查询方法无疑是最基础也最简单的 SQL语句的优化 使用正确的查询方法 使用正确的抓取策略 Hibernate的性能优化 ...
- hibernate将本地SQL查询结果封装成对象
hibernate将本地SQL查询结果封装成对象 不知道大家有没有碰过这种情况,迫于很多情况只能用native SQL来查询(如:复杂统计等),然而使用native查询后,结果会被放到object里, ...
- hibernate使用原生SQL查询返回结果集的处理
今天没事的时候,看到公司框架里有一个用原生SQL写的函数,说实在以前自己也干过这事,但好久都没有用,都忘得差不多了,现在基本都是用的hql语句来查询结果.hibernate中使用createSQLQu ...
- 13.hibernate的native sql查询(转自xiaoluo501395377)
hibernate的native sql查询 在我们的hibernate中,除了我们常用的HQL查询以外,还非常好的支持了原生的SQL查询,那么我们既然使用了hibernate,为什么不都采用hi ...
- Hibernate SQLQuery 原生SQL 查询及返回结果集处理-1
第一篇:官方文档的处理方法,摘自官方 在迁移原先用JDBC/SQL实现的系统,难免需要采用hibernat native sql支持. 1.使用SQLQuery hibernate对原生SQL查询执行 ...
- Hibernate学习---单表查询
我们都知道SQL是非常强大的,为什么这么说呢?相信学过数据库原理的同学们都深有体会,SQL语句变化无穷,好毫不夸张的说可以实现任意符合我们需要的数据库操作,既然前面讲到Hibernate非常强大,所以 ...
- Hibernate 的原生 SQL 查询
Hibernate除了支持HQL查询外,还支持原生SQL查询. 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.createSQLQuery()获取 ...
- hibernate的native sql查询
在我们的hibernate中,除了我们常用的HQL查询以外,还非常好的支持了原生的SQL查询,那么我们既然使用了hibernate,为什么不都采用hibernate推荐的HQL查询语句呢?这是因为HQ ...
- Spring Hibernate JPA 联表查询 复杂查询(转)
今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的? 是.如果hibernate认为jpa的注解够用,就直接用.否则会弄一个自己的出来作为补充. 2)jpa和hibern ...
随机推荐
- java 根据日期获取星期
private String getWeek(String date) { String[] arr=date.split("-"); Calendar calendar = Ca ...
- openstack cpu pinning
为了减少CPU竞争,提高CPU cache命中率,可以把guest的vcpu pin到host的物理CPU上. 在openstack中,可以添加以下到flavor extra specs: hw:cp ...
- Struts2学习:HelloWorld
项目结构: 1.用IDEA新建一个SpringBoot+Maven的项目 2.新建的项目是没有webapp.WEB-INF.与web.xml文件的,需要在下图中添加: 3.在pom.xml引入stru ...
- idea error:Command line is too long
今天在正在本地运行的项目中写了一个无关项目的测试类,执行main函数时报错如下: 解决方案: 找到项目根目录下的.idea/workspace.xml,添加内容: <component name ...
- TreeSet多字段排序
package st; public class PersonBean implements Comparable<Object>{ private String name; privat ...
- python学习之----Lambda表达式
Lambda 表达式本质上就是一个函数,可以作为其他函数的变量使用:也就是说,一个函 数不是定义成f(x, y),而是定义成f(g(x), y),或f(g(x), h(x)) 的形式. Beautif ...
- 剑指Offer(二):替换空格
说明: 1.本系列是根据<剑指Offer>这个系列做的一个小笔记. 2.直接动力是因为师兄师姐找工作很难,而且机械出生的我面试算法更难. 3.刚开始准备刷LeetCode.LintCode ...
- threading的join功能
you can go here to see the details. 我的理解:使用join后,使主线程执行完后(挂起),子线程再执行完后,主线程才结束.否则主线程会直接结束导致子线程不会执行. i ...
- Install Python on Mac (Anaconda)
Install Python on Mac (Anaconda) 标签(空格分隔): 运维 This blog is copy from the link: https://medium.com/@G ...
- 如何将相册中的动态GIF图转化成NSData类型
http://www.cocoachina.com/bbs/read.php?tid=151776