一.为什么用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. 为网页元素增加resize事件

    默认只有window支持resize事件,但有时我们需要为div等元素添加resize事件 代码见下面,原理是在元素内添加一个内嵌html,然后监听这个内嵌html的resize事件 import { ...

  2. 转 C++11 并发指南std::condition_variable详解

    之前看过,但是一直没有怎么用就忘了,转一篇别人的文字记录下来 本文将介绍 C++11 标准中 <condition_variable> 头文件里面的类和相关函数. <conditio ...

  3. D3——基本知识点

    选择器: d3.select - 从当前文档中选择一个元素 d3.selectAll - 从当前文档中选择多个元素 selection.append - 创建并追加一个新元素 selection.at ...

  4. 随滚动条滚动,始终处于屏幕的中间类似qq的浮动窗口 (能看到运动的过程)

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  5. 关于HiddenHttpMethodFilter

    这个类的代码比较少,所以把整个类的代码都复制过来.在注释中添加上自己的理解. public class HiddenHttpMethodFilter extends OncePerRequestFil ...

  6. PowerDNS简单教程(1):安装篇

    这一篇开始直接是PowerDNS教程,连续四篇.DNS的相关背景知识我就不介绍了,有需要的话看看 http://baike.baidu.com/link?url=QcthFpAb2QydMqcMJr9 ...

  7. Centos7 yum安装mysql

    参考此文档:http://www.jb51.net/article/116032.htm http://www.jb51.net/article/95399.htm 1.在官网下载mysql57-co ...

  8. springmvc小结(下)

    1.@ModelAttribute 1.给共享的数据设置model数据设置,贴在形参上,也可以贴在方法上,设置一个model的key值 2.当controller方法返回一个对象的时候,,缺省值会把当 ...

  9. Visual Studio 中常用的快捷键

    项目相关的快捷键 Ctrl + Shift + B = 生成项目 Ctrl + Alt + L = 显示 Solution Explorer(解决方案资源管理器) Shift + Alt+ C = 添 ...

  10. 关于content-type请求头的说明

    Content-Type请求头的作用,用于标记请求体数据的格式,如: 1. Content-Type:application/x-www-form-urlencoded 请求体:b'pwd=123&a ...