package com.sun.test;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Projections;
import org.junit.After;
import org.junit.Before;
import com.sun.dao.impl.HibernateSessionFactory;
import com.sun.entity.District;
import com.sun.entity.House;
import com.sun.entity.Street;
@SuppressWarnings("unchecked")
public class TestHib {
private Session session;
@Before
public void before() {
session = HibernateSessionFactory.getSession();
}
@After
public void after() {
session.close();
}
@org.junit.Test
public void queryBase() {
List<House> list = session.createQuery(
"select h from House h where price>2000").list();
for (House h : list) {
System.out.println(h.getTitle());
}
}
// 查询部分属性
@org.junit.Test
public void queryPro() {
List<Object[]> list = session.createQuery(
"select h.title,h.price from House h where price>2000").list();
for (Object[] h : list) {
System.out.println(h[0] + "=========" + h[1]);
}
}
@org.junit.Test
public void queryPro1() {
// 要求:一定要有对应的构造方法
List<House> list = session
.createQuery(
"select new House(h.title,h.price) from House h where price>2000")
.list();
for (House h : list) {
System.out.println(h.getTitle());
}
}
@org.junit.Test
public void queryPro2() {
List<Map> list = session
.createQuery(
"select new Map(h.title as t,h.price as p) from House h where price>2000")
.list();
for (Map h : list) {
System.out.println(h.get("t") + "--------" + h.get("p"));
}
}
@org.junit.Test
public void queryFun() {
// 包装类
int count = (Integer) session.createQuery(
"select count(*) from House h where price>2000").uniqueResult();
System.out.println(count);
}
@SuppressWarnings("unchecked")
@org.junit.Test
public void queryParam() {
List<House> list = session.createQuery(
"select h from House h where price>:price1 and price <:price2")
.setLong("price1", 2000l).setLong("price2", 10000l).list();
for (House h : list) {
System.out.println(h.getTitle());
}
}
@SuppressWarnings("unchecked")
@org.junit.Test
public void queryParam1() {
// 参数名和属性名相同
Query query = session
.createQuery("select h from House h where h.title like :title");
House house = new House();
house.setTitle("%江%");
query.setProperties(house);
List<House> list = query.list();
for (House h : list) {
System.out.println(h.getTitle());
}
}
/**
* 1.如果没有对应的数据,load会异常 2.load支持延时加载
*
*/
@org.junit.Test
public void load() {
House house = (House) session.load(House.class, 1L);
System.out.println(house.getTitle());
}
@org.junit.Test
public void get() {
House house = (House) session.get(House.class, 1L);
System.out.println(house.getTitle());
}
// 默认是select(生成两条sql)
// fetch="join"生成一条outer left join语句
@org.junit.Test
public void fetch() {
House house = (House) session.get(House.class, 1L);
System.out.println(house.getTitle());
System.out.println(house.getUsers().getName());
}
@org.junit.Test
public void lazySet() {
District district = (District) session.get(District.class, 1L);
System.out.println(district.getName());
Set<Street> set = district.getStreets();
Iterator<Street> it = set.iterator();// 迭代器
while (it.hasNext()) {
Street s = it.next();
System.out.println(s.getName());
}
// for(Street s:set){
// System.out.println(s.getName());
// }
}
/**
* list不从缓存取数据,iterate根据id先找缓存中是否存在数据,数据没有再查数据库
*
*/
@SuppressWarnings("unchecked")
@org.junit.Test
public void iterateAndList() {
Query query = session.createQuery("select h from House h");
// List<House> list=query.list();
// for(House s:list){
// System.out.println("title==="+s.getTitle());
// System.out.println("name==="+s.getUsers().getName());
// }
System.out.println("=======================");
Iterator<House> it = query.iterate();
while (it.hasNext()) {
House s = it.next();
System.out.println(s.getTitle());
System.out.println("name===" + s.getUsers().getName());
}
}
@org.junit.Test
public void iterate() {
Query query = session.createQuery("select h from House h");
Iterator<House> it = query.iterate();
while (it.hasNext()) {
House s = it.next();
System.out.println(s.getTitle());
}
System.out.println("=======================");
it = query.iterate();
while (it.hasNext()) {
House s = it.next();
System.out.println(s.getTitle());
}
}
@org.junit.Test
public void manyTableJoin() {
Session session = HibernateSessionFactory.getSession();
Query query = session
.createQuery("select h from House h inner join fetch h.street s inner join fetch s.district");
List<House> list = query.list();
House house = list.get(0);
System.out.println("=======================" + house.getTitle());
session.close();
System.out.println(house.getStreet().getName() + "==="
+ house.getStreet().getDistrict().getName());
}
@org.junit.Test
public void innerJoin() {
// select d,s from District d inner join d.streets s
Query query = session
.createQuery("from District d inner join d.streets");
List<Object[]> list = query.list();
for (Object[] o : list) {
District district = (District) o[0];
Street street = (Street) o[1];
System.out.println(district.getName() + "===" + street.getName());
}
}
@org.junit.Test
public void innerFetchJoin() {
Query query = session
.createQuery("from District d inner join fetch d.streets");
List<District> list = query.list();
for (District d : list) {
System.out.println(d.getName());
}
}
@org.junit.Test
public void leftJoin() {
// select d,s from District d inner join d.streets s
Query query = session
.createQuery("from District d right join fetch d.streets");
List list = query.list();
System.out.println(list);
// for (Object[] o : list) {
// District district = (District) o[0];
// Street street = (Street) o[1];
// System.out.println(district.getName() + "===" + street.getName());
// }
}
@org.junit.Test
public void queryByName() {
Query query=session.getNamedQuery("queryStreet");
List<Street> list=query.setString("name", "%北%").list();
for(Street s:list){
System.out.println(s.getName()+"==="+s.getDistrict().getName());
}
}
//直接加addEntity就可以转换类型了
@org.junit.Test
public void queryBySQL() {
//返回类型addEntity
List<Street> list=session.createSQLQuery("select * from street").addEntity(Street.class).list();
System.out.println(list);
for(Street s:list){
System.out.println(s.getName()+"==="+s.getDistrict().getName());
}
}
//在类得映射文件中配置
<sql-query name="querySql">
<![CDATA[
select {s.*} from street s where name like :name
]]>
<return alias="s" class="com.accp.entity.Street"></return>
</sql-query>
<sql-query name="querySqlByName">
<![CDATA[
select s.name from street s where name like :name
]]>
<!-- <return alias="s" class="com.accp.entity.Street"></return>-->
<return-scalar column="name" type="java.lang.String"/>
</sql-query>
@org.junit.Test
public void queryBySQLXML() {
Query query=session.getNamedQuery("querySql");
List<Street> list=query.setString("name", "%北%").list();
for(Street s:list){
System.out.println(s.getName()+"==="+s.getDistrict().getName());
}
}
@org.junit.Test
public void queryBySQLXMLByName() {
Query query=session.getNamedQuery("querySqlByName");
List<String> list=query.setString("name", "%北%").list();
for(String s:list){
System.out.println(s);
}
}
@org.junit.Test
public void projections() {
Criteria c=session.createCriteria(House.class);
int count=(Integer)c.setProjection(Projections.rowCount()).uniqueResult();
System.out.println(count);
}
@org.junit.Test
public void projections1() {
Criteria c=session.createCriteria(House.class);
List<Object[]> list=c.setProjection(Projections.projectionList().add(Projections.avg("price"))
.add(Projections.groupProperty("title")).add(Projections.rowCount())).list();
for(Object[] obj:list){
System.out.println(obj[0]+"==="+obj[1]);
}
}
}
分享到:
相关推荐
Hibernate支持事务管理、缓存机制、一对多、多对一、一对一等多种关系映射,提供了方便的数据查询和更新功能。 **结合使用Struts和Hibernate**: 在学生选课系统中,Struts作为前端控制器,处理用户请求,调用业务...
Hibernate Validator提供了多种配置方式,包括使用XML配置。该文档对如何使用 validation.xml 文件和如何映射约束做了说明。在启动框架时,需要配置和初始化 ValidatorFactory,该文档也对此有所涉及。 Hibernate ...
综上所述,《图书管理系统-BookM_JSF_Hibernate_Spring》是一个集成了多种Java技术的高效系统,它利用JSF实现用户界面,Hibernate处理数据持久化,Spring管理组件并提供事务处理,以及ajax4jsf优化用户体验。...
Hibernate支持事务管理、缓存机制和多种数据库平台,大大提高了开发效率。 3. **iBatis**:iBatis也是一个ORM框架,但它比Hibernate更轻量级。它主要关注SQL查询,将SQL语句与Java代码分离,使得SQL的编写更加灵活...
尽管 Hibernate 支持字段访问和属性访问两种模式,但在实践中通常推荐使用属性访问模式。 - **4.2 实现继承** Hibernate 支持多种继承映射策略,如单表继承、类表继承和子类表继承等。 - **4.3 实现 equals() ...
标题中的"spring_struts2_hibernate_mysql集成"指的是在Java Web开发中,将Spring、Struts2、Hibernate这三大主流框架与MySQL数据库进行整合。这是一个常见的企业级应用开发模式,用于构建高效、可维护的Web应用程序...
它支持多种数据库,提供了事务管理、缓存策略以及对象查询语言(HQL)等功能,极大地提高了开发效率和代码可维护性。 **Spring框架** 是企业级Java应用的基石,它提供了全面的基础设施支持,包括依赖注入、面向切面...
Hibernate支持多种二级缓存实现,如EhCache、JBossCache和OsCache等。二级缓存主要用于存储实体对象,提高了数据检索的效率。 **3. QueryCache** QueryCache是Hibernate的另一种缓存机制,用于缓存查询语句及其返回...
标题中的"first_demo.rar_DEMO_struts2_struts2_hibernate_简历"表明这是一个关于使用Struts2和Hibernate框架开发的初级示例项目,主要功能是实现简历的创建、查看、编辑和删除操作。这个DEMO是针对初学者或者开发者...
Hibernate支持多种数据库,包括MySQL,且具备丰富的查询API和HQL(Hibernate Query Language),使得数据操作更加灵活。 至于MySQL,它是世界上最流行的开源关系型数据库管理系统之一。其特点是速度快、稳定性和可...
本文档名为“hibernate_reference.pdf”,其描述表明它是一份与“JSR 303 Reference Implementation Reference Guide 4.0.1.GA”相关的指南,重点介绍Hibernate Validator作为JSR 303的参考实现。JSR 303是Java社区...
Hibernate支持多种数据库,并且提供了缓存机制以提升性能。 Spring框架是Java企业级应用的核心框架,它提供了依赖注入(DI)和面向切面编程(AOP)等功能,使得代码更加模块化,易于测试和维护。Spring还包含了数据...
Hibernate支持多种数据源,具有事务管理、缓存机制等功能。 **Spring** 是一个全面的企业级应用框架,它不仅包含IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)等核心...
Hibernate支持多种查询方式,包括HQL(Hibernate Query Language)和 Criteria API。HQL是面向对象的查询语言,类似于SQL但操作对象而非记录。Criteria API则提供了一种更加面向对象的查询方式,无需编写字符串查询...
Hibernate Validator不仅仅是一个遵循JSR 303规范的实现,它还引入了一些额外的功能,如fail-fast模式,可以提前终止验证过程,节省资源;方法级验证,允许对方法参数进行约束检查;以及程序化约束定义,为那些无法...
**Struts2** 是一个基于MVC(Model-View-Controller)设计模式的Java Web框架,主要用于处理用户请求和控制应用程序流程。它通过Action类来接收和处理HTTP请求,并将结果转发给视图层进行展示。Struts2提供了丰富的...
Struts2相比Servlet提供了更灵活和易用的控制层,如通过注解方式配置Action,以及强大的拦截器机制,支持多种结果类型(JSP、FreeMarker、Velocity等)。 【Hibernate配置】 Hibernate是一个持久化框架,它简化了...
本文将介绍如何基于Spring、Hibernate和Flex这三个开源框架整合出一个新的Web应用开发模型,用于构建教学资源库系统。 #### 二、系统技术架构设计 ##### 2.1 数据库设计 系统采用了MySQL作为数据库管理系统。...