您的位置:首页 > 其它

【Hibernate一】概述及入门

2015-07-16 16:41 302 查看
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根目录下)
数据库要自己先新建好!!

[align=left]<?xml version= '1.0' encoding ='utf-8'?>[/align]
[align=left]<!DOCTYPE hibernate-configuration PUBLIC[/align]
        "-//Hibernate/Hibernate
Configuration DTD 3.0//EN"
[align=left]        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd" >[/align]
[align=left]
[/align]
[align=left]<hibernate-configuration>[/align]
[align=left]     <session-factory >[/align]
           <!-- 数据库的用户名
-->
[align=left]           <property name="connection.username" >root </property>[/align]
[align=left]           <!-- 密码 -->[/align]
           <property name="connection.password" >root </property>
[align=left]           <!-- url -->[/align]
[align=left]           <property name= "connection.url">[/align]
[align=left]              jdbc:mysql:// localhost:3306/hibernate512[/align]
[align=left]           </property>[/align]
[align=left]           <!-- 方言 告诉hibernate,要操作的数据库是mysql -->[/align]
[align=left]           <property name="dialect" >org.hibernate.dialect.MySQLDialect </property>[/align]
[align=left]           <!-- 导入驱动 -->[/align]
[align=left]           <property name= "connection.driver_class" >[/align]
[align=left]              com.mysql.jdbc.Driver[/align]
[align=left]           </property>[/align]
[align=left]     [/align]
           <!-- validate
只检查结构 update 检查结构,更新或者创建表 create 每次启动 hibernate时,都要创建表 create-drop
              启动 hibernate时创建表,当 hibernate关闭时,删除表
-->
[align=left]           <property name= "hbm2ddl.auto">update</property >[/align]

           <!--显示sql语句的输出 
-->
[align=left]           <property name= "show_sql"> true</ property >[/align]
[align=left]            <property name= "format_sql"> true</ property >[/align]

[align=left]          [/align]
           <!--关联映射文件,手动添加,然后自动生成! 
-->
[align=left]           <mapping resource="com/oteman/hibernate/domain/Person.hbm.xml" />[/align]
[align=left]     [/align]
[align=left]     </session-factory >[/align]
[align=left]
[/align]
[align=left]</hibernate-configuration>[/align]
3.要操作的实体bean(Person为例)

[align=left]package com.oteman.hibernate.domain;[/align]
[align=left]
[/align]
public class Person
{
[align=left]     Long pid;[/align]
[align=left]     String pname;[/align]
     String pgender;
     public Long
getPid() {
[align=left]           return pid ;[/align]
[align=left]     }[/align]
     public void setPid(Long
pid) {
           this.pid =
pid;
[align=left]     }[/align]
     public String
getPname() {
[align=left]           return pname ;[/align]
[align=left]     }[/align]
     public void setPname(String
pname) {
           this.pname =
pname;
[align=left]     }[/align]
     public String
getPgender() {
[align=left]           return pgender ;[/align]
[align=left]     }[/align]
     public void setPgender(String
pgender) {
           this.pgender =
pgender;
[align=left]     }[/align]
[align=left]
[/align]
[align=left]}[/align]
4.要操作的实体与数据库表的对应关系Person.hbm.xml
(通常与实体bean在同一个目录)

[align=left]<?xml version= "1.0" encoding ="utf-8"?>[/align]
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate
Mapping DTD 3.0//EN"
[align=left]"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >[/align]
[align=left]
[/align]
[align=left]<!-- 数据库表和类之间的映射关系  字段和表列名之间的关系 -->[/align]
[align=left]<hibernate-mapping>[/align]
[align=left]     <class name="com.oteman.hibernate.domain.Person"  table="Person" >[/align]
[align=left]           <id name= "pid" column ="pid" length="5" type="java.lang.Long" >[/align]
[align=left]               <generator class= "increment"></generator >[/align]
[align=left]           </id>[/align]
[align=left]           <property name= "pgender" column ="gender" length="10" type="string"></ property>[/align]
[align=left]           <property name= "pname" column ="name" length="20" ></property>[/align]
[align=left]     </class >[/align]
[align=left]
[/align]
[align=left]</hibernate-mapping>[/align]
5.根据配置文件建立表

