数据库几种查询方式总结

本文总结了数据库查询的多种方式,包括SQL查询、HQL、QBC(Criteria)和对象导航查询。HQL作为面向对象的查询,适合各种情况但动态条件构造不便;QBC则适用于动态查询,而nativesql在特定数据库特性利用上不可或缺。理解每种查询方式的特点,有助于优化数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库查询有sql语句,HQL,QBC,OID对象标识符,对象导航查询,JPA查询

1.分析sql查询和hql查询

查询一列:返回的是:List,查询多列:返回的是List<object[]>数组集合。
解析:何时查询出来是List<Object[]>,何时是javabean对象。
1).select * from person:使用createSQLQuery查询出来时List<Object[]>的形式。
试想:如果每次查询出来都是数组,每次我们都去操作数组,那将会非常麻烦
所以:这个也是可以转换成映射javabean的形式的,转换方法如下:
query.addEntity(Person.class).list()通过addEntity(Person.class)就可以实现List转换成功。否则将会出现异常。
那么看完成sql语句还需要addEntity来进行转换,那么就想起Hql语句的好处来了,Hql语句完全不需要转换,直接操作javabean类,这样变得简单多了。
例如:Hql语句:from Person where name = :aa
Query query = openSession.createQuery(hql).setParameter(“aa”,“张三”);
List list = query.list();
查询出来结果就直接封装到javabean中,这样hibernate的核心价值就体现出来了。真的不需要操作数据库,操作对象就可以解决一切问题。

2.hql投影查询

select new User(username,password) from User;
需要提供对应参数的构造方法

3.qbc(criteria)离线查询

DetachedCriteria dCriteria = DetachedCriteria.forClass(Student.class);
//模糊查询
dCriteria.add(Restrictions.like(“stu_name”, “%三%”));
//排序查询
dCriteria.addOrder(Order.desc(“stu_age”));
//聚合
dCriteria.setProjection(Projections.count(“id”));

4.对象导航查询

1.使用主键id加载对象(load(),get());
2.通过对象导航,比如通过stu.getTeam()得到team的实例;
3 使用hql;
4使用qbc(query by criteria)

5直接使用sql语句取得记录集;

一般都使用后面三种方式.
注意.hql是面向对象的查询.语法和sql是基本一样的.不区分大小写的,但是注意的是对与对象.必须遵循对象的大小写.因为hql是对象查询…同时我们必须清楚.hql只能取得对象,而不支持uid(update,insert.delete)
小结:
hql功能很强大,适合各种情况,但是动态条件查询构造起来很不方便.
criteria 最适合动态查询,但不太适合统计查询,qbe还不够强大.只适合简单的查询.
QBE(IBM开发)是Query By Example(通过例子进行查询)的简称,即实例查询语言。它是一种基于图形的点击式查询数据库的方法。
nativesql可以实现特定的数据库的sql.但是可移植性并不好.

针对web应用来说,大部分常规查询都是动态条件查询,所以首先criteria,并且h3提供的detachedcriteria,可以在web层构造好detachedcriteria再进入session执行查询.但是涉及到统计查询和非常复杂的关联查询.criteria就无能为力了.这种情况下选择使用hql.最后如果涉及到使用某些数据库的特性的时候,就只有选择nativesql了.

hql常用来进行实体检索.这个时候要注意返回的list中的元素是实体还是实体数组.如果hql进行实体属性查询,当查询两个以上的属性时,list中的元素就是属性数组了.

qbc最大的用途在与动态查询.它不会忽略配置文件中的预先抓取策略.

使用本地sql检索必须检索对象的所有属性.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值