Hibernate 查询结果的展现
Hibernate 查询结果的展现,Hibernate是通过对象包含对象这样的方式来维护关系的,那么当我们需要查询关联对象的时候,先通过Hib
我们使用hibernate(以下简称h)来管理数据库表的关联关系,基本的原理其实是很简单的,就是将数据库中表之间的关联转移到了实体bean的类之间,配置好了以后h就可以帮我们维持这种关联关系了。这的确带来了很大的方便,我们可以在我们的程序中以hql来面向对象的获取或保存数据了,例如以前我们要查询一个班级里面的学生的信息,自己写sql的话需要关联2张表,而且还要自己手动的将查询到的数据一个一个的取出来,然后封装到我们的bean里面去最后才能字啊jsp中显示出来,这个过程是很繁琐的,有了h,我们就可以不用在sql显式的写这种关联关系了,我们选择将这种关联关系写到h的映射文件中去,这样一来h就帮我们维护这种关系了,我们需要查询班级里面的学生的信息的时候,只要通过hql: from Class as c where c.id=:id;就可以得到具体的一个班级的实体对象(假设是c),接着Set
通过上面我们知道,Hibernate是通过对象包含对象这样的方式来维护关系的,那么当我们需要查询关联对象的时候,先通过Hibernate得到主对象,再调用主对象的get×得到关联对象,就可以获取关联信息了,然后组装数据到jsp上去显示。 我们可以简单的写成:hql=“select new map(c.id as id ,c.name as name,c.students[0].name as studentname) from Class as c where c.id=:id”; 这样就同时完成了数据的查询和组装。将查询到的数据组装到一个map中,as 后面的就是 map的key,map的值就是查询出来的数据了。这种数据组装方式比:
while (it.hasNext()) {
10 Object[] tuple = (Object[]) it.next();
11 Members members = (Members) tuple[ 0 ];
12 String className = (String) tuple[ 1 ];
要简洁很多。
当然,我们也可以定义自己的实体类来容纳查询出的数据:
selectnew NewMembers(members, classInfo.className) " +
3 " from Members members, ClassInfo classInfo " +
4 " where members.level = classInfo.classCode "
也可以 使用hibernateapi 函数 setResultTransformer 将查询结果存放到我们自定义的bo对象中去:
Query q = factory.getCurrentSession().createSQLQuery(sql).setResultTransformer(Transformers.aliasToBean(PostVO.class));关于数据组装,有很多方法,不一而论。我们下面要讨论的是,h在涉及到3张或3张以上的表的复杂的查询的时候,如何使用的问题。我们知道2张或者一张表的情形使用我们上面介绍的方式就足够了,但是对3张以上的表关联的复杂查询,我们则要比较2中方式的好坏了:一种方式是仍然将表关系通过配置映射文件交给h来管理,,这样一来我们不仅仅要在配置文件里配置多个关系,而且在对应的实体类里面也要加入关联属性,在查询的时候得到主实体对象以后还有多次调用其属性来获取关联表的信息,这样不是不可以,但是是比较繁琐的,稍微不注意就容易出现错误。如果要查询的表多于5张,最好的建议就是使用native sql来做,也就是通过直接执行sql语句来查询,表间的关联关系直接在sql语句里面写明,不要h来管理,这样一来少了h的配置,二来不需要定义每个表对应的实体类,也算省了很多事情,在使用native sql的时候有一些需要注意的地方: Session s = sessionFactory.openSession(); String sql="select book.bookname,borr.borrowTime,borr.backTime,pub.pubname,bs.name bookcasename,book.price from " +"(select * from tb_borrow where ifback=0) " +"as borr left join tb_bookinfo book on borr.bookid=book.id join tb_publishing pub " +"on book.isbn=pub.isbn join tb_bookcase bs " +" on book.bookcase=bs.id join tb_reader r on borr.readerid=r.id where r.barcode=?"; Query query=s.createSQLQuery(sql).addScalar("bookname", Hibernate.STRING) .addScalar("borrowTime", Hibernate.STRING). addScalar("backTime", Hibernate.STRING).addScalar("pubname", Hibernate.STRING). addScalar("bookcasename", Hibernate.STRING).addScalar("price", Hibernate.STRING); query.setParameter(0, barCode); List list=null; try{ list=query.list(); s.close(); } catch (Exception e) { e.printStackTrace(); } return list; 1. Session session = sessionFactory.openSession();session.createSQLQuery(sql);通过这种方式获得查询对象query。2. list=query.list();得到的是一个数组列表(ArrayList),其中列表的每个元素都是object类型的数组,代表查询结果的一条记录,也就是说h会将sql查询出来的其中的每个字段都强制转换成Object类型,然后组成一个数组方到list里面去。3.单纯使用s.createSQLQuery(sql)往往会报“找不到列”的错误,其实这是h对native sql支持的原因,因为Hibernate是通过使用ResultSetMetadata来判定返回的标量值的实际顺序和类型的,假若某个指定的类型没有被映射,或者不是你所预期的类型那么就会出现上述错误了,所以通过addScalar()明确指出返回什么列以及每个列的类型就可以避免上述错误了。最好你根据实际的类型将得到的object转换成实际的类型,就可以得到这些类型中保存的信息了。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











SpringBoot 프로젝트 서문에 Hibernate 통합하기 Hibernate는 지속성 작업을 용이하게 하기 위해 Java 객체를 데이터베이스 테이블에 매핑할 수 있는 널리 사용되는 ORM(Object Relational Mapping) 프레임워크입니다. SpringBoot 프로젝트에서 Hibernate를 통합하면 데이터베이스 작업을 더 쉽게 수행하는 데 도움이 될 수 있습니다. 이 기사에서는 SpringBoot 프로젝트에 Hibernate를 통합하는 방법을 소개하고 해당 예제를 제공합니다. 1.종속성 소개pom.xml 파일에 다음 종속성을 소개합니다: org.springframework.bootspring-boot-starter-data-jpam

Java는 소프트웨어 개발 분야에서 널리 사용되는 객체 지향 프로그래밍 언어입니다. Hibernate는 Java 객체의 지속성을 관리하는 간단하고 효율적인 방법을 제공하는 인기 있는 Java 지속성 프레임워크입니다. 그러나 개발 과정에서 Hibernate 오류가 자주 발생하며, 이러한 오류로 인해 프로그램이 비정상적으로 종료되거나 불안정해질 수 있습니다. Hibernate 오류를 처리하고 방지하는 방법은 Java 개발자가 숙달해야 하는 기술이 되었습니다. 이 기사에서는 몇 가지 일반적인 Hib를 소개합니다.

최대 절전 모드와 mybatis의 차이점: 1. 구현 방법 2. 성능 3. 개체 관리 비교 4. 캐싱 메커니즘 자세한 소개: 1. 구현 방법인 Hibernate는 객체를 데이터베이스 테이블에 매핑하는 완전한 객체/관계형 매핑 솔루션인 반면, MyBatis는 개발자가 SQL 문과 ResultMap을 수동으로 작성해야 합니다. 2. 성능, Hibernate는 개발 속도 측면에서 가능합니다. MyBatis는 Hibernate가 DAO 레이어 등을 단순화하기 때문입니다.

Hibernate의 일대다 및 다대다 Hibernate는 Java 애플리케이션과 관계형 데이터베이스 간의 데이터 액세스를 단순화하는 탁월한 ORM 프레임워크입니다. Hibernate에서는 복잡한 데이터 모델을 처리하기 위해 일대다 및 다대다 관계를 사용할 수 있습니다. Hibernate의 일대다 Hibernate에서 일대다 관계는 하나의 엔터티 클래스가 여러 개의 다른 엔터티 클래스에 대응한다는 것을 의미합니다. 예를 들어, 하나의 주문은 여러 주문 항목(OrderItem)에 해당할 수 있고, 사용자(User)는 여러 주문(Order)에 해당할 수 있습니다. Hibernate에서 일대다 관계를 구현하려면, 저장할 엔터티 클래스에 컬렉션 속성을 정의해야 합니다.

이 기사에서는 Hibernate에서 대량 삽입/업데이트를 수행하는 방법을 살펴보겠습니다. SQL 문을 실행할 때마다 데이터베이스에 대한 네트워크 호출을 통해 이를 수행합니다. 이제 데이터베이스 테이블에 10개의 항목을 삽입해야 한다면 10개의 네트워크 호출을 수행해야 합니다. 대신 일괄 처리를 사용하여 네트워크 호출을 최적화할 수 있습니다. 일괄 처리를 통해 단일 네트워크 호출에서 일련의 SQL 문을 실행할 수 있습니다. 이를 이해하고 구현하기 위해 엔터티를 정의해 보겠습니다. @EntitypublicclassParent{@Id@GeneratedValue(strategy=GenerationType.AUTO)

Java 프레임워크 기술 스택: SpringMVC, Hibernate, MyBatis 등 일반적으로 사용되는 Java 프레임워크를 소개합니다. Java가 지속적으로 개발됨에 따라 개발 프로세스를 단순화하기 위해 점점 더 많은 프레임워크가 개발되었습니다. 그 중 SpringMVC, Hibernate, MyBatis 등은 Java 개발에서 가장 일반적으로 사용되는 프레임워크 중 하나입니다. 이 기사에서는 독자가 이러한 프레임워크를 더 잘 이해하고 적용할 수 있도록 이러한 프레임워크의 기본 개념과 사용법을 소개합니다. 먼저 Sp를 소개하겠습니다.

Hibernate는 관계형 데이터베이스와 Java 프로그램 간의 데이터 매핑을 서로 바인딩하여 개발자가 데이터베이스의 데이터에 더 쉽게 액세스할 수 있도록 하는 오픈 소스 ORM 프레임워크입니다. Hibernate 프레임워크를 사용하면 SQL 문 작성 작업이 크게 줄어들고 애플리케이션의 개발 효율성과 재사용성이 향상됩니다. 다음과 같은 측면에서 Hibernate 프레임워크를 소개해보자. 1. Hibernate 프레임워크의 장점: 객체-관계형 매핑, 데이터베이스 액세스 세부 사항 숨기기, 개발 수행

캐싱은 쿼리를 실행할 때 데이터베이스 네트워크 호출을 줄이는 데 도움이 됩니다. 레벨 1 캐시 및 세션 연결. 암시적으로 구현됩니다. 첫 번째 수준 캐시는 세션 개체가 존재할 때까지 존재합니다. 세션 개체가 종료되거나 닫히면 캐시된 개체가 없습니다. 두 번째 수준 캐시는 여러 세션 개체에 대해 작동합니다. 세션 팩토리와 연결되어 있습니다. 두 번째 수준 캐시 개체는 단일 세션 팩터리를 사용하는 모든 세션에서 사용할 수 있습니다. 이러한 캐시 개체는 특정 세션 팩토리가 닫힐 때 종료됩니다. 두 번째 수준 캐시를 구현하려면 두 번째 수준 캐시를 사용하기 위해 다음 종속성을 추가해야 합니다. <!--https://mvnrepository.com/artifact/net.sf.ehcache/ehcache--><de
