hibernate_Hql语句

Hibernate Query Language

 

1) 语法

FROM 实体名称[as 别名] WHERE key = value

Key:必须是实体的属性名称。

执行时:session.createQuery(sHql);

 

:

String sHql = "from User";

Query query = session.createQuery(sHql);

List<User> users = query.list();

库中数据:

 

for (User u : users) {

System.out.println(u.getId() + "===" + u.getName());

}

输出:

 

2) 分页

String sHql = "from User";

Query query = session.createQuery(sHql);

query.setFirstResult(1);// pageNo

query.setMaxResults(3);// pageSize

List<User> users = query.list();

 

3) 使用select

Hql语句是没有select的,如果非要加上select,或者希望获取的是部分字段而不是全部时需要使用select

但是select返回的是object,不是对应的po实体。

有两种方法进行转换:

1.使用构造函数

如:给User对象添加一个构造函数:

    public User(String name, Double height){

    this.name = name;

    this.height = height;

}

如下调用:

String sHql = "select new User(u.name, u.height) from User u";

Query query = session.createQuery(sHql);

List<User> users = query.list();

for (User u : users) {

System.out.println(u.getId() + "===" + u.getName() + "===" + u.getHeight());

}

结果如下:

 

2.sql返回对象(见sql语句章节)

String sql = "select * from user";

SQLQuery query = session.createSQLQuery(sql);

query.addEntity(User.class);

List<User> users = query.list();

for (User u : users) {

System.out.println(u.getId() + "===" + u.getName() + "===" + u.getHeight());

}

 

 

3.下面两种方法用于获取数据,不转对象,并不常用,先列在这里。

使用map

 

使用list

 

 

4) 获取一条记录

如果使用hql语句,获取到的是list。如:

List<User> users = query.list();

但如果明知道where条件下最多只会返回一条记录。又使用users.get(0);就显得代码咯唆了。可以使用如下:

String sHql = "from User where id = 1";

User u = (User) session.createQuery(sHql).uniqueResult();

System.out.println(u.getId() + "===" + u.getName() + "===" + u.getHeight());

如果是通过主键获取的话使用getload更好。

一是方便,二是性能好。

sessionFactory中有一级缓存,当使用了getload后,会将结果记录到缓存中,当下次有相同查询时直接读取结果,而不会查库。

即:下面的两条语句将只会查一次库。

User u = (User) session.get(User.class, Long.valueOf(1));

User u2 = (User) session.get(User.class, Long.valueOf(1));

 

5) 聚合函数

聚合函数返回的肯定是一个值,如:

 

select avg(height) from user

 

select max(height) from user

 

Hql代码如下:

String sHql = "select max(height) from User";

Double u = (Double) session.createQuery(sHql).uniqueResult();

System.out.println(u);

 

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值