[align=left]     @Test[/align]
[align=left]     public void testCreateTable(){[/align]
[align=left]          Configuration configuration= new Configuration();[/align]
[align=left]          configuration.configure();[/align]
[align=left]          SessionFactory sessionFactory = configuration.buildSessionFactory();[/align]
[align=left]     }[/align]
6.增删改查:

[align=left]/**[/align]
[align=left]      * 向数据库中增加数据[/align]
[align=left]      */[/align]
[align=left]     @Test[/align]
[align=left]     public void add(){[/align]
[align=left]
[/align]
[align=left]          Session session = sessionFactory.openSession();[/align]
[align=left]          Transaction transaction = session.beginTransaction();[/align]
[align=left]          Person p= new Person();[/align]
[align=left]          p.setPgender( "男");[/align]
[align=left]          p.setPname( "张三");[/align]
[align=left]          session.save(p);[/align]
[align=left]          transaction.commit();[/align]
[align=left]          session.close();[/align]
[align=left]     }[/align]
[align=left]     [/align]
[align=left]     /**[/align]
[align=left]      * 更新数据, hibernate具有快照机制,会将对象前后的值进行比较,如果发现对象的属性没有发生改变,那么就不进行update操作,可以观察 sql语句;[/align]
[align=left]      */[/align]
[align=left]     @Test[/align]
[align=left]     public void update(){[/align]
[align=left]          Session session = sessionFactory.openSession();[/align]
[align=left]          Transaction transaction = session.beginTransaction();[/align]
          Person person=(Person) session.get(Person. class,
2l);
[align=left]          person.setPname( "哈哈");[/align]
[align=left]           /*//第二种形式:[/align]
[align=left]          Person p=new Person();[/align]
[align=left]          p.setPgender("男");[/align]
[align=left]          p.setPid(2L);[/align]
[align=left]          p.setPname("李四");*/[/align]
[align=left]          session.update(person);[/align]
[align=left]          transaction.commit();[/align]
[align=left]          session.close();[/align]
[align=left]     }[/align]
[align=left]     /**[/align]
[align=left]      * 删除数据[/align]
[align=left]      */[/align]
[align=left]     @Test[/align]
[align=left]     public void delete(){[/align]
[align=left]          Session session= sessionFactory.openSession();[/align]
[align=left]          Transaction transaction = session.beginTransaction();[/align]
          Person person=(Person) session.get(Person. class,
1l);
[align=left]          session.delete(person);[/align]
[align=left]          [/align]
[align=left]          transaction.commit();[/align]
[align=left]          session.close();[/align]
[align=left]          [/align]
[align=left]     }[/align]
[align=left]     /**[/align]
[align=left]      * 查询所有![/align]
[align=left]      */[/align]
[align=left]     @Test[/align]
[align=left]     public void query(){[/align]
[align=left]          Session session= sessionFactory.openSession();[/align]
           List list = session.createQuery("from
Person").list();
[align=left]          System. out.println(list.size());[/align]
[align=left]          session.close();[/align]
[align=left]     }[/align]
7.Generator主键产生机制

[align=left]public class GeneratroTest extends HibernateUtils{[/align]
[align=left]     [/align]
[align=left]     /**[/align]
[align=left]      *[/align]
      * 1.<id name=" pid" column="pid"
type="java.lang.Long">
[align=left]               <generator class="increment"> </generator>[/align]
[align=left]           </id>[/align]
[align=left]      * increament形式产生的 sql语句[/align]
[align=left]      *    Hibernate:[/align]
[align=left]              select[/align]
[align=left]                  max( pid)[/align]
[align=left]              from[/align]
[align=left]                  person[/align]
[align=left]           Hibernate:[/align]
[align=left]              insert[/align]
[align=left]              into[/align]
[align=left]                  person[/align]
[align=left]                  ( pname, psex , pid)[/align]
[align=left]              values[/align]
[align=left]                  (?, ?, ?)[/align]
[align=left]                 [/align]
[align=left]           说明:[/align]
[align=left]              1、先得到主键的最大值[/align]
[align=left]              2、在最大值的基础上加1[/align]
[align=left]              3、上述的两步过程是由 hibernate内部完成的[/align]
[align=left]      */[/align]
[align=left]     @Test[/align]
[align=left]     public void testIncrement(){[/align]
[align=left]          Session session =  sessionFactory.openSession();[/align]
[align=left]          Transaction transaction = session.beginTransaction();[/align]
[align=left]          Person person = new Person();[/align]
[align=left]           //person.setPid(11L);为increament时,自行设置的id没有用, hibernate会帮我们处理id;[/align]
[align=left]          person.setPname( "云三班长" );[/align]
[align=left]          person.setPsex( "不详");[/align]
[align=left]          session.save(person);[/align]
[align=left]          transaction.commit();[/align]
[align=left]          session.close();[/align]
[align=left]     }[/align]
[align=left]     [/align]
[align=left]     /**[/align]
[align=left]      *[/align]
[align=left]      * 2.<generator class="identity"> </generator>[/align]
[align=left]      *[/align]
[align=left]      * Hibernate:[/align]
[align=left]         insert[/align]
[align=left]         into[/align]
[align=left]             person[/align]
[align=left]             ( pname, psex )[/align]
[align=left]         values[/align]
[align=left]             (?, ?)[/align]
[align=left]             说明:[/align]
[align=left]               主键的生成交给数据库来做,数据库必须支持自动增长机制,会出现id不连续的情况,效率比increment要高一些;[/align]
[align=left]      */[/align]
[align=left]     @Test[/align]
[align=left]     public void testIdentity(){[/align]
[align=left]          Session session =  sessionFactory.openSession();[/align]
[align=left]          Transaction transaction = session.beginTransaction();[/align]
[align=left]          Person person = new Person();[/align]
[align=left]           //person.setPid(11L);[/align]
[align=left]          person.setPname( "云三班长" );[/align]
[align=left]          person.setPsex( "不详");[/align]
[align=left]          session.save(person);[/align]
[align=left]          transaction.commit();[/align]
[align=left]          session.close();[/align]
[align=left]     }[/align]
[align=left]     [/align]
[align=left]     /**[/align]
[align=left]      * 3.<generator class=" uuid"></generator>[/align]
[align=left]      * 主键的生成是由 hibernate内部完成的[/align]
[align=left]      */[/align]
[align=left]     @Test[/align]
[align=left]     public void testUUID(){[/align]
[align=left]          Session session =  sessionFactory.openSession();[/align]
[align=left]          Transaction transaction = session.beginTransaction();[/align]
[align=left]          Person person = new Person();[/align]
[align=left]          person.setPname( "云三班长" );[/align]
[align=left]          person.setPsex( "不详");[/align]
[align=left]          session.save(person);[/align]
[align=left]          transaction.commit();[/align]
[align=left]          session.close();[/align]
[align=left]     }[/align]
[align=left]     /**[/align]
[align=left]      * 4.<generator class="assign"> </generator>[/align]
[align=left]      * 主键的生成由自己指定。[/align]
[align=left]      */[/align]
[align=left]     @Test[/align]
[align=left]     public void testAssigned(){[/align]
[align=left]          Session session =  sessionFactory.openSession();[/align]
[align=left]          Transaction transaction = session.beginTransaction();[/align]
[align=left]          Person person = new Person();[/align]
[align=left]          person.setPid(11L);[/align]
[align=left]          person.setPname( "云三班长" );[/align]
[align=left]          person.setPsex( "不详");[/align]
[align=left]          session.save(person);[/align]
[align=left]          transaction.commit();[/align]
[align=left]          session.close();[/align]
[align=left]     }[/align]
[align=left]}[/align]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  框架 hibernate