问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

hibernatr 在控制台query查询条件是中文查不到任何信息,英文可以_百度...

发布网友 发布时间:2022-04-26 09:24

我来回答

2个回答

热心网友 时间:2022-04-10 02:00

Hibernate 中HQL语句
本章介绍了Hibernate的几种主要检索方式:HQL检索方式、QBC检索方式、SQL检索方式。HQL是Hibernate Query Language的缩写,是官方推荐的查询语言。QBC是Query By Criteria的缩写,是Hibernate提供的一个查询接口。Hibernate是一个轻量级的框架,它允许使用原始SQL语句查询数据库。
1.1 HQL基础
HQL是Hiberante官方推荐的Hibernate检索方式,它使用类似SQL的查询语言,以面向对象的方式从数据库中查询。可以使用HQL查询具有继承、多态和关联关系的数据。在检索数据时应优先考虑使用HQL方式。
1.1.1 默认数据库表和数据
在讲解本章时,在没有特殊说明时,用到的数据库均为joblog,也就是在第4章建立的数据库。joblog中添加了3个表:学生表student、课程表course和选课表sc。
学生表student中各字段的结构如图6-1所示,字段的中文含义在Comment列中。

图6-1 学生表的数据结构
学生表student中的数据如图6-2所示,没有特殊说明时,用到的均为这6条记录。
此处仍然使用在第4章建立的HibernateProject项目,但是这里新建了一个包hibernate.ch06,这个包存放本章中的所有代码。在hibernate.ch06包中建立学生表对应的持久化类Student.java,代码如下。

图6-2 学生表中的数据
package hibernate.ch06;

// 学生类
public class Student {

private Integer id; // 对象标识符
private Integer sno;// 学号
private String sname; // 姓名
private String ssex;// 性别
private String sdept; // 所在系别
private Integer sage; // 年龄
private String saddress; // 籍贯
…… //省略了所有的get/set访问器

}
课程表course中的各个字段的结构如图6-3所示,字段的中文含义在Comment列中。

图6-3 课程表的结构
课程表中的数据如图6-4所示,如果没有特殊说明,用到的均为这4条记录。

图6-4 课程表的数据
在hibernate.ch06中新建持久化类Course.java类,代码如下。
package hibernate.ch06;

// 课程类
public class Course {

private Integer id; // 对象标识符
private Integer cno;// 课程号
private String cname; // 课程名
private Integer Ccredit; // 学分
…… //省略了get/set访问器
}
选修表sc(sc为student-course的缩写)的结构如图6-5所示,字段的中文含义在Comment列中。

图6-5 选修表的结构
选修表中的数据如图6-6所示,没有特殊说明时,用到的均为这5条记录。

图6-6 选修表的数据
在hibernate.ch06中新建持久化类SC.java,SC.java的代码如下。
package hibernate.ch06;
// 选课类
public class SC implements java.io.Serializable {

private Integer id; // id
private Integer sno; // 学号
private Integer cno; // 课程号
private Integer grade; // 成绩

public SC() {

}
…… // 省略get/set访问器
}
后面的章节中将用这3个表和3个持久化类进行讲解。
1.1.2 检索类的所有对象
使用HQL语句可以检索出一个类的所有对象,如HQL语句“from Student”表示检索Student类的所有对象。下面的程序检索学生类的所有对象。
Query query = session.createQuery("from Student"); // 创建Query对象
List list = query.list(); // 执行查询

