三.Hibernate 执行复杂的sql
来源:互联网 发布:阿里云邮电脑客户端 编辑:程序博客网 时间:2024/06/10 05:21
1、使用SQL查询
使用SQL查询可以通过两种方式来实现:
(1)、利用Hibernate提供的SQLQuery对象执行。即可以通过Session对象的createSQLQuery()方法获取。如:
String sql = "select * from product limit 0,10";
SQLQuery query = session.createSQLQuery(sql);
List<Object[]> = query.list();
注意:查询结果返回的是一个Object的数组。
(2)、利用ResultMetaData对象来实现执行SQL语句,但是如果过多地使用这种方法就会对系统的性能产生影响,它将降低运行效率。通过addScalar()方法设置返回数据的类型可以减少ResultSetMetaData对象的使用而提高运行效率。如:
String sql = "select * from product limit 0,10";
SQLQuery sqlQuery = session.CreateSQLQuery();
sqlQuery.addScalar("id",Hibernate.INTEGER);
sqlQuery.addScalar("name",Hibernate.STRING);
sqlQuery.addScalar("addre",Hibernate.STRING);
sqlQuery.addScalar("des",Hibernate.STRING);
List<Object[]> list = sqlQuery.list();
2、返回SQL查询的持久对象
获取SQL查询的持久对象有三种方式实现:
方式1:Hibernate不仅能把查询到的记录封装为包含多个Object数组的List对象返回,还可以把每一条查询到的记录封装成持久对象后返回包含这些对象的List对象。如:
String sql = "select * from product limit 0,10";
SQLQuery sqlQuery = session.CreateSQLQuery();
sqlQuery.addEntity(Product .class);
List<Product> list = sqlQuery.list();
方式2:使用大括号指定查询的字段,然后通过SQLQuery对象对象的addEntity()方法关联SQL中的别名和持久化类确定要返回的List对象中的每个元素类型。如: String sql = "select{p.*} from Product p,Category c where p.category_id=c.id";
SQLQuery sqlQuery = session.CreateSQLQuery();
sqlQuery.addEntity("p",Product.class);
List<Product> list = sqlQuery.list();
方式3:同时使用SQLQuery对象的addScalar()方法和Transformers对象的aliasToBean()方法关联数据库的表与持久化类确定返回记录的各个字段与持久化类属性的对象对应关系。如: String sql = "select p.id,p.name from product p,Category c where p.category_id = c.id";
SQLQuery sqlQuery = session.createSQLQuery(sql);
sqlQuery.addScalar("id",Hibernate.INTEGER) .addScalar("name",Hibernate.STRING);
sqlQuery.setResultTransformer(Transformers.aliasToBean(Product.class));
List<Product> list = sqlQuery.list();
- 三.Hibernate 执行复杂的sql
- 使用JPA的createNativeQuery执行复杂sql
- 使用JPA的createNativeQuery执行复杂sql
- SqlServer复杂Sql执行
- hibernate执行sql的方法
- Hibernate 原生sql的执行
- SqlDependency执行复杂SQL语句
- 数据库_MySQL_复杂SQL的书写顺序与执行过程
- hibernate 执行 sql 的奇怪问题
- hibernate执行sql语句的总结
- hibernate执行sql语句的总结
- hibernate执行SQL时的问题
- Hibernate执行HQL与SQL的区别
- hibernate执行sql语句的总结
- 使用hibernate执行原生的sql
- hibernate执行sql语句的总结
- hibernate执行原生sql的别名问题
- 利用spring打印hibernate执行的sql
- 数论知识
- XML特殊字符(如:换行)
- wait和waitpid
- 多进程多组建性能测试
- JavaScript之闭包
- 三.Hibernate 执行复杂的sql
- UVA-12265 Selling Land
- JS各种小知识点
- 警告: Setting property 'source' to 'org.eclipse.jst.jee.server:ASW' did not find a matching property
- PHP的语言结构和函数的区别
- 通过在Git Bash中使用命令行方法上传文件到GitLab的步骤
- 朴素贝叶斯解决天气问题
- 统计一个字符串中数字的个数
- JSTAT分析