码迷,mamicode.com
首页 > Web开发 > 详细

Hibernate学习(六) HQL

时间:2015-12-31 13:01:41      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:hibernate hql 实例

Hql语句学习:

1Hql初步认识

① Hql是面向对象查询语言,查询时用的是类名和属性名;Sql 查询时用的是表名和字段名

② 大小写敏感

③ 包名:如果类名没有重复的话,不用写包名,如果不同包下面有相同的类,那么需要加包名。

(2)hql使用

a. 获取唯一值

String hql="select count(*) from Student";

Query q=session.createQuery(hql);

Number number=(Number) q.uniqueResult();//返回一条数据

System.out.println(number.intValue());

b. 获取一张表所有字段

String  sqlString="from Student";

Query query=session.createQuery(sqlString);

List list=query.list();

for(int i=0;i<list.size();i++)

{

Student student=(Student) list.get(i);

System.out.println(student.getName()+" id:"+student.getId());

}

c. 返回一张表部分字段

String hqlString="select s.sNo,s.name  from Student s";

Query query=session.createQuery(hqlString);

List<Object[]> list=query.list();

for(int i=0;i<list.size();i++)

{

Object[] objects=list.get(i);

System.out.println(objects[0]+"---"+objects[1]);

}

d. 两张表连接查询(例如:一对一关系中)

String hqlString="select c.name,c.addressId.city,c.addressId.country  from CompanyXML c";

Query query=session.createQuery(hqlString);

List<Object[]> list=query.list();

for(int i=0;i<list.size();i++)

{

Object[] objects=list.get(i);

System.out.println(objects[0]+"---"+objects[1]);

}

e. 使用Map封装一行记录(起别名,相当于键名)

String hqlString="select new map(c.name as name,c.addressId.city as city,c.addressId.country as country)  from CompanyXML c";

Query query=session.createQuery(hqlString);

List<Map> list=query.list();

for(int i=0;i<list.size();i++)

{

Map map=list.get(i);

System.out.println(map.get("name")+"---"+map.get("city"));

}

f. javaBean封装(获取部分字段)  可以通过构造函数封装

String  sqlString="select new Student(s.sNo,s.name,s.schoolName) from Student s";

Query query=session.createQuery(sqlString);

List list=query.list();

for(int i=0;i<list.size();i++)

{

Student student=(Student) list.get(i);

System.out.println(student.getName()+" id:"+student.getSchoolName());

}

 

g. Where字句的用法 条件查询

//String hqltestString="from Student s where s.name=? ";//通过位置进行查找,参数索引从0开始

String hqltestString="from Student s where s.name=:name ";//动态绑定 通过名字进行绑定

Query query=session.createQuery(hqltestString);

query.setString("name", "ytt");

List list=query.list();

for(int i=0;i<list.size();i++)

{

Student student=(Student) list.get(i);

System.out.println(student.getName()+" id:"+student.getSchoolName());

}

h. 分页查询

String  sqlString="from Student";

Query query=session.createQuery(sqlString);

query.setFirstResult(0);//从第几条开始

query.setMaxResults(10);//一页显示多少条

List list=query.list();

for(int i=0;i<list.size();i++)

{

Student student=(Student) list.get(i);

System.out.println(student.getName()+" id:"+student.getId());

}

i. 内连接、外连接

String hqljoin="select s.name,b.picture from Student s ,Book b";//如果使用join会出现异常

Query query=session.createQuery(hqljoin);

List<Object[]> list=query.list();

for(int i=0;i<list.size();i++)

{

Object[] object=list.get(i);

System.out.println(object[0]+"--"+object[1]);

}

(3)Sql语句的使用

原生sql(直接使用sql语句就行 和数据库中的写法相同,查询时使用SQLQuery)

String sqlString="select s.sNo,s.name  from Student s where s.name=:name";

SQLQuery sqlQuery=session.createSQLQuery(sqlString);

sqlQuery.setString("name", "ytt");

//sqlQuery.addEntity(Student.class);//相当于from Student,结果可以与Student表中的数据相对应起来,直接通过javaBean获取属性即可

List<Object[]> list1=sqlQuery.list();

for(int i=0;i<list1.size();i++)

{

Object[] object=list1.get(i);

System.out.println(object[0]+"--"+object[1]);

}


Hibernate学习(六) HQL

标签:hibernate hql 实例

原文地址:http://yt0116.blog.51cto.com/9221014/1730284

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!