Hibernate框架
1. 什么是框架
(1) 框架可以理解成一个半成品项目,他封装了一些功能,我们需要掌握如何驾驭这些功能,不需要操心他是怎么实现的。其实他就是按照我们之前所学的内容实现的。
(2) 为什么要是用框架?框架可以提高开发效率
2. Hibernate框架
Hibernate是Dao层的框架,完成的功能crud
crud是指在做计算处理时的增加(Create)、读取查询(Retrieve)、更新(Update)和删除(Delete)几个单词的首字母简写。crud主要被用在描述软件系统中数据库或者持久层的基本操作功能。
Hibernate是一个ORM(Object RelationalMapping)框架.对象关系映射
Hibernate是一个面向对象的方式进行数据库的增删改查,甚至不用写sql语句。
Hibernate搭建
1. 导包
打开require文件夹 这里是我们所需要的架包
数据库驱动
2 建立实体 bean类
新建user类
(1) 所有的属性应该设置为private并且附加get和set方法
(2) 构造函数,没写可以 如果要写 至少写两个(必须包含一个空的构造函数)
(3) 字段名设置成包装类
例如:考试为0分和没有参加考试是有区别的。如果使用是基本类型则不发表示,但是使用包装类型则可以设置为NULL
(4) 实体类中必须有一个id(主键)
3 建立数据库对应的表(可以省略)
Hibernate可以帮助我们自动根据实体类生成数据表
4 建立映射关系
第一步建立一个配置文件命名和位置都没有强硬的规范一般情况下规定把这个文件放到对应的bean目录下,命名规范为实体类名+ .hbm+.xml
第二步导入约束文件。声明这个文件时hibernate配置文件,导入之后书写配置的时候会有提示信息
第三步配置信息
5. 配置hibernate核心配置文件
第一步创建核心配置文件 文件的命名和位置 都必须按照指定来,文件放在src目录下文件名 为hibernate.cfg.xml
第二步导入约束文件
第三步配置文件
6. 书写测试代码dao层代码
public static void main(String[] args) {
//读取配置信息
Configuration cfg=new Configuration().configure();
//获得sessionFactory对象
SessionFactory sf = cfg.buildSessionFactory();
//获得session
Session session = sf.openSession();
//开始事物
Transaction ts = session.beginTransaction();
User user = new User();
user.setName("***");
user.setPsd("******");
//保存的方法
session.save(user);
//提交的事物
ts.commit();
//关闭资源
session.close();
sf.close();
}
<!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>
<!--数据库的信息-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate01</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123</property>
<!--方言
sql语句的方言 我们在上面设置了数据库的信息mysql
mysql中的sql limit 在oracle 中没有的
所以要设置方言
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
<!--设置hibernate执行sql语句的时 ,自动显示在控制台上-->
<property name="hibernate.show_sql">true</property>
<!--设置显示的格式-->
<property name="hibernate.format_sql">true</property>
<!--设置数据库生成策略
create 每次执行hibernate 就会创建新的表 原来的数据丢失
create-drop 每次执行hibernate 就会删除所有表 原来的数据丢失
update 检查数据表有没有更新 有则自动更新 如果没有则不变
validate 校验 对数据表不进行任何操作 只会提示错误
-->
<property name="hibernate.hbm2ddl.auto">update</property>
<!--加载映射文件 -->
<mapping resource="cn/hd/bean/User.hbm.xml"></mapping>
</session-factory>
</hibernate-configuration>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!--
class中的name代表的是实体类名 table 代表的是数据库表名
-->
<class name="cn.hd.bean.User" table="user">
<!--
主键 对应的实体类中的id(主键)和数据表中的主键
name 代表的是 实体类中的名字,column是字段名(可以省略不写)
-->
<id name="uid" column="uid">
<!-- 主键生成策略 -->
<!--代理主键和自然主键
主键生成策略:
identity 是由数据库自己维护 自动上涨
increment 由数据库自己维护 查找id加一
hilo (了解)
native(我们用的 代表的上面三个选一个)
uuid (java api 的生成策略)
assigned (自然主键)
-->
<generator class="native"></generator>
</id>
<!--其他的属性
这里也可以设置数据库中字段的属性
type 生成表中的类型
length
not-null
-->
<property name="name" column="name"></property>
<property name="psd" column="psd"></property>
</class>
<class name="cn.hd.bean.Student" table="student">
<id name="sid" column="sid">
<generator class="native"></generator>
</id>
<property name="name" column="name"></property>
<property name="age" column="age"></property>
</class>
</hibernate-mapping>
Hibernate crud
Save update get delete
这四个方法不能单存理解为 添加 修改 查找 删除
实际上是修改hibernate 中的对象状态
在 hibernate 中 对象有三种状态
1. 瞬时状态 一个实体对象 没有id 也没有和session 绑定
2. 游离状态 有id 没有和session绑定
3. 持久状态 有id 也有和session 绑定
实际上 session 的四个方法 就是 在改变 实体对象在 hibernate中的对象状态
持久化对象的特点:任何对象的变化 都会自动同步到数据库中
Hibernate 提供了一个叫做 saveOrUpdate的发放这个方法 自动识别对象的状态 实际开发中 不去思考 对象 的实际状态 ,直接调用 该方法