Hibernate学习笔记(3)

 

了解Hibernate的映射文件

映射文件的格式

<hibernate-mapping>

<class/>

<class/>

<class/>

..............

.............

.............

<class/>

</hibernate-mapping>

可以在hibernate-mapping元素里指定package元素,用来指定持久化类的所在的报名

<hibernate-mapping pcakage="pojo">

.....

......

</hibernate-mapping>

制定包是pojo

Class元素

每一个class元素对应一个持久化类 

<class name="用来指定该持久化类映射的持久化类的类名"

 table="指定在数据库中对应的表(可有可无)"/>

注意:如果在hibernate-mapping元素中没有使用package元素,那么在name中就要使   用该持久化类的全名。如:pojo.Person.java <classs name="pojo.Person">

<class name="pojo.person">

......

......

......  

</class> 

Class元素内还包括一些其它的元素,简短的说一下常用的

比如Person类

public class Person{

public int id;//标识

Public String name;

Public Person(){}

Public void setId(int id){

This.id = id;

}

Public void setName(String name){

This.name= name;

}

Public int getId(){

Return id;

}

Public String getName(){

Return name;

}

}

Person对应的映射文件内容如下

<hibernate-mapping package="pojo">

<class name="Person" >

<id name="id"><!--person类的标识符对应其数据库中表的标识列-->

<generator class="increment" / ><!--id自加   主键生成器 下面详细说一下-->

</id>

<property name="name"/><!--属性名字-->

</class>

</hibernate-mapping>

简单的主键生成器

Increment:对short、long和int的数据列生成子增长zhujian

Identity:对如SQL sever、MySql等支持自动增长列的数据库,如果数据列的类型是long、  short或int,可使用该主键生成自动增长的主键

Sequence:对如oracle、db2等支持sequence的数据库,如果数据列的类型是long、  short或int,可使用该主键生成器生成自动增长主键。

Uuid:对字符串列的数据采用128-为uuid算法生成唯一的字符串主键

怎样映射集合属性

List集合映射

如:Person类

public class Person{

public int id;//标识

Public String name;

Public List addresslist = new ArraryList();

Public Person(){}

Public void setId(int id){

This.id = id;

}

Public void setAddress(List addresslist){

This.addresslist = addresslist;

}

Public void setName(String name){

This.name= name;

}

Public int getId(){

Return id;

}

Public String getName(){

Return name;

}

Public List getAddress(){

Return this.addresslist;

}

}

配置文件的内容如下

<? 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 = "pojo.Person"  table = "sss_person" >

    < id  name = "id" >

      < generator  class = "increment" />

    </ id >

    < property  name = "name"  />

    < list  name = "addresslist"  table = "Text_Address" (list对应的表) >

      < key  column = "personid"  not-null = "true" />

      < list-index  column = "addressid" />

      < element  type = "string"  column = "addressname" />

    </ list >

  </ class >

</ hibernate-mapping >

Text_Address 的结构

Personid是person的id--外键

Addressid Text_Address 的主键

Addressname Text_Address 的普通列

解释一下

把person类中的属性addresslist保存在 Text_Address 表中

Addressid是表 Text_Address 中的主键

Personid是表示他们是归哪个Person

存的内容是addressname

测试

注意:如果你的数据库中没有建好和他们相关的表的话,你就应该在hibernate.cfg.xml中配 置该属性自动创建其相关的表<property name=" hbm2ddl.auto ">create</property>就 可以了。

详细配置如下

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

<!-- Generated by MyEclipse Hibernate Tools.                   -->

< hibernate-configuration >

     < session-factory >

         < property  name = "connection.username" >

Scott

</ property >

         < property  name = "connection.url" >

jdbc:oracle:thin:@127.0.0.1:1521:liang

</ property >

         < property  name = "dialect" >

org.hibernate.dialect.Oracle9Dialect

</ property >

         < property  name = "myeclipse.connection.profile" >

Orale

</ property >

         < property  name = "connection.password" >

Tiger

</ property >

         < property  name = "connection.driver_class" >

oracle.jdbc.driver.OracleDriver

</ property >

       < property  name = "connection.pool_size" > 30 </ property >

       < property  name = "hibernate.c3p0.max_size" > 30 </ property >

       < property  name = "hibernate.c3p0.min_size" > 1 </ property >

       < property  name = "hibernate.c3p0.timeout" > 1000 </ property >

       < property  name = "hibernate.c3p0.max_statements" >

100

</ property >

       < property  name = "hbm2ddl.auto" > create </ property >

       < mapping  resource = "pojo/Person.hbm.xml" />

       <!--你要操作的类的配置文件-->

      

     </ session-factory >

    

</ hibernate-configuration >

测试类

package  pojo;

import  java.util.ArrayList;

import  java.util.List;

import  org.hibernate.HibernateException;

import  org.hibernate.Session;

import  org.hibernate.SessionFactory;

import  org.hibernate.Transaction;

import  org.hibernate.cfg.Configuration;

public   class  Tool {

  public   static   void   main (String[] args){

    Person p =  new  Person();

    p.setName( "liang" );

    List list =  new  ArrayList();

    list.add( "beijing" );

    list.add( "shanghai" );

    list.add( "tianjin" );

    p.setAddresslist(list);

//***********************************

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

    SessionFactory factory = config.buildSessionFactory();

    Session session =  null ;

    Transaction tran =  null ;

    try  {

      session = factory.openSession();

      tran = session.beginTransaction();

//**********固定模式*****************************************

      session.save(p); //要进行什么操作

//***********************************************************

      tran.commit();

      System. out .println( "成功!!!" );

    catch  (HibernateException e) {

      if (session !=  null  && tran !=  null ){

        tran.rollback();

      }

      e.printStackTrace();

    } finally {

      if (session !=  null  && tran !=  null ){

        session.close();

        session =  null ;

      }

    }

//***********************固定的上面内容*******************

  }

}

结果是:成功!!!

Hibernate帮助我们创建了两个表并把它们的信息存入了表里

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值