Hibernate学习笔记之三种查询方式
2015-06-11 19:58
357 查看
1.三种查询方式
(1)HQL
HQL是完成面向对象的查询语句,具备继承,多态和关联等特性.它提供了非常强大的查询功能,在官方开发手册中,也将HQL作为推荐的查询模式.HQL子句本身大小写无关,但是其中出现的类名和属性名必须注意大小写区分.
(2)Criteria Queries 标准化对象查询
通过面向对象化的设计,将数据查询条件封装为一个对象.简单来讲,Criteria Query可以看作是传统SQL的对象化表示.
优点:可读性好,符合java程序员的编码习惯.
缺点:不够成熟,不支持投影或统计函数.
因为它比较符合java程序员的编码习惯,所以一些ORM实现中都提供了类似的实现机制,如Apache OJB
(3)Native SQL Queries
原生SQL查询,使用数据库sql语句进行查询
2.HQL示例
查询语句:
指定列查询
3.Creteria Query示例
4.原生SQL查询示例
(1)HQL
HQL是完成面向对象的查询语句,具备继承,多态和关联等特性.它提供了非常强大的查询功能,在官方开发手册中,也将HQL作为推荐的查询模式.HQL子句本身大小写无关,但是其中出现的类名和属性名必须注意大小写区分.
(2)Criteria Queries 标准化对象查询
通过面向对象化的设计,将数据查询条件封装为一个对象.简单来讲,Criteria Query可以看作是传统SQL的对象化表示.
优点:可读性好,符合java程序员的编码习惯.
缺点:不够成熟,不支持投影或统计函数.
因为它比较符合java程序员的编码习惯,所以一些ORM实现中都提供了类似的实现机制,如Apache OJB
(3)Native SQL Queries
原生SQL查询,使用数据库sql语句进行查询
2.HQL示例
查询语句:
public void hqlQuery(){ Session session = HBUtils.getSession(); org.hibernate.Query query = session.createQuery("from UserInfo as user where name=?"); query.setString(0, "windskymr"); List<UserInfo> list = query.list(); System.out.println(list); }更新语句
public void hqlUpdate(){ Session session = HBUtils.getSession(); Transaction tx = session.beginTransaction(); org.hibernate.Query query = session.createQuery("update UserInfo set name=? where name=?"); query.setString(0, "windskymr2"); query.setString(1, "windskymr"); query.executeUpdate(); tx.commit(); }
指定列查询
//指定列查询 public void hqlQueryColumns(){ Session session = HBUtils.getSession(); org.hibernate.Query query = session.createQuery("select id,name from UserInfo"); List list = query.list(); for(Object o: list){ Object[] arr = (Object[])o; System.out.println(arr[0]+"," + arr[1]); } session.close(); }输出
Hibernate: select userinfo0_.id as col_0_0_, userinfo0_.name as col_1_0_ from userinfo userinfo0_ 1,windskymr2 2,naruto 3,fengsheng 13,testSaveMethod列查询时查询结果List中的元素为Object[]
3.Creteria Query示例
//标准对象化查询 public void creteriaQuery(){ Session session = HBUtils.getSession(); org.hibernate.Criteria criteria = session.createCriteria(UserInfo.class); UserInfo user = new UserInfo(); user.setId(1); user.setName("windskymr2"); //添加条件 org.hibernate.criterion.Criterion criterion = org.hibernate.criterion.Example.create(user); criteria.add(criterion); List<UserInfo> list = criteria.list(); System.out.println(list); session.close(); }
//常用条件 Restrictions.eq("name", ""); Restrictions.ne("name", ""); Restrictions.like("name", ""); Restrictions.isNull("name");
4.原生SQL查询示例
public void sqlQuery(){ Session session = HBUtils.getSession(); org.hibernate.SQLQuery query = session.createSQLQuery("select * from userinfo"); query.addEntity(UserInfo.class); List<UserInfo> users = query.list(); System.out.println(users); session.close(); }
相关文章推荐
- x210v3开发板u-boot-2012.10移植之九---运行阵地转移,赶紧把BL2扔到内存
- SQL结构化查询语言及Mysql基本操作
- hdu 3631 Shortest Path(Floyd)
- 设计模式之 - 总结
- 汇编语言学习笔记(5)——[bx]和loop
- Karma和Jasmine自动化单元测试
- remove-nth-node-from-end-of-list
- 探索 OpenStack 之(8):Neutron 深入探索之 OVS + GRE 之 完整网络流程 篇(转)
- Applet 数字签名技术完全攻略
- JavaScript继承详解
- iBokan_ios80_自学系列_1(测试效果)
- UITableView小知识点(二)
- x210v3开发板u-boot-2012.10移植之八---DDR2初始化我也能搞定
- 阿凡达是脸,教你的脸在线(包括URL和使用)
- HttpUrlConnection retryPost 重发
- 32位操作系统和64位操作系统的数据类型大小
- Android开发者的演示工具(真机测试)——asm.jar
- mysql 主从切换
- CentOS7 下安装telnet服务
- php常用知识积累