Hibernate学习框架:
1、基本部分

     crud的操作

     主键的生成机制

     类型

     持久化类

     映射文件 *.hbm.xml

     配置文件 hibernate.cfg.xml

2、关系部分

     一对多的单项

     一对多的双向

     多对多的双向

     一对一

        在many-to-one加一个属性unique="true"

        cascade  级联
        inverse  维护关系  <set>中lazy,fetch

3、性能的部分

  • 维护关系 inverse
  • 懒载入 lazy
  • 抓取策略 fetch
  • 一级缓存
  • 二级缓存

查询缓存

4、查询

    hql

    条件查询



一。Hibernate概述:
在servlet中。操作数据库我们使用的是jdbc,为了更加方便的操作数据库,我们能够使用ORM框架,ORM:Object Relation Mapping,对象关系映射。目的就是像操作java普通的类一样来操作数据库。

显然Hibernate是ORM框架中做得比較好的一款!


Hibernate的有点:
  • 面向对象数据库编程;
  • 代码书写更加简洁;
  • 具有缓存机制。提高效率;

二.入门:

准备条件:

1.导入相关的包
2.hibernate.cfg.xml:(通常位于scr根文件夹下)
数据库要自己先新建好。!
<?xml version= '1.0' encoding ='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate
Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >

<hibernate-configuration>
     <session-factory >
           <!-- 数据库的username
-->
           <property name="connection.username" >root </property>
           <!-- password -->
           <property name="connection.password" >root </property>
           <!-- url -->
           <property name= "connection.url">
              jdbc:mysql:// localhost:3306/hibernate512
           </property>
           <!-- 方言 告诉hibernate,要操作的数据库是mysql -->
           <property name="dialect" >org.hibernate.dialect.MySQLDialect </property>
           <!-- 导入驱动 -->
           <property name= "connection.driver_class" >
              com.mysql.jdbc.Driver
           </property>
     
           <!-- validate
仅仅检查结构 update 检查结构,更新或者创建表 create 每次启动 hibernate时,都要创建表 create-drop
              启动 hibernate时创建表。当 hibernate关闭时,删除表
-->
           <property name= "hbm2ddl.auto">update</property >
           <!--显示sql语句的输出 
-->
           <property name= "show_sql"> true</ property >
            <property name= "format_sql"> true</ property >
          
           <!--关联映射文件,手动加入。然后自己主动生成。 
-->
           <mapping resource="com/oteman/hibernate/domain/Person.hbm.xml" />
     
     </session-factory >

</hibernate-configuration>

3.要操作的实体bean(Person为例)
package com.oteman.hibernate.domain;

public class Person
{
     Long pid;
     String pname;
     String pgender;
     public Long
getPid() {
           return pid ;
     }
     public void setPid(Long
pid) {
           this.pid =
pid;
     }
     public String
getPname() {
           return pname ;
     }
     public void setPname(String
pname) {
           this.pname =
pname;
     }
     public String
getPgender() {
           return pgender ;
     }
     public void setPgender(String
pgender) {
           this.pgender =
pgender;
     }

}


4.要操作的实体与数据库表的相应关系Person.hbm.xml
(通常与实体bean在同一个文件夹)
<?xml version= "1.0" encoding ="utf-8"?

>

<!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.oteman.hibernate.domain.Person"  table="Person" >
           <id name= "pid" column ="pid" length="5" type="java.lang.Long" >
               <generator class= "increment"></generator >
           </id>
           <property name= "pgender" column ="gender" length="10" type="string"></ property>
           <property name= "pname" column ="name" length="20" ></property>
     </class >

</hibernate-mapping>


5.依据配置文件建立表
     @Test
     public void testCreateTable(){
          Configuration configuration= new Configuration();
          configuration.configure();
          SessionFactory sessionFactory = configuration.buildSessionFactory();
     }


