什么是框架
写程序,使用框架之后,帮我们实现一部分的功能,使用框架的好处,少写一部分的代码实现功能
什么是hibernatenate框架
- hibernate 框架应用在Javaee框架三层结构中的dao层框架
- 在dao层里面做对数据库的crud操作,使用hibernate实现crud操作,hibernate底层代码就是jdbc,hibernate对jdbc进行封装,使用hibernate好处,不需要写复杂的jdbc代码了,不需要写sql语句
- hibernate是开源的轻量级框架
- hibernate版本
- hibernate3.x
- hibernate4.x
- hibernate5.x
- lib 放置的是jar包
- document 放置的文档
- project 放置的是源代码
什么是orm的思想
- hibernate使用orm思想对数据库进行orm操作
- 在web阶段学习JavaBean,更正确的叫饭叫做实体类
- orm;object relational mapping 对象关系映射
文字描述:
- 让实体类 和 数据库表进行一一对应的关系
- 让实体类首先和数据库表对应
- 让实体类属性和表 里面的字段对应
- 不需要直接 操作数据库表,而操作表对应的实体类对象
ORM框架
- Hibernate
- 非常优秀成熟的ORM框架
- 采用面向对象的方式,完全对象的持久化操作
- 完全的ORM框架
- MyBatis
- 相比hibernate灵活度比较高,运行速度块
- 开发速度慢,不支持纯粹的面向对象的操作,需要熟悉sql语句及其优化
- 半自动的ORM框架
hibernate案例入门
- 第一步:导入hibernatejar包
- 因为使用hibernate的时候,有日志信息输出,hibernate本身没有日志输出的jar包,导入其他 的jar包,
- 还需要mysql 驱动jar包
)
- 第二步:创建实体类
- 使用hibernate的时候,不需要自己手动创建表,hibernate会自动将表格创建好
- 第三步:配置实体类和数据库表格的对应关系(==映射配置文件==)
- 创建xml格式的==映射配置文件==
- 配置文件名称和位置没有固定要求
- 但是一般将配置文件写在实体类所在的包下,配置文件的名称为:==配置文件名.hbm.xml==
- 给配置文件引入dit约束 ,这个约束可以通过网络寻找
- ==hibernate映射配置文件==实例:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<!-- 1. 配置实体类和表格的对应
name :写实体类 的全路径名字
table :写表格的名字
-->
<class name="com.td.domain.Student" table="t_student">
<!-- 2. 配置实体类的id和表的id对应
hibernate要求 必须有一个字段作为唯一值,实体类中必须有一个属性是唯一值
id标签,name属性写:实体类中唯一的属性名
column 属性写:生成的表字段名称
为了更加直观,一般情况下表格的字段和属性名是一样的
-->
<id name="sid" column="sid">
<!-- 3. 设置id自动增长策略
属性值native就是表示主键自动增长
-->
<generator class="native"></generator>
</id>
<!-- 4. 配置其他实体类的属性和表格的字段对应的关系
name属性:实体类的属性名
column属性:表格的字段名
建议设置为一样的,这样可以更加直观
-->
<property name="name" column="name"></property>
<property name="age" column="age"></property>
<property name="gender" column="gender"></property>
</class>
</hibernate-mapping>
- 创建xml格式的==映射配置文件==
第四步:创建hibernate的核心配置文件
- 核心配置文件的格式xml,但是核心配置文件的名称和 位置是固定的
- ==位置:必须是src下==
- ==名称:必须是hibernate.cfg.xml
)
引入dtd约束
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
hibernate在执行的过程中,只会加载核心配置文件,其他配置文件不会加载,为了让映射配置文件成功加载,需要将映射配置文件引入到核心配置文件中
- 配置数据库信息(必须有,否则连接不到数据库)
- 配置hibernate信息,根据需要选择性配置
- 将映射配置文件引入到核心配置文件中,必须引入
<?xml version="1.0" encoding="UTF-8"?> <!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.deriver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/mydb1</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123</property> <!-- 2. 配置hibernate信息,可选操作,不需要全部配置,使用什么配置什么 --> <!-- 输出底层sql语句 --> <property name="hibernate.show_sql">true</property> <!-- 输出底层sql语句格式 --> <property name="hibernate.format_sql">true</property> <!-- hibernate自动建表,如果有就更新,没有就新建 --> <property name="hibernate.hbm2ddl.auto">update</property> <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 3.将映射配置文件引入到核心配置文件中 路径是相对于src目录的 --> <mapping resource="com/td/domain/user.hbm.xml"/> </session-factory> </hibernate-configuration>
- 核心配置文件的格式xml,但是核心配置文件的名称和 位置是固定的
hibernate代码编写步骤
- 加载hibernate核心配置文件
- 创建SessionFactory对象
- 使用SessionFactory对象获取Session对象
- 开启事务
- 写具体逻辑的增删改查操作
- 提交事务
- 释放资源
- ==注意==,其他的步骤都是固定的,只有增删改查是自定义可变的
import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.Transaction; import org.hibernate.cfg.Configuration; import org.junit.Test; import com.td.domain.Student; public class Demo1 { @Test public void test() { // 加载核心配置文件,找到src目录下的hibernate.cfg.xml配置文件,加载配置文件 Configuration config = new Configuration(); config.configure(); // 创建SessionFactory对象,读取核心配置文件的内容,创建了对象SessionFactory // 根据核心配置文件引入的映射配置文件,在数据库中创建表格 SessionFactory factory = config.buildSessionFactory(); // 获取Session对象,这个对象的作用类似于连接 Session session = factory.openSession(); // 开启事务 Transaction transaction = session.beginTransaction(); // 具体的增删改查代码 Student stu = new Student(); stu.setName("小明"); stu.setAge("18"); stu.setGender("男"); // 调用session的方法,将数据添加进去 session.save(stu); // 提交事务 transaction.commit(); // 释放资源 session.close(); factory.close(); } }