`
baggioback
  • 浏览: 71296 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Hibernate

 
阅读更多

在HQL中关键字不区分大小写,但是属性和类名区分大小写

 

一、简单属性查询

1.单一属性查询,返回结果集属性列表,元素类型和实体类中相应的属性类型一致

//查询单个字段

String hql =  " select name from Users" ;

Query query = session.createQuery(hql);

List<String> list = query.list();

for (String str : list){

    System.out.println(str);

}

 

输出结果为:

name1

name2

name3

 

2.多个属性查询,返回的集合元素是对象数组,数组元素的类型和对应的属性在实体类中的类型一致,数组的长度

  取决于select中属性的个数

//查询其中几个字段       

String hql =  " select name,passwd from Users" ;

Query query = session.createQuery(hql);

//默认查询出来的list里存放的是一个Object数组

List<Object[]> list = query.list();

for (Object[] object : list){

    String name = (String)object[ 0 ];

    String passwd = (String)object[ 1 ];      

    System.out.println(name +  " : "  + passwd);

}

 

输出结果为:

name1 : password1

name2 : password2

name3 : password3

 

3.以实体类进行查询

注意:实体类应提供带参和不带参两种构造函数

实体类:MyUser.java

package  com.domain;

 

public   class  MyUser {

     private  String username;

     private  String password;      

    //因为:String hql = " select new  com.domain.MyUser

    // (name,passwd) from Users";所以必须要有接受2个参数的构造函数       

     public  MyUser(String username,String password){

         this .username = username;

         this .password = password;

     }

 

     public  String getUsername() {

         return  username;

    }

 

     public   void  setUsername(String username) {

         this .username = username;

     }

 

     public  String getPassword() {

         return  password;

     }

 

     public   void  setPassword(String password) {

         this .password = password;

     }        

}

 

查询示例:

//通过query.list()出来的list里存放的不再是默认的Object数组了,而是自定义的类

//MyUser,必须加包名,String hql = "from Users";中的Users类也是必须加包名的,

//但是因为在Users.hbm.xml里<hibernate-mapping auto-import="true"> auto-import

//默认值为true(所以auto-import属性也可以不写),自动导入了

String hql =  " select new  com.domain.MyUser(name,passwd) from Users " ;

Query query = session.createQuery(hql);

//默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默

//认的Object数组了,而是MyUser对象了

List<MyUser> myUsers = query.list();

for (MyUser myUser : myUsers){

    String name = myUser.getUsername();

    String passwd = myUser.getPassword();

    System.out.println(name +  " : "  + passwd);

}

输出结果为:

name1 : password1

name2 : password2

name3 : password3

 

二、实体对象查询

1.查询整个映射对象所有字段

//直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段

String hql =  "from Users" ;

Query query = session.createQuery(hql);

List<Users> users = query.list();

for (Users user : users){

    System.out.println(user.getName() +  " : "  + user.getPassword()

    + " : "  + user.getId());

}

 

输出结果为:

name1 : password1 : 1

name2 : password2 : 2

name3 : password1 : 3

这里,采用list查询发出一条查询语句,取得Student对象数据

发出的语句为:

Hibernate: select student0_.id as id1_, student0_.name as name1_, student0_.createTime as

createTime1_, student0_.classesid as classesid1_ from t_student student0_

 

2.可以忽略select,如:String hql = "from Student";

 

3.查询表可以用别名,如:String hql = "from Student s";

 

4.可以忽略select,表可以使用as命名别名,如:String hql = "from Student as s";

 

5.使用select查询实体对象,必须采用别名,如:String hql = "select s from Student as s";

 

6.不支持select * from .....这样的查询语句

 

7.使用Query接口的iterate()方法,如:Iterator iter = session.createQuery("from Student").iterate();

  出现N+1问题

  所谓的N+1是在查询的时候发出了N+1条sql语句
  1: 首先发出一条查询对象id列表的sql
  N: 根据id列表到缓存中查询,如果缓存中不存在与之匹配的数据,那么会根据id发出相应的sql语句

 

8.list和iterate的区别?
  * list每次都会发出sql语句,list会向缓存中放入数据,而不利用缓存中的数据
  * iterate:在默认情况下iterate利用缓存数据,但如果缓存中不存在数据有可以能出现N+1问题

 

9.修改默认查询结果(query.list())不以Object[]数组形式返回,以List形式返回

//查询其中几个字段,添加new list(),注意list里的l是小写的。也不需要导入包,这样

//通过query.list()出来的list里存放的不再是默认的Object数组了,而是List集合了
String hql = " select new list(name,passwd) from Users";
Query query = session.createQuery(hql);


//默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默

//认的Object数组了,而是List集合了
List<List> list = query.list();
for(List user : list){
    String name = (String)user.get(0);
    String passwd = (String)user.get(1);  
    System.out.println(name + " : " + passwd);

}

输出结果为:

name1 : password1
name2 : password2
name3 : password3

10.修改默认查询结果(query.list())不以Object[]数组形式返回,以Map形式返回

//查询其中几个字段,添加new map(),注意map里的m是小写的。也不需要导入包,这样通

//过query.list()出来的list里存放的不再是默认的Object数组了,而是map集合了

String hql =  " select new map(name,passwd) from Users" ;

Query query = session.createQuery(hql);

 

//默认查询出来的list里存放的是一个Object数组,但是在这里list里存放的不再是默

//认的Object数组了,而是Map集合了

List<Map> list = query.list();

for (Map user : list){

    //一条记录里所有的字段值都是map里的一个元素,key是字符串0,1,2,3....,value

    //是字 段值

    //如果将hql改为:String hql = " select new map

    //(name as username,passwd as password) from Users";,那么key将不是字符串

    //0,1,2...了,而是"username","password"了

 

    //get("0");是get(key),注意:0,1,2...是 字符串,而不是整形 

    String name = (String)user.get( "0" );

    String passwd = (String)user.get( "1" );

   

    System.out.println(name +  " : "  + passwd);

}

输出结果为:

name1 : password1
name2 : password2
name3 : password3


11.修改默认查询结果(query.list())不以Object[]数组形式返回,以Set形式返回,但是因为Set里是不允许有重

   复的元素,所以:username和password的值不能相同。只需将hql改为:String hql = " select new set

   (name,passwd) from Users";

分享到:
评论

相关推荐

    hibernate jar包:hibernate-commons-annotations-4.0.1.Final.jar等

    Hibernate.jar包,Hibernate可以应用在任何使用JDBC的场合,包含 hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-...

    Hibernate入门到精通

    "Hibernate入门到精通" Hibernate 是一个基于Java的ORM(Object-Relational Mapping,对象关系映射)框架,它提供了一种简洁高效的方式来访问和操作关系数据库。下面是 Hibernate 的主要知识点: Hibernate 简介 ...

    hibernate jar包程序文件

    hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-4.1.12.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar ...

    最新版本的Struts2+Spring4+Hibernate4框架整合

    项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + ...

    hibernate学习资料大全

    【hibernate学习资料大全】 Hibernate 是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序对数据库的操作。这个压缩包包含了丰富的Hibernate学习资源,旨在帮助开发者深入理解和熟练掌握这一强大的...

    Hibernate-extensions 完整安装包

    《Hibernate-Extensions全面指南》 Hibernate,作为Java领域中的一款著名对象关系映射(ORM)框架,极大地简化了数据库操作。然而,为了满足更复杂的业务需求,Hibernate还提供了丰富的扩展功能,这就是我们今天要...

    hibernate-release-4.1.4

    【描述】中的"hibernate的jar包"指的是Hibernate框架的运行库文件,这些JAR文件包含了Hibernate的所有核心API、实现和依赖库,如Hibernate Commons Annotations、Hibernate EntityManager、Hibernate Core等。...

    hibernate基础jar包

    Hibernate是一个开源的对象关系映射(ORM)框架,它允许Java开发者使用面向对象的方式来操作数据库,极大地简化了数据访问层的编程工作。这个压缩包包含了Hibernate的基础jar包,这些jar文件是开发Hibernate应用所...

    HibernateTools-3.2.4

    HibernateTools是Java开发人员在使用Hibernate ORM框架时的有力辅助工具集,主要目的是为了提高开发效率,简化数据库操作。在HibernateTools 3.2.4版本中,它包含了一系列的特性与插件,以支持更便捷地进行对象关系...

    hibernate3全部jar包:hibernate3.jar.zip 下载

    Hibernate3 是一个强大的Java持久化框架,它允许开发者将数据库操作与业务逻辑解耦,使得应用程序的开发更为简便。这个“hibernate3全部jar包:hibernate3.jar.zip”包含了所有必要的库文件,方便用户一次性下载并...

    Hibernate3的依赖包

    Hibernate3是一个广泛使用的Java对象关系映射(ORM)框架,它允许开发者用面向对象的方式处理数据库操作,极大地简化了Java应用程序与数据库之间的交互。在这个"Hibernate3的依赖包"中,包含了运行Hibernate3应用...

    kingbaseV8 hibernate jdbc 驱动

    在Java开发环境中,与KingbaseV8数据库进行交互通常会用到Hibernate框架和JDBC驱动。 Hibernate是一个优秀的对象关系映射(ORM)框架,它简化了Java应用程序对数据库的操作,通过将Java对象与数据库表进行映射,...

    hibernate和MySQL的jar

    标题中的“hibernate和MySQL的jar”指的是Hibernate ORM框架与MySQL数据库之间的连接库。Hibernate是一种流行的Java对象关系映射(ORM)工具,它允许开发者使用面向对象的编程方式来操作数据库,而无需直接编写SQL...

    Hibernate 中文api 等学习资料

    标题"Hibernate 中文api 等学习资料"暗示了这是一组针对Hibernate ORM框架的中文学习资源,包括API文档和其他指南,旨在帮助用户更好地理解和使用Hibernate。 描述中的"hibernate orm框架api中文文档,学习资料,...

    hibernate.5.1.0.jar全部

    包含hibernate所有所需jar包还有一些其他包日志包、jpa支持包等: 列如:hibernate-core-5.1.0.Final.jar hibernate-ehcache-5.1.0.Final.jar hibernate-entitymanager-5.1.0.Final.jar hibernate-envers-5.1.0....

    hibernate2 升级为hibernate3的需要注意的事项

    ### Hibernate2 升级至 Hibernate3 的注意事项 #### 背景与目的 随着技术的发展,软件框架也在不断地更新迭代,以适应更多的需求并优化性能。Hibernate 作为一款流行的 Java 持久层框架,其从版本 2 升级到版本 3...

    Hibernate入门jar包

    Hibernate是一款强大的Java持久化框架,它简化了数据库与Java对象之间的交互,使开发者可以更加专注于业务逻辑而不是数据访问层的实现。本压缩包提供的是Hibernate入门所需的jar包,包括了Hibernate的核心库以及与之...

    hibernate4.3完整jar包

    Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端...

    hibernate3必要jar包

    Hibernate3 是一个非常重要的Java持久化框架,它允许开发者将对象模型与数据库关系模型进行映射,从而简化了数据存取的过程。这个压缩包“hibernate3必要jar包”显然是针对Hibernate3版本的,已经去除了冗余的库文件...

    hibernate_3.2官方开发包

    Hibernate 是一个著名的开源对象关系映射(ORM)框架,它为Java开发者提供了便捷的数据持久化方式,使得在Java应用程序中操作数据库变得更加简单。这个“hibernate_3.2官方开发包”包含了所有你需要开发基于...

Global site tag (gtag.js) - Google Analytics