6.增删改查:
/**
      * 向数据库中添加数据
      */
     @Test
     public void add(){

          Session session = sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          Person p= new Person();
          p.setPgender( "男");
          p.setPname( "张三");
          session.save(p);
          transaction.commit();
          session.close();
     }
     
     /**
      * 更新数据, hibernate具有快照机制,会将对象前后的值进行比較,假设发现对象的属性没有发生改变,那么就不进行update操作,能够观察 sql语句;
      */
     @Test
     public void update(){
          Session session = sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          Person person=(Person) session.get(Person. class,
2l);
          person.setPname( "哈哈");
           /*//另外一种形式:
          Person p=new Person();
          p.setPgender("男");
          p.setPid(2L);
          p.setPname("李四");*/
          session.update(person);
          transaction.commit();
          session.close();
     }
     /**
      * 删除数据
      */
     @Test
     public void delete(){
          Session session= sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          Person person=(Person) session.get(Person. class,
1l);
          session.delete(person);
          
          transaction.commit();
          session.close();
          
     }
     /**
      * 查询全部!

      */
     @Test
     public void query(){
          Session session= sessionFactory.openSession();
           List list = session.createQuery("from
Person").list();
          System. out.println(list.size());
          session.close();
     }

7.Generator主键产生机制
public class GeneratroTest extends HibernateUtils{
     
     /**
      *
      * 1.<id name=" pid" column="pid"
type="java.lang.Long">
               <generator class="increment"> </generator>
           </id>
      * increament形式产生的 sql语句
      *    Hibernate:
              select
                  max( pid)
              from
                  person
           Hibernate:
              insert
              into
                  person
                  ( pname, psex , pid)
              values
                  (?, ?

, ?)

                 
           说明:
              1、先得到主键的最大值
              2、在最大值的基础上加1
              3、上述的两步过程是由 hibernate内部完毕的
      */
     @Test
     public void testIncrement(){
          Session session =  sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          Person person = new Person();
           //person.setPid(11L);为increament时,自行设置的id没实用, hibernate会帮我们处理id;
          person.setPname( "云三班长" );
          person.setPsex( "不详");
          session.save(person);
          transaction.commit();
          session.close();
     }
     
     /**
      *
      * 2.<generator class="identity"> </generator>
      *
      * Hibernate:
         insert
         into
             person
             ( pname, psex )
         values
             (?, ?)
             说明:
               主键的生成交给数据库来做,数据库必须支持自己主动增长机制,会出现id不连续的情况,效率比increment要高一些;
      */
     @Test
     public void testIdentity(){
          Session session =  sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          Person person = new Person();
           //person.setPid(11L);
          person.setPname( "云三班长" );
          person.setPsex( "不详");
          session.save(person);
          transaction.commit();
          session.close();
     }
     
     /**
      * 3.<generator class=" uuid"></generator>
      * 主键的生成是由 hibernate内部完毕的
      */
     @Test
     public void testUUID(){
          Session session =  sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          Person person = new Person();
          person.setPname( "云三班长" );
          person.setPsex( "不详");
          session.save(person);
          transaction.commit();
          session.close();
     }
     /**
      * 4.<generator class="assign"> </generator>
      * 主键的生成由自己指定。
      */
     @Test
     public void testAssigned(){
          Session session =  sessionFactory.openSession();
          Transaction transaction = session.beginTransaction();
          Person person = new Person();
          person.setPid(11L);
          person.setPname( "云三班长" );
          person.setPsex( "不详");
          session.save(person);
          transaction.commit();
          session.close();
     }
}

【Hibernate一】概述及入门的更多相关文章

  1. 一起学习Hibernate: Hibernate01 —— Hibernate的概述与入门案例

    一 Hibernate的介绍 1 让我们从JDBC与替代它的框架Hibernate进行一下对比. 1.1 JDBC的缺点 1) 代码结构繁琐.每次书写sql语句操作数据库都得需要很多步; 2) 是面向 ...

  2. 三大框架 之 Hibernate框架概述(概述、配置、核心API)

    目录 Hibernate框架概述 什么是框架 hibernate简介(JavaEE技术三层架构所用到的技术) hibernate是什么框架 ORM hibernate好处 Hibernate基本使用 ...

  3. MySql概述及入门(五)

    MySql概述及入门(五) MySQL集群搭建之读写分离 读写分离的理解 为解决单数据库节点在高并发.高压力情况下出现的性能瓶颈问题,读写分离的特性包括会话不开启事务,读语句直接发送到 salve 执 ...

  4. MySQL概述及入门(四)

    MySql概述及入门(四) 什么是MySQL的锁? 数据库锁定机制,就是数据库为了保证数据的一致性,而使各种共享资源在被并发访问变得有序所设计的一种规则,简单说,就是不让别人动 总的来说,MySQL各 ...

  5. MySQL概述及入门(三)

    MySql概述及入门(三) MySQL性能优化 主要优化安全和性能方面 安全方面 : 数据可持续性 性能方面 : 数据的高性能访问 性能优化——慢查询 在MySQL数据库中有一个慢查询日志功能,去获取 ...

  6. MySQL概述及入门(二)

    MySql概述及入门(二) MySQL架构 逻辑架构图: 执行流程图: MySQL的存储引擎 查询数据库支持的存储引擎 执行: show engines: 多存储引擎是mysql有别于其他数据库的一大 ...

  7. MySQL概述及入门(一)

    MySql概述及入门(一) 什么是MySQL?    MySQL是当今主流的关系型数据库管理系统(记录是有行有列的数据库) , 可以与Oracle 和SQL Server 竞争 , 是最好RDBMS( ...

  8. Hibernate学习笔记(一)—— Hibernate概述及入门

    一.Hibernatea概述 1.1 什么是Hibernate? 在介绍什么是Hibernate之前,我们先讨论一下什么是框架?框架是用来提高开发效率的,框架封装好了一些功能,我们需要使用这些功能时, ...

  9. Hibernate_day01--课程安排_Hibernate概述_Hibernate入门

    Hibernate_day01 Hibernate课程安排 今天内容介绍 WEB内容回顾 JavaEE三层结构 MVC思想 Hibernate概述 什么是框架 什么是hibernate框架(重点) 什 ...

随机推荐

  1. python 什么是全局解释器锁GIL

    什么是全局解释器锁GIL Python代码的执行由Python 虚拟机(也叫解释器主循环,CPython版本)来控制,Python 在设计之初就考虑到要在解释器的主循环中,同时只有一个线程在执行,即在 ...

  2. Hibernate.cfg.xml详解

    在搭建Hibernate环境时需要配置Hibernate.cfg.xml配置文件,本文将想详细讲解配置文件的内容. 1.数据库连接信息 配置数据库驱动.(其中name为连接方式,我在这写jdbc的连接 ...

  3. finish/onDestroy/System.exit()的区别

    Activity.finish():Call this when your activity is done and should be closed. 在你的activity动作完成的时候,或者Ac ...

  4. 内功心法 -- java.util.LinkedList<E> (2)

    写在前面的话:读书破万卷,编码如有神--------------------------------------------------------------------下文主要对java.util ...

  5. Linux知识(4)----文件系统结构

    Ubantu 14.04的文件系统结构如下图所示: 参考资料: 1.http://www.cnblogs.com/wen858636827/archive/2012/12/26/2834373.htm ...

  6. PHP简单利用 token 防止表单重复提交

    <?php /* * 隐藏一个可变的token,每次提交都需要和服务器校对 */ session_start(); function set_token() { $_SESSION['token ...

  7. 线性稳压器 (LDO)

    线性稳压器 (LDO) 当输出电压低于输入电压时,必须从负载电源和压降比来考虑要采用线性稳压器 (LDO) 或降压转换器 (Buck) 低压降线性稳压器 (LDO) 适合用在需求低噪讯.低电流和低压降 ...

  8. Autocomplete TEdit

    http://forum.codecall.net/topic/75946-autocomplete-tedit/ Overview Autocomplete feature really helpf ...

  9. sqlserver获取指定数据库的描述

    SELECT 字段名= convert(varchar(100), a.name), 表名= convert(varchar(50), d.name ), 类型= CONVERT(varchar(50 ...

  10. tomcat服务器重启后session可以继续使用

    原文:http://blog.csdn.net/e421083458/article/details/8651312 测试没有效果 配置server.xml文件,加入session保存操作 <C ...