zoukankan      html  css  js  c++  java
  • hibernate--query接口初步

    Query session.createQuery(String hql)方法;

    * hibernate的session.createQuery()方法是使用HQL(hibernate的查询语句)语句查询对象的。

    * hql:是查询对象的,例如:"from User",其中from不区分大小写,而User是区分大小写,因为它是对象。是User类

    * 返回Query对象。

    * 执行这条语句后,Hibernate会根据配置文件中所配置的数据库适配器自动生成相应数据库的SQL语句。如:

    ibernate: select user0_.id as id0_, user0_.name as name0_, user0_.password as password0_, 
    user0_.createTime as createTime0_, user0_.expireTime as expireTime0_ from User user0_

    Query的分页查询:

    @Test
        public void testQuery1() {
            Session session = null;
            try {
                session = HibernateUtil.getSession();
                session.beginTransaction();
                Query query = session.createQuery("from User");
                // 分页查询
                query.setFirstResult(0);// 从哪一条记录开始查询,是从0开始计算
                query.setMaxResults(2);// 分页每页显示多少条记录。
                /*
                 * Query对象中有一个list()方式,将所有查询来的对象自动生成list对象返回。
                 */
                List userList = query.list();
                // 然后我们就可以显示数据了。
                for (Iterator iter = userList.iterator(); iter.hasNext();) {
                    User user = (User) iter.next();
                    System.out.print(user.getId() + "   ");
                    System.out.println(user.getName());
                }
                session.getTransaction().commit();
            } catch (HibernateException e) {
                e.printStackTrace();
                session.getTransaction().rollback();
            } finally {
                HibernateUtil.closeSession(session);
            }
        }

    开源O/R映射框架内容回顾

    Hibernate是一个O/R映射框架(也称为ORM)

    从ORM词来看,O---Object(对象模型);R--- Relational(关联模型),可以做对象和关联的一种映射,当然这只是部分功能,一个完善ORM框架应该具有更多的功能:如HQL相关的查询语句、提供缓存机制(一级缓存、二级缓存)。

    Java开发数据库时,使用JDBC,但是需要编写大量相同的代码,这样不便提高生产效率,而hibernate可以让你不能编写大量的相同的代码。从而提高生产效率。另一方面,hibernate可以让我们更面对象化开发,还有一个移植性hibernate只需要更改配置文件(数据库适配器)的选项,就可以非常方便的移植到不同的数据库,而不需要重新编写不同数据库厂家所对应的JDBC、SQL语句了。还有hibernate可以解决阻抗不匹配(Java类中有继承关系,而关系型数据库中没有这个功能(目前数据库还不是面向对象,都是关系型数据库)),使用hibernate框架,侵入性比较好(因此hibernate称为轻量级框架)

    O/R映射框架和使用环境:在程序中添加→修改→保存;查询可以批量,但是修改不可为批量性;程序中有大量的数据只读,这样就可以一次性读取到缓存中;对象间存在自然的关系;不需要数据库SQL特定的语句优化。

    O/R映射框架不适合环境:聚集性操作:批量性添加、修改。批量的统计查询。

    Configuration对象:读取hibernate配置文件(hibernate.cfg.xml或hiberante.properties)的. new Configuration()默认是读取hibernate.properties, 所以使用new Configuration().configure();来读取hibernate.cfg.xml配置文件

    SessionFactory:是一个重量级对象,它的创建是耗时的。因为它对应一个数据库里所有配置,包括一些缓存机制都由SessionFactory来维护,它与二级缓存是绑定的。通常只创建一次,但它是线程安全的。

    Session:是非线程安全的,它是通过SessionFactory来创建的。不要多个线程同时访问同一个Session,否则会出现一些未知问题。通常是一个请求对应一个Session,请求完成要关闭Session

    Transaction:hibernate默认不是自动开启事务的,所以要手动开启事务、手动提交事务、手动回滚事务、手动关闭事务。当然可以通过配置文件配置成自动。一般使用手动。

    Hibernate正常的开发思路:考虑对象模型这一块,把对象模型建立起来,把对象图建立起来,对象之间的关系建立起来、然后再编写映射文件(hbm),然后根据映射文件生成数据库表。数据库对我来说是透明的,我们只操作对象不用关心数据库。

  • 相关阅读:
    Centos7.3防火墙配置
    Centos7使用yum安装MySQL5.6的正确姿势
    Connect C# to MySQL
    ADO.NET操作MySQL数据库
    Mac OS 上 VIM 8.0 安装体验
    WebSocket实战之————Workerman服务器的安装启动
    C语言实现文件复制功能(包括文本文件和二进制文件)
    Gateway/Worker模型 数据库使用示例
    [转]Using the Group Pane to Repeat Page Titles
    [转]学习 WCF (6)--学习调用WCF服务的各种方法
  • 原文地址:https://www.cnblogs.com/sunhan/p/3819046.html
Copyright © 2011-2022 走看看