`

Hibernate(十二) 实现原生态sql查询

 
阅读更多

 hibernate使用原生态sql查询

  

 @Test
	public void test01(){
    	 Session session =null;
		 try {
			  session=HibernateUtil.openSession();
			  List<Student> stu=session.createSQLQuery("select * from t_student where name like ?")
					    .addEntity(Student.class)//设置返回结果集中存放的内容
					    .setParameter(0,"%张%")//hibernate设置参数是从0开始的,jdbc是从1
					    .setFirstResult(0)  //分页
					    .setMaxResults(5)
				        .list();
		    for(Student s:stu){
		    	System.out.println(s.getName());
		    }
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			if(session!=null) session.close();
		}
	}
    
    @Test
   	public void test02(){
       	 Session session =null;
   		 try {
   			  session=HibernateUtil.openSession();
   			  //查询出三个关联的对象   注意:stu.*,cla.*,spe.* 直接这么写会以第一个为标准,当取相同属性时,就会取第一个对象的值   {stu.*},{cla.*},{spe.*}这样就会区分
			List<Object[]> stus=session.createSQLQuery("select {stu.*},{cla.*},{spe.*} from" +
					" t_student stu left join t_classroom cla on(stu.cid=cla.id) left join t_special spe on(spe.id=cla.sid) where stu.name like ?")
					.addEntity("stu", Student.class)
					.addEntity("cla", ClassRoom.class)
					.addEntity("spe", Special.class)
					.setFirstResult(0).setMaxResults(10)
					.setParameter(0, "%张%")
   				    .list();
			List<StuDto> stuDtos=new ArrayList<StuDto>();  
   		    for(Object[] s:stus){
   		    	Student stu=(Student) s[0];
   		    	ClassRoom cla=(ClassRoom) s[1];
   		    	Special spe=(Special) s[2];
   		        stuDtos.add(new StuDto(stu,cla,spe));
   		    	System.out.println(stu.getName()+","+cla.getName()+spe.getName());
   		    }
   			
   		} catch (Exception e) {
   			e.printStackTrace();
   		}finally{
   			if(session!=null) session.close();
   		}
   	}
    @Test
   	public void test03(){
       	 Session session =null;
   		 try {
   			  session=HibernateUtil.openSession();
   			  //查询出三个关联的具体内容 
			List<StudentDto> sdto=session.createSQLQuery("select stu.id as sid,stu.name as sname, stu.sex as sex,cla.name as cname,spe.name as spename from" +
					" t_student stu left join t_classroom cla on(stu.cid=cla.id) left join t_special spe on(spe.id=cla.sid) where stu.name like ?")
					.setResultTransformer(Transformers.aliasToBean(StudentDto.class))//使用转换器
					.setFirstResult(0).setMaxResults(10)
					.setParameter(0, "%张%")
   				    .list();
			  for(StudentDto sd:sdto){
				  System.out.println(sdto);
			  }
   			
   		} catch (Exception e) {
   			e.printStackTrace();
   		}finally{
   			if(session!=null) session.close();
   		}
   	}

    上面代码使用带的两个dto

    StudentDto.java

 

/**
 * DTO对象没有存储的意义,仅仅是用来进行数据的传输的
 * @author Administrator
 *
 */
public class StudentDto {
	private int sid;
	private String sname;
	private String sex;
	private String cname;
	private String spename;
  省略get,set
}

 

 StuDto.java

 

public class StuDto {

	 private Student stu;
	 private ClassRoom cla;
	 private Special spe;
  省略get,set
}

 

分享到:
评论

相关推荐

    Hibernate-HQL、Criteria、SQL实现查询对照以及增删改代码

    本文旨在为读者呈现不同的方式查询方式:HQL方式的查询、SQL原生态SQL方式的查询、以及Criteria方式的查询,拓展查询的不同实现思路,开阔视野、并涵盖了部分的Hibernate增删改的基本操作。

    关于hibernate 的createQuery和createSqlQuery 的区别

    createSqlQuery 方法是 Hibernate 提供的一种查询机制,用于执行原生态的 SQL 语句。与 createQuery 方法不同的是,createSqlQuery 方法可以执行查询、修改和添加操作。 使用 createSqlQuery 方法可以执行以下操作...

    JPA和Hibernate的关系

    3. **查询语言**:JPA引入了一种名为JPQL(Java Persistence Query Language)的查询语言,这是一种面向对象的查询语言,可以用来执行各种查询操作,而不必直接编写SQL语句。这有助于降低应用与数据库之间的耦合度。...

    hibernate-release-4.1.0.Final全部jar包

    因此,理解何时使用原生SQL和优化查询是使用Hibernate的关键。 8. **最佳实践**: 使用SessionFactory的单例模式,合理利用缓存,避免在循环中操作Session,以及遵循延迟加载原则,都可以有效提高Hibernate应用的...

    Hibernate5用户手册中文版

    - 还涉及如何配置数据库方言(Database Dialect),以便Hibernate能够生成与特定数据库兼容的SQL语句。 6. **事务与并发控制**: - 介绍了物理事务的管理方式和Hibernate的事务API。 - 讨论了不同事务模式(如...

    hibernate与ibatis比较的11大优势

    3. **HQL与SQL的融合**:Hibernate提供了一种名为HQL(Hibernate Query Language)的语言,这是一种面向对象的查询语言,它允许开发者以面向对象的方式来编写查询语句,而非直接编写SQL语句。这种方式不仅增强了代码...

    hibernate 的好处

    - **支持原生 SQL**:虽然 Hibernate 鼓励使用 HQL,但它同样支持使用原生 SQL,这对于需要执行复杂查询的情况非常有用。 - **XML 文件配置**:Hibernate 可以通过 XML 文件来配置映射关系,这使得整个系统的配置...

    原生态JavaEE酒店管理系统

    【原生态JavaEE酒店管理系统】是一个基于JavaEE技术平台开发的综合应用,旨在提供全面的酒店业务管理功能。系统涵盖了酒店日常运营中的多个关键模块,如酒店信息管理、房间信息管理以及图片上传等功能。这个项目可能...

    三种方式实现分页

    SQL原生的LIMIT和OFFSET适合简单的场景,ORM框架如Hibernate提供了更强大的查询能力和封装,而Spring Data JPA则在Spring生态中提供了极高的便利性。无论哪种方式,都要注意优化性能,避免在大数据量下分页操作导致...

    MyBatis 常见面试题总结.docx

    程序员直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高。 MyBatis 的优点: 1. 基于 SQL 语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响,SQL 写在 XML 里,解除 sql 与程序代码...

    spring 整合JDBC 原创代码

    例如,使用`query(String sql, RowMapper&lt;T&gt; rowMapper)`执行查询,`update(String sql, Object... args)`进行更新操作。 4. **事务管理** Spring JDBC也支持事务管理。可以使用PlatformTransactionManager接口来...

    MyBatis的27道面试题

    MyBatis的编写原生态SQL特性赋予了开发者高度的灵活性,可以精确控制SQL的执行,适用于需求变化频繁的互联网项目。 MyBatis的优点主要体现在基于SQL语句编程带来的灵活性,消除了与数据库的耦合,便于统一管理SQL...

    MyBatis面试题 37道.pdf

    程序员直接编写原生态 SQL,可以严格控制 SQL 执行性能,灵活度高。 MyBatis 的优点包括: * 基于 SQL 语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响 * SQL 写在 XML 里,解除 SQL 与程序...

    kateshdmade-small-online-shop:Spring+ HIBERNATE + AZURE SQL BBDD +上传项目图像的AZURE存储

    在本项目中,Hibernate可能用于简化SQL查询和对象的持久化,通过提供一套API来处理数据库事务和CRUD(创建、读取、更新、删除)操作。 3. **Azure SQL Database**: 这是微软云提供的托管关系型数据库服务,基于...

    mybatis-超详细文档-文档

    MyBatis 可以让程序员直接编写原生态 SQL,可以手动映射结果到 Java 对象,同时它也提供了动态 SQL 的支持,极大地简化了 JDBC 编程的复杂性。 **2. MyBatis 的核心组件** - **SqlSessionFactoryBuilder**:用于...

    后端开发框架HibernateORM框架将Java对象映射到数据库表

    - **自动SQL生成**:Hibernate能够自动生成SQL语句,大大减少了手写SQL的需求。 - **透明性**:开发者可以通过简单的注解或XML配置文件来指定对象与数据库表之间的映射关系。 - **缓存机制**:Hibernate提供了内置的...

    1000道Java工程师面试题.pdf

    - **灵活性高**:MyBatis允许开发者编写原生态SQL,从而提供更高的灵活性。 - **易于上手**:对于简单的操作,只需配置少量XML即可实现数据访问。 - **性能优秀**:相比Hibernate等全ORM框架,MyBatis提供了更细粒度...

    mybatis面试题整理详细版

    * Mybatis 直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发。 * Hibernate 对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件,如果用 ...

    Java程序员面试,MyBatise常见面试27道必问题

    2. MyBatis 直接编写原生态 sql,可以严格控制 sql 执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发。 3. Hibernate 对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件,如果用 ...

    JavaWeb最简单粗暴的简单登录实例源码及数据库,jsp+servlet+mysql

    此外,防止SQL注入也很重要,可以通过使用PreparedStatement或ORM框架如Hibernate来实现。 7. **错误处理与响应**:当用户输入无效或者数据库操作失败时,Servlet需要正确处理异常,并向用户返回适当的错误信息。这...

Global site tag (gtag.js) - Google Analytics