zoukankan      html  css  js  c++  java
  • [Java] Hibernate

    背景

    • 持久化技术框架
    • 封装了JDBC做数据库相关功能开发的重复性工作
    • 比如创建连接,关闭连接,把字段逐一映射到属性中等

    使用

    • 在数据库中创建表
    • 创建java project
    • 导入hibernate依赖的jar包
    • 创建实体类,映射数据库中的表
    • 配置Product.hbm.xml
      • 在包com.how2java.pojo下创建
      • 用于映射Product类与数据库中表的对应关系
      • <class name="Product" table="product_">:类Product对应表product_
      • <id name="id" column="id">:属性id,映射表里的字段id
      • <generator class="native"> :id的自增长方式采用数据库的本地方式
    • 配置hibernate.cfg.xml
      • src目录下创建 hibernate.cfg.xml
      • 配置访问数据库要用到的驱动,url,账号密码等
      • <property name="dialect">org.hibernate.dialect.MySQLDialect</property>:使用MySQL方言
      • <property name="current_session_context_class">thread</property>:设置事务管理方式为每个线程一个事务
      • <property name="show_sql">true</property>:设置是否在控制台显示执行的sql语句
      • <property name="hbm2ddl.auto">update</property>:是否自动更新数据库的表结构
      • <mapping resource="com/how2java/pojo/Product.hbm.xml" />:识别Product实体类
    • 创建Product对象,通过hibernate把这个对象插入到数据库中
      • 获取SessionFactory 
      • 通过SessionFactory 获取一个Session
      • 在Session基础上开启一个事务
      • 调用Session的save方法把对象保存到数据库 
      • 提交事务
      • 关闭Session
      • 关闭SessionFactory

    注解

    • 本来放在hbm.xml文件里的映射信息,现在不用配置文件做了,改由注解来完成
    • 配置
      • 把hibernate.cfg.xml 中
      • <mapping resource="com/how2java/pojo/Product.hbm.xml" />
      • 改为
      • <mapping class="com.how2java.pojo.Product" />
    • 与xml比较
      • xml:容易编辑,配置比较集中,方便修改;较繁琐,配置文件过多时难以管理(适合大项目) 
      • 注解:方便,简洁;分散到各个class文件中,不易维护(适合小项目)

    相关概念

    • HQL
      • hibernate专门用于查询数据的语句,相比于SQL更接近于面向对象的思维方式
    • 事务
      • Hibernate的任何对数据有改动的操作,都应该被放在事务里面(都成功,或都失败)
      • 在Mysql中,只有当表的类型是INNODB的时候,才支持事务
    • 延迟加载(lazyload)
      • 属性的延迟加载:只有访问了这个对象的属性,hibernate才会到数据库中进行查询
      • 关系的延迟加载
    • 级联
      • 没有配置级联的时候,删除分类,其对应的产品不会被删除 
      • 配置了恰当的级联,那么删除分类的时候,其对应的产品都会被删除掉
      • 四种类型
        • all:所有操作都执行级联操作
        • none:所有操作都不执行级联操作
        • delete:删除时执行级联操作
        • save-update:保存和更新时执行级联操作 
    • 缓存
      • 一级缓存存放在session上,hibernate默认开启 
      • 二级缓存在SessionFactory上,在hibernate.cfg.xml中开启(hibernate本身不提供,需安装插件如 EhCache)   
    • 乐观锁
      • 处理脏数据问题
      • <version name="version" column="ver" type="int"></version>
      • 增加一个version字段,用于版本信息控制
      • version元素必须紧跟着id后面,否则会出错

    • 连接池
      • 建立数据库连接比较耗时
      • 通常都会采用数据库连接池的技术来建立多条数据库连接,并且在将来持续使用
      • 节约建立数据库连接的时间,应对高并发量场景
      • hibernate本身提供的数据库连接池不推荐使用,一般会使用第三方的数据库连接池,如C3P0 
  • 相关阅读:
    CI控制器
    php+mysql新无线级分类
    php函数引用
    java数据类型
    进制装换
    java环境
    node.js
    移动端或者网页端下拉加载
    yii DAO操作总结
    yii中find()指定条件
  • 原文地址:https://www.cnblogs.com/cxc1357/p/12517928.html
Copyright © 2011-2022 走看看