首先,我们先要编写一个pojo,继续拿老生常谈的Person类(不了解pojo的可以看我上一篇帖子:关于ormapping)。
环境的配置:
导入jar包:
由于这里是Java Project,我们要手动添加jUnit
右键项目名称
选择弹出的properties窗口中的buildPath,出现如下对话框
添加jUnit完毕
写在前面:可能有些人看了之后会觉得奇怪,为什么先写类,然后用类来创建表呢?这是因为,刚刚学习hibernate,我们要多熟悉其配置文件,一般的设计,都是先设计数据库的,即根据表生成类和配置文件
public class Person implements Serializable {
private long pid;
private String pname;
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;
}
}
写完pojo之后,我们开始写映射文件,有关命名方式,也在上一篇帖子做出了介绍。
这里有一个小细节,在建完Person.hbm.xml之后,我们可以使用如下方式打开
点开之后,找到如下图所示。
点开之后,就会出现如下的界面
点击左下角的source,转到代码界面。
现在里面什么都没有,我们从API文档中,拷贝到了scheme约束信息,由于所有的*.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">
然后,我们就可以进行编码,这里只有一个根元素<hibernate-mapping>
然后里面有一个元素,叫class,可是我们把class打出来的时候,它报错了
把鼠标移动到class上,可以看到有一系列的元素
从里面的元素可以看到,只有(id|composite-id)
没有*/+/?,所以括号里面的2个元素,至少出1个。我们就用Id
写完之后是这样的
<?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>
<!--
name代表pojo的全名,这里有个小技巧,可以直接把类名打上去,然后看看提示,如果没有提示,关了再开就可以看到提示
table对应的表名
-->
<class name="cn.ansel.domain.Person" table="hiernate1">
<!--
id:代表主键属性
name:主键的名字
column:表中列的名字
length:数据库中字段的长度
type:name的类型,其中这里有两种类型,一种是Java类型,另外一种是hibernate类型,Java类型就是打出它的全名,hibernate类型的是小写的,比如String在hibernate类型中表示的是string,只不过hibernate里面是小写的
-->
<id name="pid" column="pid" length="100" type="java.lang.Long">
<!--
generator:主键的生成类型
-->
<generator class="increment"></generator>
</id>
<!--
property:代表其他属性
name、column、type、length与上雷同
-->
<property name="pname" column="pname" length="200" type="java.lang.String"></property>
</class>
</hibernate-mapping>
然后我们在src文件下创建hibernate.cfg.xml,然后用以下的方式打开
写完之后是这样的
<?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只能连接一个数据库
-->
<session-factory>
<!--
数据库的用户名
-->
<property name="connection.username">root</property>
<!--
密码
-->
<property name="connection.password">root</property>
<!--
url
这里的URL指的是数据库的地址,
hibernate是不会帮我们创建数据库的,数据库要我们自己创建!
-->
<property name="connection.url">
jdbc:mysql://localhost:3306/hibernate1
</property>
<!--
作用:根据持久化类和映射文件生成表
validate:只验证
create-drop:在开启hibernate的时候创建表,在关闭hibernate的时候删除表
create:每次打开hibernate的时候都创建表
update:每次打开hibernate的时候先validate如果有修改就update,若没有,就create
有了这个属性hbm2ddl.auto,可以让类生成表
-->
<property name="hbm2ddl.auto">update</property>
<!--
这个属性,可以在左下角的configuration界面上的右下角的框中,添加Person.hbm.xml文件
-->
<mapping resource="cn/ansel/domain/Person.hbm.xml" />
</session-factory>
</hibernate-configuration>
关于这里的2个配置文件,大家以后都可以复制直接使用,然后再根据自己的需求做修改即可,scheme是不会变的
然后我们自己创建一个测试类。
public class testCreateTable {
@Test
public void tCreateTable(){
//新建配置文件的对象
Configuration configuration=new Configuration();
//得到配置文件
configuration.configure();
//读取配置文件,在这个时候就把表创建出来了
configuration.buildSessionFactory();
}
}
这里有一个细节,看到上面代码的得到配置文件那一步,我们翻阅它的源代码可以看到:
public Configuration configure() throws HibernateException {
configure( "/hibernate.cfg.xml" );
return this;
}
这说明hibernate.cfg.xml必须要在src目录下,并且名字必须为hibernate.cfg.xml
开始测试,测试成功之后,看到数据库多了一张表