您的位置:首页 > 其它

关于Hibernate的手动配置详细过程

2017-11-30 16:13 381 查看
1.下载所需要的jar包,将其放在WebRoot下面的WEB-INF下面的lib中,其中不要忘记放入MySQL数据库驱动.

2.配置hibernate.cfg.xml文件.

在src目录下,新建一个.xml文件,名称取名为***.cfg.xml,其中cfg不能改变,这是config的缩写形式.

这里名称暂时为hibernate.cfg.xml.

3.在hibernate.cfg.xml中填写:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-configuration 

PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 

"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<!-- 上面的东西叫做dtd约束,xml是使用标签的方式,保存元数据的文件,不是随便写的-->

<!-- 上面的这个约束,是官方的约束,约束的是只是符合xml的格式,而不管内容和自定义标签 -->

<!-- 如果没有网呢,就进不去了吗? 不。-->

<!--可以本地关联xml的dtd. window prefer 搜索xml xml中catalog-->

如何本地关联呢dtd呢?

Window--->Preference--->搜索xml,找到 XMLCatalog ,在右边的时候点击添加

选择Key type为URI网址的形式, key为刚才新建xml时的约束. 即http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd

其中Location为本地的dtd约束,即下载好的约束所存放的磁盘位置。 我的是 H:\开发常用工具\开发常用lib包\Hibernate\两个约束和映射\3.0.dtd;

点击确定即可.

3.配置时所用的应该用<hibernate-configuration> 标签, 然后后面跟着<session.factory> 标签,表示工厂

即: 先:

然后里面填写关于数据库的五个属性,

dialect表示方言,代表使用哪一个数据库,这里用Mysql数据库。 org.hibernate.dialect.MySQLDialect

connection.url代表连接路径: jdbc:mysql://localhost:3306/hibernate (需要在数据库中手动创建hibernate数据库,名称为hibernate. 这里的名称与数据库的名称相同)

connection.driver_class 驱动, com.mysql.jdbc.Driver

connection.username 表示用户名, root

connection.password 表示数据库密码,这里为abc123.

然后结束标签即可.

代码如下:

<hibernate-configuration>
<!-- 使用session会话的原理实现的 -->
<session-factory>
<!-- 保存数据库的相关信息和相关属性,有四巨头和方言,即用哪一个数据库的标识 -->
<!--这是一个方言 -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.url">jdbc:mysql://localhost:3306/hibernate</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.username">root</property>
<property name="connection.password">abc123</property>
</session-factory>

</hibernate-configuration>

4.需要创建一个持久化类(即实体类),如这里为Admin类,基本的JavaBean类,不要忘记了无参构造.

这个类需要放在一个包下,一般这个包名为pojo,以前是entity,表示一个实体。 用com.hibernate.pojo包下,新建一个类,Admin.java类.

有两个属性. adminId, name

package com.hibernate.pojo;

public class Admin {
private int adminid;
private String name;

public int getAdminid() {
return adminid;
}

public void setAdminid(int adminid) {
this.adminid = adminid;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Admin() {
super();
}

public Admin(int adminid, String name) {
super();
this.adminid = adminid;
this.name = name;
}

}

5.在pojo包下,即与Admin同级的目录下,创建这个持久化类的配置文件***.hbm.xml文件,这里最好与其类名保持一致,故为Admin.hbm.xml,

其中hbm应该是hibernate mapping的缩写形式,不能改变.



6.进入Admin.hbm.xml进行编写

为映射,故用<hibernate-mapping>标签进行包裹.

不要忘记写约束了.

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

也可以进行断网本地配置,与配置hibernate.cfg.xml相同。这里不简述了.

<hibernate-mapping>
<!-- 这个名字要写全限定名称,要写全 , table为生成后表的名称-->
<class name="com.hibernate.pojo.Admin" table="admin">
<id name="adminid" length="8" type="java.lang.Integer"> <!-- 修改长度 也有其它的东西 -->
<!-- 设置成id,自动增用 native -->
<generator class="native"></generator>
</id>
<!-- 这是持久化类的属性值 -->
<property name="name" type="java.lang.String">
<!-- 这是数据库中的列名 -->
<column name="name"></column>
</property>

</class>

</hibernate-mapping>

里面有一个class标签, 其中name为配置持久化类的名称,这里应该用全限名,即完整类名,类名应该用. 点号来连接, table为要生成表的名称

需要设置一个id,即为数据库的id,其中这个id要是int类型的,绝对不能是其它类型的.

其中 均采用key---value值进行映射.