// 以下代码做显示用,以后不再写出来
Iterator it = list.iterator();
while (it.hasNext()) {
Student stu = (Student) it.next();
System.out.println("id" + stu.getId());
System.out.println("name" + stu.getSname());
System.out.println("\n");
}
session.createQuery()以HQL查询语句为参数,生成一个查询对象。本例中的HQL语句为“from Student”,这是from子句,格式如下。
from 类名
其中,类名可以为类的全限定名,如:
from hibernate.ch06.Student
Hibernate使用自动引入功能(auto import),会自动寻找需要的类,所以不推荐使用类的全限定名。注意,类名区分大小写,如果写成from student,将会抛出以下异常。
java.lang.NoClassDefFoundError: hibernate/ch06/student (wrong name: hibernate/ch06/Student)
HQL关键字不区分大小写,FROM、from和From是一样的。
调用query.list()时,真正开始执行HQL查询语句,并把查询的结果放在List中。
本例中查询的是Student类中的所有属性,如果查询Student类中的某一个或某几个属性,如查询所有学生的姓名和所在系,需要用到属性查询。
1.1.3 检索类的某几个属性
与SQL语句类似,HQL语句可以检索类的某一个或者某几个属性。以下代码查询所有学生的姓名和所在系。
// 创建Query对象
Query query = session.createQuery("select Student.sname,Student.sdept from Student");
List list = query.list(); // 执行查询
// 以下代码显示查询的信息
Iterator it = list.iterator();
while (it.hasNext()) {
Object[] stu = (Object[]) it.next();
System.out.println("id" + stu[0]);
System.out.println("name" + stu[1]);
System.out.println("\n");
}
属性查询使用select关键字,属性查询的格式如下。
select 属性1,属性2,… from 类名
属性前可以加上类名加以限定,如:
select 属性1,属性2,… from 类名
但一般没有必要。
属性查询区分大小写,上面的代码中如果写成:
select SNAME,Sdept from Student
将抛出异常,提示找不到属性SNAME和属性Sdept。
查询结果将只显示查询的属性列。
属性查询的结果,对于用it.next()获得的每条记录,可以存储在Object[]数组中,以便进行存取。
1.1.4 指定别名
在查询时,可以用关键字as指定查询的别名,指定别名可以简化查询,有时必需指定别名才能进行查询。以下代码查询学号中含有4的学生的姓名和所在系。
select s.sname,s.sdept from Student as s where s.sno like '%4%'from Student s
s就是类Student的别名。注意as可以省略,即下面的查询语句和上面的语句是等效的。
select s.sname,s.sdept from Student s where s.sno like '%4%'from Student s
1.1.5 where条件子句
where条件子句跟SQL中的where条件子句类似,它检索符合条件的对象。例如,查询所有所在系别为计算机系的学生:
select s.sname,s.sdept from Student s where s.dept=’计算机’
where子句指定查询的条件,其语法和SQL类似。
在where子句中可以指定比较运算符:>、>=、<、<=、<>,其含义分别为大于、大于等于、小于、小于等于、不等于。
查询年龄在22到23岁的学生:
from Student s where s.sage>=22 and s.sage<=23
在where子句中指定查询的属性是否为null:is null、is not null,其含义分别表示为空和不为空。
查询所在籍贯为空的学生:
from Student s where s.saddress is null
1.1.6 使用distinct过滤掉重复值
使用distinct关键字将去掉结果中的重复值,只检索符合条件的对象。如下面的例子检索学生实例中的不重复的年龄。
Session session=Hsf.currentSession();//创建Session
String hql="select distinct s.sage from Student s"; //HQL查询语句
Query query=session.createQuery(hql);//创建查询
List list=query.list(); //执行查询
检索的结果如下,可见结果中去掉了一个重复的22岁。
20
21
22
23
24

热心网友 时间:2022-04-10 03:18

的事实个发反反复复反反复复反反复复反反复复反复反反复复反复
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
街头篮球手游中锋攻略汇总 C位攻略大全 街头篮球手游中锋有什么技巧 中锋C技巧详解 php一个表单提交数据怎么区分开,隐藏域可以吗,如果可以怎么用。 梦见牙掉光了什么预兆 梦见牙齿掉完了是什么征兆 梦见牙齿全掉了是什么预兆 梦见一口牙全部掉了是什么预兆 教师年度考核不认课的领导班子成员,干的工作不少,怎样考核办法公平... 湖北省郧西县义务教育学校绩效工资实施办法绩效工资总量和水平的... 事业单位年底是否有绩效奖金的 有什莫方法可以清理地址栏而不用上网助手? 给我些好的毕业赠言啊,急用!~谢谢了~~ 磁力是一种什么现象 湖南万信大数据有限公司怎么样? 五金厂喷漆废气怎么处理? 再谈querySelector和querySelectorAll的区别与联系 现实种菜群 指南针驾校好吗? 怎么清理IE中的网站地址??? 如何测量磁力?? 上海浦东哪里有真实版开心农场和租地种菜?最好有自助烧烤的! 最新的五金十大品牌排名 IE地址清理 开出转账支票一张,支付万信机械厂应付利润5000元,怎么做会计分录 中国五金十大品牌到底有哪些? 现实版开心农场 磁力的问题(急急急) 地址栏如何清理 我想学广东话```跟身边的人学又有点不好意思``` 磁力是谁发现的又有什么小故事呢 360安全卫士可以清理ip地址吗 五金厂废水怎么处理? 万信财富叫我追加十万解封成为vip会员才能提现,我都投了三万多说我该怎么办? 求一篇作文《生活给我智慧》 世界上第一位身体里有磁力的人是谁? 怎样把遨游浏览器的地址栏清理干净??? 五金厂是干什么的,女孩子可以干的吗? c#里有query方法么? 青岛万信普惠信息咨询有限公司怎么样? 为什么说磁力是电场力的相对论效应 分数除法应用题试题(要答案,小学的) 彗星DNS优化器 留下的DNS地址怎么清理啊 有人知道磁力“高斯”这个单位吗? 牛哑巴鸟学名 五金厂车间通风排异味选负压风机好吗? 地址栏中的痕迹如何清理??? 五金品牌排名前十的属广东最多,例如:雅洁、汇泰龙、顶固、摩登、斯力高,为何永康作为五金之都却没有一 中航精机的公司简介 我的电脑地址栏里有很多垃圾地址,请问如何清理它 当很多事堆在一起的时候怎么办?怎么处理?