了解Hibernate的映射文件
l 映射文件的格式
<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算法生成唯一的字符串主键
怎样映射集合属性
l 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帮助我们创建了两个表并把它们的信息存入了表里