Hibernate Hql语句查询类部分属性避坑之路

1.Hibernate 是什么?

百度所得:Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。

自身体会:全自动ORM框架,直接操作映射类对象来生成SQL语句查询,开发者可选是否手写SQL,比Mybatis中操作SQL比起来易用,而且Hibernate也支持手动编写Sql,可选性多。

Hibernate执行过程:

Hibernate Hql语句查询类部分属性避坑之路

2.HQL 是什么?

百度所得:HQL是Hibernate Query Language(Hibernate 查询语言)的缩写,提供更加丰富灵活、更为强大的查询能力;HQL更接近SQL语句查询语法。

3.公司技术中使用Hibernate,本人对Hibernate一知半解,搜刮网上资料后对HQL语句的理解。

3.1 Hql 查整个对象

table t_student 

columns id , name , age , gender ,phone.

class Student

private field  id , name , age , gender ,phone. // 属性类型推荐,基础类型使用封装类,引用你随意。

method get,set

constructor 默认

无条件查询

最简版 " from Student ", 返回是List<Student >

" select s from Student s " 使用别名查询等价于" from Student " , 返回是List<Student >

有条件查询,怎么写呢?

" from Student s where s. id  = value "  , 语法:where 中 别名.属性名 = 值 ,返回是List<Student >

3.2 Hql 查询类部分属性

无条件查询,怎么写?

*** 部分属性查询避坑
" Select s.id,s.name from Student s ", 返回是List<Object[]>,这不我想要的结果。

Hibernate号称全自动ORM实现,所以要使用类构造器来构建对象
class Student 
insert constructor(id,name) 来满足下面查询
" Select new Student(id,name) from Student ",返回是List<Student>,不过实例中只有 id,name 有实际值,其他属性都是默认值。

" Select new Student(id, name, age , gender ,phone) from Student " 等价于 " from Student " ,

推荐使用 " from Student ",理由很简单没必要给自己下绊子。

有条件查询

" Select new Student(id, name, age , gender ,phone) from Student s where s.id = value "

语法:where 中 别名.属性名 = 值 ,返回是List<Student >

今天到这了,口干了喝水去了,下次见面说下Hql连表查询

参考网址:

https://www.cnblogs.com/beautifulFuture/p/9565873.html