Hiberante4 原生SQL查询 例子
By:Roy.LiuLast updated:2014-01-16
用hibernate4, 完全用ORM 做项目,原则上可以,其实有时候没有必要, 我见过有的项目为了取一个表的一条数据,而且只有一个字段的查询,居然也用hibernate 去做,更绝的是,这个查询里面还配置了 one to many 等关联,而且FetchType也不是lazy, 有必要这么做吗?我不是完全否决hibernate ,但用查询的时候,要注意什么时候该用Hibernate orM 去查,什么时候该自己去写 native sql 去查。
Hibernate4 native sql 查询其实很简单, 在前面的例子基础上,继续测试, 前面的例子可以参考这里,因为用到里面的数据表以及一些基本配置:
参考一:Hibernate4 mysql 采用XML 配置方式入门例子
参考一: Hibernate4 一对一双向主键关联测试例子
本例子用到的环境基本一样,唯一的区别在于测试类不同,原生SQL的测试类如下;
查看结果,可以看到hibernate native sql 正确的工作了,但请注意,在程序中用到了 .addEntity(Stock.class) ,如果没有这句话,那么程序的写法又不一样了。参考下面的例子:
这个时候,Hibernate 返回的是一个 List
Hibernate4 native sql 查询其实很简单, 在前面的例子基础上,继续测试, 前面的例子可以参考这里,因为用到里面的数据表以及一些基本配置:
参考一:Hibernate4 mysql 采用XML 配置方式入门例子
参考一: Hibernate4 一对一双向主键关联测试例子
本例子用到的环境基本一样,唯一的区别在于测试类不同,原生SQL的测试类如下;
package com.yihaomen.hibernate4.test; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import com.yihaomen.hibernate.domain.Stock; import com.yihaomen.hibernate.util.HibernateUtil; public class AppTest { public static void main( String[] args ) { System.out.println( "Hibernate + MySQL" ); Session session = HibernateUtil.getSessionFactory().openSession(); //session.beginTransaction(); Query query = session.createSQLQuery( "select * from stock s where s.STOCK_CODE = :stockCode" ) .addEntity(Stock. class ) .setParameter( "stockCode" , "4715" ); List<stock> result = query.list(); for (Stock stock : result){ System.out.println((stock.getStockName())); } //session.getTransaction().commit(); } } </stock> |
查看结果,可以看到hibernate native sql 正确的工作了,但请注意,在程序中用到了 .addEntity(Stock.class) ,如果没有这句话,那么程序的写法又不一样了。参考下面的例子:
public static void main( String[] args ) { System.out.println( "Hibernate + MySQL" ); Session session = HibernateUtil.getSessionFactory().openSession(); Query query = session.createSQLQuery( "select * from stock s where s.STOCK_CODE = :stockCode" ) .setParameter( "stockCode" , "4715" ); List result = query.list(); for (Object stock : result){ Object[] tmp = (Object[])stock; System.out.println(tmp[ 0 ].toString()); } } |
这个时候,Hibernate 返回的是一个 List
Previous:django 一次性上传多个文件, 批量上传
RELATED ARTICLES
- springboot 同时整合hibernate JPA, mybatis代码下载
- 同时绑定 spring validator和hibernate validator作为校验
- 安装Hibernate jboss tools 去自动生成Hibernate 实体类及注解
- 给同事做的Hibernate4.2 注解映射以及缓存培训教程及例子
- Hibernate4 No Session found for current thread原因
- Hibernate 使用log4j,sl4j 记录日志并记录sql 语句参数的值
- Hibernate4 拦截器(Interceptor) 实现实体类增删改的日志记录
- Hibernate 使用 C3P0 连接池
- Hibernate4 一对一双向主键关联测试例子(xml 配置方式)
- Hibernate4 mysql 采用注解(annotation)方式配置入门例子
- Hibernate4 mysql 采用XML 配置方式入门例子
- HibernateUtil工具类在hibernate3下与hibernate4下的区别
- spring security 阶段总结: mvc + hibernate +mysql 实现的例子
- 封装 sqlserver2005 以上的 hibernate 方言 Dialect
- java.lang.ClassNotFoundException: org.hibernate.service.jta.platform.spi.JtaPlatform
- Spring Security + Hibernate XML Example
- JPA optimistic lock exception in Java Development
- Spring Boot + Spring Data JPA + Oracle example
- Spring Boot Show Hibernate SQL query
- Spring Boot + Spring data JPA + MySQL
COMMENTS