 name="属性值", 可以写长度:length; 其中name="adminid",这是一个属性值. 

要设置自动增长,需要用 <generator class="native"> </generator>

在数据库中 <column name="adminid"> 表示数据库中的字段名, type 表示数据的类型,为java.lang.Integer和 java.lang.String

也可以添加多个字段

<!-- 这是持久化类的属性值 -->
<property name="name" type="java.lang.String">
<!-- 这是数据库中的列名 -->
<column name="name"></column>
</property>

7.在hibernate.cfg.xml配置中添加映射.

<!-- 向日志中输出sql语句 -->
<property name="show_sql">true</property>
<!-- 格式化输出sql语句 -->
<!-- <property name="format_sql">true</property> -->
<!--生成表所需要配置的属性,这一个必须写 -->
<property name="hbm2ddl.auto">update</property>
<!-- 写映射了,将hbm.xml写入进去,关联映射文件生成表--> 
<mapping resource="com/hibernate/pojo/Admin.hbm.xml" />

show_sql为在日志中显示sql语句,  format_sql为格式化显示sql语句,即换行显示.

需要添加name=hbm2ddl.auto 这一个必须要写

mapping中resource中写入映射的完整名称, resource="com/hibernate/pojo/Admin.hbm.xml"

此刻,完整的hibernate.cfg.xml为:

<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-mapping PUBLIC 
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<!-- 如何让表和对象创建关联 -->

<hibernate-mapping>
<!-- 一个类对应一个表的结构 -->
<!-- 这个名字要写全限定名称,要写全 , table为生成后表的名称-->
<class name="com.hibernate.pojo.Admin" table="admin">
<id name="adminid" length="8" type="java.lang.Integer"> <!-- 修改长度 也有其它的东西 -->
<!-- 设置成id,自动增用 native -->
<generator class="native"></generator>
</id>
<!-- 这是持久化类的属性值 -->
<property name="name" type="java.lang.String">
<!-- 这是数据库中的列名 -->
<column name="name"></column>
</property>

</class>

</hibernate-mapping>

此时,配置就全部完成了。下面进行一下检测,实现基本的插入功能

public class TestOne {
@Test
public void test1(){
//1. 读取hibernate中配置文件.cfg.xml了
Configuration cfg=new Configuration();
cfg.configure();
//2.hiberante4.x之后需要生成注册码才可以使用
ServiceRegistry sr=new ServiceRegistryBuilder()
.applySettings(cfg.getProperties()).buildServiceRegistry();
//3创建SessionFactory 生成工厂
SessionFactory sf=cfg.buildSessionFactory(sr);
//4通过工厂得到session会话 均是hibernate包下的
Session session=sf.openSession();
//5 Hibernate要求我们必须通过事务Transaction 向数据库发送sql语句 commit
//开启事务 Transaction transaction
//save和update和delete需要用事务,但查询不需要用事务
Transaction tran=session.beginTransaction();
//6使用save()方法生成insert语句,插入数据库中一条记录
//Admin admin=new Admin(1,"张三");
//Admin admin=new Admin(2,"yjl");
Admin admin=new Admin();
admin.setName("admin");
session.save(admin);
//需要事务提交 
tran.commit();
//需要进行关闭,先开始的后关闭原则
session.close();
sf.close();
}

}

注意:一定要注意包名之间的层次结构,

hibernate.cfg.xml在src目录下, Admin.hbm.xml与Admin在同一目录下,均在com.hibernate.pojo包下.

发现数据库可以正常的生成表了.

手动配置完成 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: