HQL与SQL有何不同:
1.HQL
- 对查询条件进行了面向对象封装,符合编程人员的思维方式,格式:from + 类名 + 类对象 + where + 对象的属性
- 区分大小写,关键字不区分大小写
- 从下标0开始计算位置(hibernate5之后不支持)
- 支持命名参数
2.SQL
- sql是面向数据库表查询,格式:from + 表名 + where + 表中字段
- 不区分大小写
- 从顺序1开始计算位置
- 不支持:命名参数
处理返回的结果集
- 单个对象
- 多个列段
- object【】
- 对象(多个列段、全部)
- Map
hsql
object【】
/**
* 查两个列段及以上,默认返回的是Object【】
*/
@Test
public void testList3() {
Query query = session.createQuery("select b.bookId,b.bookName as ss from Book b");
List<Object[]> list = query.list();
for (Object[] b : list) {
System.out.println(Arrays.toString(b));
}
}
单个对象
/**
* 查两个列段及以上,也可返回对象,前提是有对应的构造函数
*/
@Test
public void testList5() {
Query query = session.createQuery("select new Book(b.bookId,b.bookName) from Book b");
List<Book> list = query.list();
for (Book b : list) {
System.out.println(b);
}
}
返回map
/**
* 注意map是函数,所以不区分大小写,返回的是map集合
*/
@Test
public void testList4() {
Query query = session.createQuery("select new mAp(b.bookId,b.bookName) from Book b");
List<Map> list = query.list();
for (Map b : list) {
System.out.println(b);
}
}