Hibernate框架学习第一天

青春壹個敷衍的年華 提交于 2019-11-27 03:33:22

学习内容来自于视频资源:https://space.bilibili.com/80018130

1. 什么是Hibernate框架

(1)hibernate框架是应用在web三层结构中 dao层的矿架;
(2)hibernate框架可以实现对数据库的crud操作,hibernate框架的底层代码就是jdbc;
(3)hibernate框架是一个开源的轻量级的框架;
(4)hibernate框架是基于orm思想开发的;

2. 什么是orm思想

(1)orm单词对应:object relational mapping,对象关系映射;
(2)文字描述:让实体类中的属性和数据库表中的字段进行一一对应;

3. 配置实体类和数据表的映射关系

(1)使用xml配置文件实现映射关系;

  • 第一步:创建xml格式的配置文件;
    • 映射配置文件名和位置关系没有特殊要求(在Maven中,该文件需要放到src/main/resources路径下);
    • 建议:在实体类所在包里面创建,实体类名称.hbm.xml;
  • 第二步:引入xml中关于hibernate的约束;
<!DOCTYPE hibernate-mapping PUBLIC         "-//Hibernate/Hibernate Mapping DTD 3.0//EN"         "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> 
  • 第三步:配置映射关系;
    先上代码,在做解释(代码为User.hbm.xml文件中的代码):
<hibernate-mapping>     <class name="com.hibernate_study.modul.User" table="t_user">         <id name="id" column="id">             <generator class="native"></generator>         </id>         <property name="username" column="username"></property>         <property name="password" column="password"></property>     </class> </hibernate-mapping> 

上述代码中的class标签中的name的值为实体类的全路径,table对应着数据库中的表单名;
上述代码中很多标签中都有name和column属性,其中name为实体类的属性名、column为数据库表单中的字段名;
其中id标签需要注意一下,id标签对应着实体类和表单中的id,该属性(字段)有一个特点就是唯一性。并且在上述代码的id标签中包含了一个generator标签,其中class属性值为native,该属性代表着表单中的主键和自增长模式;

  • 第四步:创建hibernate的核心配置文件,该文件的位置固定(必须在src文件下),名称固定(hibernate.cfg.xml);
    • 约束:
<!DOCTYPE hibernate-configuration PUBLIC         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> 
    • 配置文件中的代码:
<hibernate-configuration>     <session-factory>      <!--        1.配置数据库信息-->         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>         <property name="hibernate.connection.url">jdbc:mysql://localhost/test</property>         <property name="hibernate.connection.username">root</property>         <property name="hibernate.connection.password">Woaizhangjing123</property>          <!--        2.配置hibernate信息-->         <!--输出底层的sql语句-->         <property name="hibernate.show_sql">true</property>         <!--对语句进行格式化-->         <property name="hibernate.format_sql">true</property>         <!--配置该项后可以自动创建表,update代表有表则更新,没表则创建-->         <property name="hibernate.hbm2ddl.auto">update</property>         <!--配置方言,让hibernate框架识别不同数据库sql中的方言-->         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>          <!--        3.把映射文件配置到核心配置文件中来-->         <mapping resource="User.hbm.xml"/>     </session-factory> </hibernate-configuration> 

4. 测试,实现添加操作

(1)加载核心配置文件;

(2)创建sessionFactory对象

(3)使用SessionFactory创建session对象

(4)开启事务

(5)写具体逻辑crud操作

(6)提交事务

(7)关闭资源

代码如下:

import com.hibernate_study.modul.User; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test;  public class HibernateTest {      @Test     public void testAdd(){         //1.加载hibernate核心配置文件         Configuration cfg = new Configuration();         cfg.configure();         //2.创建SessionFactory对象             //读取hibernate核心配置文件内容,创建sessionFactory,             //在读取过程中,根据映射关系,在配置的数据库里边把表创建         SessionFactory sessionFactory = cfg.buildSessionFactory();         //3.使用SessionFactory创建session对象         Session session = sessionFactory.openSession();         //4.开启事务         Transaction tx = session.beginTransaction();         //5.写具体逻辑crud操作         User user = new User("小王","123123");         session.save(user);         //6.提交事务         tx.commit();         //7.关闭资源         session.close();         sessionFactory.close();      } } 

5. Hibernate配置文件详解

(1)普通工程构建时映射配置文件的名称和位置没有固定要求,但是Maven构建项目时映射配置文件需要放到src/main/resources路径下;
(2)映射配置文件中name属性中放的都是实体类中的属性名,column写的都是数据库表单相关的属性,column可以省略,默认和name的值一样;
(3)property标签中还有一个type属性,该属性用来设置生成表单的类型,但是一般不用,会自动对应类型;
(4)核心配置文件的名称和位置是固定的;但是Maven中的路径还是在src/main/resources路径下;

6. 核心API讲解

(1)Configuration:

  1. 到src路径下找到名称为hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件);

(2)SessionFactory:

  1. 使用cinfiguration对象创建sessionFactroy对象,并在创建该对象时,会根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建;
  2. 创建该对象时非常耗费资源,因此一个项目中之创建一个这个对象,可以利用静态代码块来处理;

(3)Session:

  1. session类似于jdbc中的connection的连接,可以调用session中的方法来进行crud操作;
  2. session对象是单线程对象,session不能共用;

(4)Transaction:

  1. 事务的对象中有commit()提交和rollback()回滚操作;
  2. 事务的概念:原子性、一致性、隔离性、持久性;


    本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!