一.为什么用Hibernate?  【核心:对象关系映射】

  Hibernate是对jdbc的轻量级封装,可以简化数据库连接操作,

  在该框架之前,数据库的操作步骤是:

1.根据连接字串获取连接
2.执行sql语句
3.获取结果集
4.从结果集提取数据

二.Hibernate怎么用?

  1.引入框架所需要的包

  2.配置 src/hibernate.cfg.xml,常用配置如下:  【hibernate.cfg.xml 该文件名由软件自动生成,不能修改】

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<!-- Generated by MyEclipse Hibernate Tools. -->
<hibernate-configuration> <session-factory>
<property name="hbm2ddl.auto">update</property>  //根据类自动建表
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.url">jdbc:mysql://localhost:3306/test</property>
<property name="connection.username">root</property>
<property name="connection.password">java</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property> <!-- 自定义配置 -->
<property name="show_sql">true</property>  //显示sql语句
<property name="format_sql">true</property>  //格式化显示sql语句 <!-- 映射文件 -->
<mapping resource="com/bean/User.hbm.xml"/>
</session-factory> </hibernate-configuration>

  3.编写实体类映射文件  User.hbm.xml  【文件名和实体类名字相同】

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping>
<class name="com.bean.User" table="TEST_USER" >
<id name="id">
<generator class="native"/>
</id>
<property name="uname"/>
<property name="photo"/>
</class>
</hibernate-mapping>

  4.进行具体查询的业务逻辑【软件导入框架时会默认添加一个获取session的类】

package com.dao.impl;

import org.hibernate.Session;
import org.hibernate.Transaction; import com.bean.User;
import com.dao.IUserDao;
import com.util.HibernateSessionFactory; public class UserDaoImpl implements IUserDao{ @Override
public Integer addUser(User u) { int result = -1;
//获取会话
Session session = HibernateSessionFactory.getSession();
Transaction tx = session.beginTransaction(); try {
//保存数据
session.save(u);
tx.commit();
result=1;
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} //关闭
session.close();
return result;
} }

三,Hibernate高级知识:

  1.对象关系映射

    当一个类里,把另一个类作为属性使用时,怎么用映射文件来反映这种关系?

    这就是对象关系映射,参考上一篇对象关系映射文章

  2.Hibernate查询:Query查询,Criteria查询  [不常用的本地查询,native查询]

    Query查询:

  //获取会话 
  Session session = HibernateSessionFactory.getSession();
  Transaction tx = session.beginTransaction(); String hql="from Admin as admin where admin.aname=:name";//使用命名参数,推荐使用,易读。 Query query=session.createQuery(hql);
query.setString("name", name);
List<Admin> list=query.list(); for(Admin admin:list){
  System.out.println(admin.getAname());
}

   Criteria查询:

    Restrictions-条件查询,默认获取全部

    Projections-聚合查询,如求和,平均值

  //获取会话 
  Session session = HibernateSessionFactory.getSession();
  Transaction tx = session.beginTransaction();   Criteria c=session.createCriteria(Admin.class);
c.add(Restrictions.eq("aname",name));//eq是等于,gt是大于,lt是小于,or是或
c.add(Restrictions.eq("apassword", password)); List<Admin> list=c.list();
for(Admin admin:list){
System.out.println(admin.getAname());
}

四,Hibernate查询优化 

  1.延时加载:当一个类的属性是另一个类的时候,只显示本类属性,

    用法:配置set-lazy属性即可,默认开启

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="org.crazyit.app.domain">
   <!-- 映射 Person 持久化类 -->
   <class name="Person" table="person_inf">
    <!-- 映射标识属性 id -->
    <id name="id" column="person_id">
      <!-- 定义主键生成器策略 -->
      <generator class="identity"/>
    </id>
    
     <!-- 用于映射普通属性 -->
    <property name="name" type="string"/>
     <property name="age" type="int"/>
  
    <!-- 映射集合属性 -->
    <set name="addresses" table="person_address" lazy="true">
      。。。
   </set>
  </class>
</hibernate-mapping>

  2.抓取策略:和延时差不多,

    用法:配置set-fetch属性即可,默认开启

五,Hibernate缓存

  1.一级缓存默认开启,session不关闭同一查询,语句只执行一次

    2.二级缓存,由第三方提供,可以于session关闭情况下进行历史查询

    导入第三方包

    在配置文件里添加开启配置

   

