Query session.createQuery(String hql)方法; 数据库
* hibernate的session.createQuery()方法是使用HQL(hibernate的查询语句)语句查询对象的。 缓存
* hql:是查询对象的,例如:"from User",其中from不区分大小写,而User是区分大小写,由于它是对象。是User类 安全
* 返回Query对象。 session
* 执行这条语句后,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); } }
Hibernate是一个O/R映射框架(也称为ORM) spa
从ORM词来看,O---Object(对象模型);R--- Relational(关联模型),能够作对象和关联的一种映射,固然这只是部分功能,一个完善ORM框架应该具备更多的功能:如HQL相关的查询语句、提供缓存机制(一级缓存、二级缓存)。 hibernate
Java开发数据库时,使用JDBC,可是须要编写大量相同的代码,这样不便提升生产效率,而hibernate可让你不能编写大量的相同的代码。从而提升生产效率。另外一方面,hibernate可让咱们更面对象化开发,还有一个移植性hibernate只须要更改配置文件(数据库适配器)的选项,就能够很是方便的移植到不一样的数据库,而不须要从新编写不一样数据库厂家所对应的JDBC、SQL语句了。还有hibernate能够解决阻抗不匹配(Java类中有继承关系,而关系型数据库中没有这个功能(目前数据库还不是面向对象,都是关系型数据库)),使用hibernate框架,侵入性比较好(所以hibernate称为轻量级框架) 线程
O/R映射框架和使用环境:在程序中添加→修改→保存;查询能够批量,可是修改不可为批量性;程序中有大量的数据只读,这样就能够一次性读取到缓存中;对象间存在天然的关系;不须要数据库SQL特定的语句优化。 code
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),而后根据映射文件生成数据库表。数据库对我来讲是透明的,咱们只操做对象不用关心数据库。