hibrnate

来源:互联网 发布:影响现货白银的数据 编辑:程序博客网 时间:2024/05/19 15:19

一、java是面向对象模型关系、数据库中是关系模型

       两者是不匹配的,将两者进行转换:

1-1、以前在jdbc中手动完成:

1、 在jdbc中手动完成关系模型转换成对象模型

Rs读取出来的结果集存到对象时

2、 在jdbc中手动完成对象模型转换成关系模型

为占位符赋值时

       由于以上方法比较繁琐。所以引进了以下框架,进行二者进行转换

1-2、使用orm框架(对象关系映射技术),主流的orm框架有:

              Hibrnate、toblink、ojb

二、Hibernate

       配置文件:驱动、url、用户名、密码、方言

              <hibernate-configuration>

           <session-factory>

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

           </session-factory>

</hibernate-configuration>

             

       映射文件:java对象映射成数据库二维关系表

              <classname=”java中的实体名称” table=“表名”>

<!-java中属性映射成表中的字段,id特殊要单独拿出来用id进行映射,其他的属性为普通的用property来进行映射->

           <id name="java中作为主键的那个属性的名字" column="表中列名">

              <!-当name的值和column的值一样时,后者可省略->

<!-generator是指定主键生成器的, native是一个主键生成器->

               <generator class="native"/>

           </id>

           <property name="name"/>

           <property name="birthday"/>

</class>

       三、

       1、创建一个实体类User

       2、将hibrnate所需要的jar包构建到项目中

              Mysql驱动、hibrnate3.jar、lib/required文件夹下所有的jar、lib/jpa文件夹下的的jar

3、 配置文件

Hibrnate.cfg.xml或者是hibrnate.properties

配制的基本信息:驱动、url、应户名、密码、方言、自动生成表格、将hibrnate在工作的过程中产生的sql语句进行输出、映射文件的位置

<hibernate-configuration>

    <session-factory>

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

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

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

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

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

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

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

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

    </session-factory>

</hibernate-configuration>

4、 映射文件

              <hibernate-mapping

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

 

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

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

                  <generator class="native"/>

              </id>

              <property name="name"/>

              <property name="brithday"/>

           </class>

</hibernate-mapping>

四、出现的问题

1、sql驱动找不到

2、unkonw entity :不认识user实体类。原因是在配置文件没有指明映射文件

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

3、Table doesn’t exist:

在数据库中建一个表

Create tableuser(

       Id int auto_increment;

Name varchar(20);

Birthday date;

或者在配置文件中设置

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

取值:

(1)Create-drop:在hibrnate初始化时创建表,程序运行结束时表会被删除

(2)create:在hibrnate初始化时创建表,将原来的表格删除,程序运行结束时表不会被删除

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

(4)validate:校验映射文件和数据库中的表是不是对应起来,如果不能够对应起来,不更新表

4、表建好,表格中没有记录

       在配置文件中增加:显示sql语句、看看是否执行了

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

       事务

       Transactiontx=S.beginTransaction();

       …….

       Tx.commit();