学习内容来自于视频资源: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:
- 到src路径下找到名称为hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里面(加载核心配置文件);
(2)SessionFactory:
- 使用cinfiguration对象创建sessionFactroy对象,并在创建该对象时,会根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建;
- 创建该对象时非常耗费资源,因此一个项目中之创建一个这个对象,可以利用静态代码块来处理;
(3)Session:
- session类似于jdbc中的connection的连接,可以调用session中的方法来进行crud操作;
- session对象是单线程对象,session不能共用;
(4)Transaction:
- 事务的对象中有commit()提交和rollback()回滚操作;
- 事务的概念:原子性、一致性、隔离性、持久性;
本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。
来源:https://blog.csdn.net/kf_lirui/article/details/99306079