Hibernate原理和第一个Hibernate实例

Hibernate原理和基本操作总结

一 基础介绍

1.引入

(1)引入的原因:模型不匹配(阻抗不匹配)

Java面向对象语言,对象模型,主要概念有:继承、关联、多态等;数据库的关系模型,主要概念有:表、主键、外键

(2)解决的办法

使用JDBC手工转换:关系模型转换成了对象模型、对象模式转换为关系模型

使用对象关系映射框架ORM(Object Relation Mapping对象关系映射)来解决,主流的ORM框架有Hibernate TopLink OJB

2.安装配置

(1)下载地址:http://www.hibernate.org

(2)将下载目录/hibernate3.jar和/lib下的hibernate运行时必须的包加入classpath中:

antlr.jar,cglib.jar,asm.jar,commons-collections.jar,commons-logging.jar,jta.jar,dom4j.jar

(3)配置文件hibernate.cfg.xml

包括:驱动、url 、用户名、密码、方言

实例:

<hibernate-configuration>

<session-factory>

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

<property name="hibernate.connection.url">jdbc:mysql:///demo</property>

<property name="hibernate.connection.username">root</property>

<property name="hibernate.connection.password">qiao</property>

<!-- 方言 针对哪个数据库Mysql-->

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

</session-factory>

</hibernate-configuration>

(4)映射文件

把实体类中的属性映射成二维表存储

<hibernate-mapping package="com.hbsi.domain">

<class name="java中是实体类的类名2" table="表名">

<!-- 将java类中的属性映射成表的字段 -->

<id name="id">

<generator class="native"/>

</id>

<property name="java类中普通属性的名字"/>

</class>

</hibernate-mapping>

二 基本操作总结

1.创建一个实体类User

2.将hibernate所需的jar包构建到项目中

MySQL驱动

hibernate3.jar

lib/required/所有jar文件

lib/jpa/jar文件

3.配置文件

(1)配置文件的使用

默认的名字是hibernate.cfg.xml

也可以使用Hibernate.properties

如果两种都配,前者优先

(2)配置文件的信息

驱动、url、用户名、密码、方言(用的是什么数据库)、自动的创建表、显示在hibernate工作的过程中产生的sql语句显示出来、指定映射文件的为

例子:

<hibernate-configuration>

<session-factory>

<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>

<property name="hibernate.connection.url">jdbc:mysql:///demo</property>

<property name="hibernate.connection.username">root</property>

<property name="hibernate.connection.password">qiao</property>

<!-- 方言 针对哪个数据库Mysql-->

<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

<!-- 在程序运动的时候,增加自动创建表的属性,在程序终止 的时候销毁,但是在表格再次使用时,会重新建 -->

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

<!-- 执行的sql语句显示出来 -->

<property name="hibernate.show_sql">true</property>

<!-- 指定映射文件的位置 -->

<mapping resource="com/hbsi/domain/User.hbm.xml"/>

</session-factory>

</hibernate-configuration>

4.映射文件 --- 将实体类和二维的关系表关联起来

命名的规范:User ---- User.hbm.xml

例子:

<hibernate-mapping package="com.hbsi.domain"> ---- 指定java实体类的包名

<class name="User" table="user"> --- 说明实体类怎么映射成二维表

<id name="id" column=”id”>

<!-- 解决主键的生成器,classs中 native是主键的生成器 自动递增-->

<generator class="native"/>

</id>

<property name="name" />

<property name="birthday" />

</class>

</hibernate-mapping>

5.编写代码

public static void main(String[] args) {

// 使用Hibernate完成将对象存入到表中

//配置对象

Configuration cfg = new Configuration();

cfg.configure();//用来完成Hibernate的初始化---用来读取配置文件中的信息,可以指定配置文件的位置 cfg.configure("");

//得到sessionFactoroy的工厂对象,相当于DirverManager,

SessionFactory sf = cfg.buildSessionFactory();

//通过sessionFactory得到session,与会话中的session没有关系

Session s =sf.openSession();

//开启事务

Transaction tx = s.beginTransaction();

//得到User对象

User user = new User();

user.setName("Tom");

user.setBirthday(new Date());

s.save(user);

tx.commit();//提交事务

s.close();

System.out.println("end");

}

6.遇到的问题

(1)驱动找不到

(2)没有找到配置文件 unknown entity 不认识User实体类,原因没有在配置文件中指明配置文件的位置,应该增加一条语句:

<!-- 指定映射文件的位置 -->

<mapping resource="com/hbsi/domain/User.hbm.xml"/>

(3)Table demo.user doesnot exist

在配置文件中增加:

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

它的取值有:

(1)<property name="hibernate.hbm2ddl.auto"> create-drop </property>

create-drop:表示在hebarinate初始化时创建表格,程序运行结束的时候会删除相应的表格,在实际项目中不用

(2)<property name="hibernate.hbm2ddl.auto">create</property>

在hibernate初始化时会创建表格,在运行结束之后不删除表格,而是在下一次运行的时候如果有旧的删掉,没有旧的,重新建表格

(3)<property name="hibernate.hbm2ddl.auto">update</property>

只是根据映射文件去和数据库中的表对应起来,如果不一致,就更新表的结构

(4)<property name="hibernate.hbm2ddl.auto">validate</property>

校验映射文件和数据库中的表是不是能对应起来,不能对应报错,实际中常用

(4)表建好了,但是表格中没有记录,可以想到是事务的回滚所致

<!-- 执行的sql语句显示出来 -->

<property name="hibernate.show_sql">true</property>

开启事务

Transaction tx = s.beginTransaction();

提交事物

tx.commit();//提交事物

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值