Hibernate笔记

1)     主键生成方式

assigned:指派,即由用户自行管理

//HBM根元素 指定POJO类所在的包<hibernate-mapping package=" POJO类所在的包路径">

//指定Person类与PERSON表的映射 <class name="Person"table="PERSON">

//name表示Person类中的属性名字   //column:表示表中的字段名字    //type:类型

<id name="id"column="ID"type="string">

//主键的生成方式:assigned:表示由用户自行管理   <generator class="assigned"/>

</id>

//表示Person类中与表中其他字段的映射

//namePerson类中的属性名称

//column:表中的字段名称

//type:类型

//not-null:不允许为空

<property name="name"column="NAME"type="string"not-null="true"/>

<property name="password"column="PASSWORD"type="string"not-null="true"/>

<property name="sex"column="SEX"type="string"/>

<property name="email"column="EMAIL"type="string"/>

</class>

</hibernate-mapping>

此文件完成Person类到PERSON表的关系

取得操作数据库的Session

Session是一个接口,必须通过其他类实例化,格式是固定的

//找到Hibernate配置

Configuration config=new Configuration().configure();

//从配置中取出SessionFactory

SessionFactory factory=config.buildSessionFactory();

//SessionFactory中取出一个Session

this.session=factory.openSession();

通过正常配置之后,发现数据无法存入

事务处理,在插入完成之后,必须将事务提交:Transaction

使用Hibernate操作数据库,代码量很少,由Hibernate完成

用户就感觉像使用对象一样去使用数据库

所有的操作过程都是通过POJO类完成

主键生成方式:assigned:指派

·Sequence:自动增长的数据段

·uuid.hex:生成一个32位,不会重复的主键

2)     实体映射-粒度设计

     所谓的细粒度划分,是指在POJO类上的面向对象的划分,而不在于表的划分上.

例如: 配置文件:

<?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">

<!--DO NOT EDIT:This is a generated file that is synchronized-->

<!--by MyEclipse Hibernate tool integration.-->

<!--Created Sat Nov 11 20:51:28 CST 2006-->

<hibernate-mapping package=" POJO类所在的包路径">

<class name="Person"table="PERSON">

<id name="id"column="ID"type="long">

<generator class="assigned"/>

</id>

<component name="name"class="org.lxh.hibernate.Name">

<property name="firstname"column="FIRSTNAME"type="string"not-null="true"/>

<property name="lastname"column="LASTNAME"type="string"not-null="true"/>

</component>

E-Mailmldnqa@163.com<component name="contact"class="org.lxh.hibernate.Contact">

<property name="address"column="ADDRESS"type="string"not-null="true"/>

<property name="zipcode"column="ZIPCODE"type="string"not-null="true"/>

<property name="tel"column="TEL"type="string"/>

</component>

</class>

</hibernate-mapping>

3)     复合主键

如果要实现复合主键,首先类应该先满足以下要求:

1、本类必须实现Serializable接口

2、复写equalshashCode方法

·equals:对象比较方法

·hashCode:取得Hash编码

对于equalshashCode方法的复写,可以使用第三方工具:commons-lang- 1.0.1 .jar

方法一:Persion.java

import java.io.Serializable;

 

import org.apache.commons.lang.builder.EqualsBuilder;

import org.apache.commons.lang.builder.HashCodeBuilder;

 

public class Person implements Serializable {

       private String name;

 

       private String phone;

 

       private int age;

 

       public boolean equals(Object obj) {

              // TODO 自动生成方法存根

              if (this == obj) {

                     return true;

              }

              if (!(obj instanceof Person)) {

                     return false;

              }

              Person p = (Person) obj;

              return new EqualsBuilder().append(this.name, p.name).append(this.phone,

                            p.phone).append(this.age, p.age).isEquals();

       }

 

       public int hashCode() {

              // TODO 自动生成方法存根

              return new HashCodeBuilder().append(this.name).append(this.age).append(

                            this.phone).toHashCode();

       }

 

       Setter/getter….

 

}

Person.hbm.xml

<?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" >

 

<!-- DO NOT EDIT: This is a generated file that is synchronized -->

<!-- by MyEclipse Hibernate tool integration.                   -->

<!-- Created Sat Nov 11 21:30:08 CST 2006                         -->

<hibernate-mapping package=" POJO类所在的包路径">

 

    <class name="Person" table="PERSON">

        <composite-id>

            <key-property name="name" column="NAME" type="string"/>

            <key-property name="phone" column="PHONE" type="string"/>

        </composite-id>

        <property name="age" column="AGE" type="int" />

    </class>

   

</hibernate-mapping>

方法二:使用主键类

PersonKey.java

/*

 * WARNING: DO NOT EDIT THIS FILE. This is a generated file that is synchronized

 * by MyEclipse Hibernate tool integration.

 *

 * Created Sat Nov 11 21:36:22 CST 2006 by MyEclipse Hibernate Tool.

 */

 

import java.io.Serializable;

 

import org.apache.commons.lang.builder.EqualsBuilder;

import org.apache.commons.lang.builder.HashCodeBuilder;

 

/**

 * A class representing a composite primary key id for the PERSON

 * table.  This object should only be instantiated for use with instances

 * of the Person class.

 * WARNING: DO NOT EDIT THIS FILE. This is a generated file that is synchronized

 * by MyEclipse Hibernate tool integration.

 */

public class PersonKey

    implements Serializable

{

    /** The cached hash code value for this instance.  Settting to 0 triggers re-calculation. */

    private volatile int hashValue = 0;

 

    /** The value of the NAME component of this composite id. */

    private java.lang.String name;

 

    /** The value of the PHONE component of this composite id. */

    private java.lang.String phone;

 

    /**

     * Simple constructor of PersonKey instances.

     */

    public PersonKey()

    {

    }

 

    /**

     * Returns the value of the name property.

     * @return java.lang.String

     */

    public java.lang.String getName()

    {

        return name;

    }

 

    /**

     * Sets the value of the name property.

     * @param name

     */

    public void setName(java.lang.String name)

    {

        hashValue = 0;

        this.name = name;

    }

 

    /**

     * Returns the value of the phone property.

     * @return java.lang.String

     */

    public java.lang.String getPhone()

    {

        return phone;

    }

 

    /**

     * Sets the value of the phone property.

     * @param phone

     */

    public void setPhone(java.lang.String phone)

    {

        hashValue = 0;

        this.phone = phone;

    }

 

    /**

     * Implementation of the equals comparison on the basis of equality of the id components.

     * @param rhs

     * @return boolean

     */

    public boolean equals(Object obj)

    {

           if (this == obj) {

                     return true;

              }

              if (!(obj instanceof Person)) {

                     return false;

              }

              PersonKey p = (PersonKey) obj;

              return new EqualsBuilder().append(this.name, p.getName()).append(this.phone,

                            p.getPhone()).isEquals();

    }

 

    /**

     * Implementation of the hashCode method conforming to the Bloch pattern with

     * the exception of array properties (these are very unlikely primary key types).

     * @return int

     */

    public int hashCode()

    {

           return new HashCodeBuilder().append(this.name).append(

                            this.phone).toHashCode();

    }

}

Person.java

import java.io.Serializable;

 

import org.apache.commons.lang.builder.EqualsBuilder;

import org.apache.commons.lang.builder.HashCodeBuilder;

 

public class Person implements Serializable {

 

       private PersonKey id ;

       private int age;

       setter/getter…

 

}

Person.hbm.mxl

<?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" >

 

<!-- DO NOT EDIT: This is a generated file that is synchronized -->

<!-- by MyEclipse Hibernate tool integration.                   -->

<!-- Created Sat Nov 11 21:36:21 CST 2006                         -->

<hibernate-mapping package=" POJO类所在的包路径">

 

    <class name="Person" table="PERSON">

        <composite-id name="id" class="PersonKey">

            <key-property name="name" column="NAME" type="string"/>

            <key-property name="phone" column="PHONE" type="string"/>

        </composite-id>

 

        <property name="age" column="AGE" type="int" />

    </class>

   

</hibernate-mapping>

4)     实体层设计

方法一: 数据库结构CREATE TABLE TItem

(

       id varchar(32) not null primary key ,

       name varchar(20) not null ,

       manufacturer varchar(20)

) ;

 

CREATE TABLE TBook

(

       id varchar(32) not null primary key ,

       pagecount int

) ;

 

CREATE TABLE TDvd

(

       id varchar(32) not null primary key ,

       regioncode varchar(2)

) ;

TItem.java

public class TItem {

       private String id ;

       private String name ;

       private String manufacturer ;

       setter/getter…

}

TDVD.java

public class TDVD extends TItem {

       private String regionCode ;

setter/getter…

}

TBook.java

public class TBook extends TItem {

       private int pageCount ;

setter/getter…

 

}

Titem.hbm.xml

<?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" >

 

<!-- DO NOT EDIT: This is a generated file that is synchronized -->

<!-- by MyEclipse Hibernate tool integration.                   -->

<!-- Created Mon Dec 18 19:38:27 CST 2006                         -->

<hibernate-mapping package="POJO类所在的包路径">

 

       <class name="TItem" table="TITEM">

              <id name="id" column="ID" type="string">

                     <generator class="assigned" />

              </id>

 

              <property name="name" column="NAME" type="string" not-null="true" />

              <property name="manufacturer" column="MANUFACTURER" type="string" />

              <joined-subclass name="org.lxh.hibernate04.TBook" table="TBook">

                     <key column="ID"></key>

                     <property name="pageCount" type="java.lang.Integer" column="pagecount"></property>

              </joined-subclass>

              <joined-subclass name="org.lxh.hibernate04.TDVD" table="TDvd">

                     <key column="ID"></key>

                     <property name="regionCode" type="java.lang.String" column="regioncode"></property>

              </joined-subclass>

       </class>

</hibernate-mapping>

方法一: 数据库结构

CREATE TABLE TItem

(

       id varchar(32) not null primary key ,

       -- 通过此字段用于区分保存的是 Book还是 DVD

       category varchar(2) not null ,

       name varchar(20) not null ,

       manufacturer varchar(20) not null ,

       regionCode varchar(2) ,

       pageCount int

)

TItem.java

public class TItem {

       private String id ;

       private String name ;

       private String manufacturer ;

       setter/getter…

}

TDVD.java

public class TDVD extends TItem {

       private String regionCode ;

setter/getter…

 

}

TBook.java

public class TBook extends TItem {

       private int pageCount ;

setter/getter…

}

Titem.hbm.xml

<?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" >

 

<!-- DO NOT EDIT: This is a generated file that is synchronized -->

<!-- by MyEclipse Hibernate tool integration.                   -->

<!-- Created Mon Dec 18 20:01:47 CST 2006                         -->

<hibernate-mapping package="org.lxh.hibernate05">

 

       <class name="TItem" table="TITEM">

              <id name="id" column="ID" type="string">

                     <generator class="assigned" />

              </id>

              <discriminator column="category" type="java.lang.String"></discriminator>

 

              <property name="name" column="NAME" type="string" not-null="true" />

              <property name="manufacturer" column="MANUFACTURER" type="string" not-null="true" />

 

              <subclass name="org.lxh.hibernate05.TBook" discriminator-value="1">

                     <property name="pageCount" column="PAGECOUNT" type="int" />

              </subclass>

              <subclass name="org.lxh.hibernate05.TDVD" discriminator-value="2">

                     <property name="regionCode" column="REGIONCODE" type="string" />

              </subclass>

       </class>

 

</hibernate-mapping>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值