Hibernate怎么用的更多相关文章

  1. hibernate多对多关联映射

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  2. 解决 Springboot Unable to build Hibernate SessionFactory @Column命名不起作用

    问题: Springboot启动报错: Caused by: org.springframework.beans.factory.BeanCreationException: Error creati ...

  3. hibernate多对一双向关联

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  4. Hibernate中事务的隔离级别设置

    Hibernate中事务的隔离级别,如下方法分别为1/2/4/8. 在Hibernate配置文件中设置,设置代码如下

  5. Hibernate中事务声明

    Hibernate中JDBC事务声明,在Hibernate配置文件中加入如下代码,不做声明Hibernate默认就是JDBC事务. 一个JDBC 不能跨越多个数据库. Hibernate中JTA事务声 ...

  6. spring applicationContext.xml和hibernate.cfg.xml设置

    applicationContext.xml配置 <?xml version="1.0" encoding="UTF-8"?> <beans ...

  7. [原创]关于Hibernate中的级联操作以及懒加载

    Hibernate: 级联操作 一.简单的介绍 cascade和inverse (Employee – Department) Casade用来说明当对主对象进行某种操作时是否对其关联的从对象也作类似 ...

  8. hibernate的基本xml文件配置

    需要导入基本的包hibernate下的bin下的required和同bin下optional里的c3p0包下的所有jar文件,当然要导入mysql的驱动包了.下面需要注意的是hibernate的版本就 ...

  9. Maven搭建SpringMVC+Hibernate项目详解 【转】

    前言 今天复习一下SpringMVC+Hibernate的搭建,本来想着将Spring-Security权限控制框架也映入其中的,但是发现内容太多了,Spring-Security的就留在下一篇吧,这 ...

  10. 1.Hibernate简介

    1.框架简介: 定义:基于java语言开发的一套ORM框架: 优点:a.方便开发;           b.大大减少代码量;           c.性能稍高(不能与数据库高手相比,较一般数据库使用者 ...

随机推荐

  1. Linux下XAMPP的部署实战

    上传源码文件 rz -be 下载xampp安装包wget http://sourceforge.net/projects/xampp/files/XAMPP%20Linux/5.5.28/xampp- ...

  2. ADF中VO的查询方法比较

    getRowCount(),getQueryHitCount(oracle.jbo.server.ViewRowSetImpl),getEstimatedRangePageCount,getCappe ...

  3. php中文正则匹配

    今天接到一个需求,用户昵称系统需要将昵称输入的字符类型限定为 中文,英文,数字, -,_ 显然这个应该用正则来实现,那么最终的规则是怎么样的呢?示例代码如下: <?php $str = '我爱北 ...

  4. php签到

    <?php namespace Member\Controller; use Member\Controller\MController; class IndexController exten ...

  5. alibaba--java规范

    18. [推荐]final 可以声明类.成员变量.方法.以及本地变量,下列情况使用 final 关键字: 1) 不允许被继承的类,如:String 类. 2) 不允许修改引用的域对象,如:POJO 类 ...

  6. 如何用C#对Gridview的项目进行汇总统计?

    上一次用了javascript对gridview进行了汇总统计,但那个统计是在客户端进行的,虽然减轻了服务器的负担,但是,当需要把统计信息汇出excel时,汇总信息却死活不出来了,所以,绕半天又绕回来 ...

  7. HDU 1028 Ignatius and the Princess III 整数的划分问题(打表或者记忆化搜索)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1028 Ignatius and the Princess III Time Limit: 2000/1 ...

  8. 一点一点看JDK源码(一)Collection体系概览

    一点一点看JDK源码(一)Collection体系概览 liuyuhang原创,未经允许进制转载 本文举例使用的是JDK8的API 目录:一点一点看JDK源码(〇) 1.综述 Collection为集 ...

  9. Knowledge Point 20180303 我们为什么要配置环境变量

    1.1为什么要配置环境变量 在学习JAVA的过程中,涉及到多个环境变量(environment variable)的概念,如PATH.正确地配置这些环境变量,是能够顺利学习.开发的前提.而经常出现的问 ...

  10. mac 无法写入设备的最后一个块 格式化

    硬盘,U盘,装在硬盘盒通过USB连接到电脑.但是无法格式化硬盘 失败的页面显示: 正在卸载磁盘 无法写入设备的最后一个块 操作失败 建议您这样做: 1.切换进Windows系统,或者找一台安装有Win ...