码迷,mamicode.com
首页 > 数据库 > 详细

第十一节:Hibernate 原生Sql

时间:2020-03-28 18:30:20      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:一个   row   cal   字符   返回   大写   过程   语法   nat   

Hibernate 原生 SQL

原生 SQL

如果你想使用数据库特定的功能如查询提示或 Oracle 中的 CONNECT 关键字的话,你可以使用原生 SQL 数据库来表达查询。Hibernate 3.x 允许您为所有的创建,更新,删除,和加载操作指定手写 SQL ,包括存储过程。

您的应用程序会在会话界面用 createSQLQuery() 方法创建一个原生 SQL 查询:

public SQLQuery createSQLQuery(String sqlString) throws HibernateException

当你通过一个包含 SQL 查询的 createsqlquery() 方法的字符串时,你可以将 SQL 的结果与现有的 Hibernate 实体,一个连接,或一个标量结果分别使用 addEntity(), addJoin(), 和 addScalar() 方法进行关联。

标量查询

最基本的 SQL 查询是从一个或多个列表中获取一个标量(值)列表。以下是使用原生 SQL 进行获取标量的值的语法:

String sql = "SELECT first_name, salary FROM EMPLOYEE"; SQLQuery query = session.createSQLQuery(sql); query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP); List results = query.list();

装载对象

Query query = getHibernateTemplate().getSessionFactory().getCurrentSession().createSQLQuery( "select proj_employee.employee_no as employeeNo, ... .setResultTransformer(Transformers.aliasToBean(User.class));

通常字段名无法匹配需要添加 addScalar,核心原因,Hibernate对返回的字段不做处理,有可能时大写返回的,但是添加个Scalar就能识别,不知道这个坑爹设计谁搞的。

List resultWithAliasedBean = s.createSQLQuery( "SELECT st.name as studentName, co.description as courseDescription " + "FROM Enrolment e " + "INNER JOIN Student st on e.studentId=st.studentId " + "INNER JOIN Course co on e.courseCode=co.courseCode") .addScalar("studentName") .addScalar("courseDescription") .setResultTransformer( Transformers.aliasToBean(StudentDTO.class)) .list();

 

 

实体查询

以上的查询都是关于返回标量值的查询,只是基础性地返回结果集中的“原始”值。以下是从原生 SQL 查询中通过 addEntity() 方法获取实体对象整体的语法:

String sql = "SELECT * FROM EMPLOYEE"; SQLQuery query = session.createSQLQuery(sql); query.addEntity(Employee.class); List results = query.list();

指定 SQL 查询

以下是从原生 SQL 查询中通过 addEntity() 方法和使用指定 SQL 查询来获取实体对象整体的语法:

String sql = "SELECT * FROM EMPLOYEE WHERE id = :employee_id"; SQLQuery query = session.createSQLQuery(sql); query.addEntity(Employee.class); query.setParameter("employee_id", 10); List results = query.list();

 

第十一节:Hibernate 原生Sql

标签:一个   row   cal   字符   返回   大写   过程   语法   nat   

原文地址:https://www.cnblogs.com/mxxblog/p/12588371.html

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