ORM,object relation mapping 对象关系映射,底层是对JDBC的封装,来对数据库进行crud操作。
1.hibernate映射配置文件
xxx.hbm.xml
<引入dtd约束>
<!--配置映射的实体类-->
<class name="实体类全路径" table="数据库表名">
<!--配置实体类的id类型字段,一般在数据库中作为主键的属性,native代表自增>
<id name="实体类中id属性全名" column="数据库对应的字段名,一般和name一样即可">
<generator class="native"></generator>
</id>
<!--配置实体类其他属性-->
<property name="实体类中属性名字" column="数据库中的字段名,一般和name一致即可"/>
<class>
2.hibernate核心配置文件
放置于src下面,名字是hibernate.cfg.xml
<session-factory>
<!--配置数据库信息,四大参数-->
<property name="数据库驱动">com.mysql.jdbc.Driver</property>
<property name="...url">jdbc:mysql://localhost:3306/数据库名</property>
<property name="username">用户名</property>
<property name="passwrord">密码</property>
<!--配置hibernate信息-->
<!--输出底层的sql语句-->
<property name="hibernate.show_sql">true</property>
<!--格式化输出的sql语句-->
<property name="hibernate.format_sql">true</property>
<!--自动构建数据库表-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--配置数据库方言-->
<property name="hibernate.dialect>...</property>
<!--配置实体类映射文件-->
<mapping resources="实体类映射文件的全路径,把.改为/"/>
3.实现添加操作
第一步 加载核心配置文件
Configuration cfg = new Configuration();
cfg.configure();
第二部 创建SessionFactory对象
SessionFactory sessionFactory = cfg.buildSessionFactory();
第三部 通过SessionFactory对象创建Session
Session session = sessionFactory.openSession();
第四部 开启事务
Transaction tx = session.beginTransaction();
第五步 编写具体逻辑crud操作
User user = new User();
user.setSid(101);
user.setSname("霸天虎");
session.save(user);
第六步 提交事务
第七部 关闭资源
session.close();//后打开的先关闭
sessionFactory.close();//先打开的后关闭
4.hibernate的核心api
Configuration
1.读取src下的hibernate.cfg.xml配置文件
2.读取实体类映射文件xxx.hbm.xml映射文件
3.配置访问数据库的参数,驱动、url、username、password
4.管理hibernate的配置信息
SessionFactory
1.使用Configuration的buildSessionFactory方法构建SessionFactory,在构建SessionFactory的时候会根据映射生成表;
2.创建SessionFactory的过程特别消耗资源
因此我们通常一个项目只创建一个SessionFactory,通过编写工具类,在工具类中的静态代码块构建SessionFactory,保证只有在类加载时会执行静态代码块创建SessionFactory的实例,然后对外提供静态的get方法,用来获取SessionFactory。
Session
1.调用session中的方法对数据库进行crud操作
添加 save()
删除 delete()
修改 update()
根据id查询 get()
2.session对象是单线程对象,不能供用,只能够自己使用。
Transaction
事务涉及到的两个操作,commit()提交和rollback()回滚
涉及到的四个特性
原子性:多个操作绑定在一起,要么全部成功,要么全部失败;
一致性:比如转账,事务成功或者失败前后,转账人资金和被转账人资金的总和是一致的;
隔离性:事务之间是相互隔离的,一个事务的操作和数据不能和其他事物交互。
持久性:事务提交完成之后,数据库中的数据改变必须是持久的。
5.主键生成策略
<id name="实体类id属性名" column="数据库表中id字段名">
<generator class="这个值有很多种"></generator>
1.native