什么是框架?
写程序, 使用框架之后,帮我们实现一部分的功能,使用框架的好处,少写一部分的代码。
什么是Hibernate框架(重点)
什么是orm思想?
1、hibernate使用orm思想对数据库进行crud操作
2、在web阶段学习javabean 更正确的叫法叫做实体类
3、orm:Object Relational Mapping ,对象关系映射
文字描述:
1) 让实体类与数据库的一一对应
让实体类与数据库对应
让实体类属性与表的字段对应
2)、不需要直接操作数据库表,操作实体类就可以了
<dependencies>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.11version>
<scope>testscope>
dependency>
<dependency>
<groupId>org.hibernategroupId>
<artifactId>hibernate-coreartifactId>
<version>5.4.17.Finalversion>
dependency>
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.16version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-nopartifactId>
<version>1.6.4version>
dependency>
<dependency>
<groupId>javassistgroupId>
<artifactId>javassistartifactId>
<version>3.12.0.GAversion>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
<version>5.1.6version>
dependency>
dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.pluginsgroupId>
<artifactId>maven-compiler-pluginartifactId>
<version>3.5.1version>
<configuration>
<showDeprecation>trueshowDeprecation>
<showWarnings>trueshowWarnings>
<source>1.8source>
<target>1.8target>
<encoding>UTF-8encoding>
configuration>
plugin>
plugins>
build>
public class User {
/**
* 要求: hibernate要求实体类中有一个属性是唯一的*/
private Integer uid;
private String username;
private String password;
private String address;
// 自己生成 getter setter
}
使用hibernate的时候 不需要自己手动创建表,hibernate帮忙把表创建
使用配置文件实现映射关系
1、 创建xml格式的配置文件
- 映射的配置文件名称和位置没有固定的要求
- 建议:在实体类所在的包中创建 ==名称建议:实体类名称.hbm.xml==
2、配置是xml格式,在配置文件中首先引入xml约束
- 使用
约束
<hibernate-mapping>
hibernate-mapping>
3、配置hibernate映射关系
<hibernate-mapping>
<class name="com.jsu.entity.User" table="user">
<id name="uid" column="uid">
<generator class="native">generator>
id>
<property name="username" column="username">property>
<property name="password" column="password">property>
<property name="address" column="address">property>
class>
hibernate-mapping>
核心:指定生成数据库的表
1、核心配置文件格式xml,而且核心配置文件名称和位置都是固定的
位置:必须src下面/resource
名称:必须hibernate.cfg.xml
2、引入dtd约束
3、hibernate 操作过程中 只会加载核心配置文件,其他的配置文件不会加载
<hibernate-configuration>
<session-factory name="">
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driverproperty>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jsuproperty>
<property name="hibernate.connection.username">rootproperty>
<property name="hibernate.connection.password">000property>
<property name="hibernate.show_sql">trueproperty>
<property name="hibernate.format_sql">trueproperty>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL55Dialectproperty>
<property name="hibernate.hbm2ddl.auto">updateproperty>
<property name="hibernate.connection.autocommit">trueproperty>
<mapping resource="com/jsu/entity/User.hbm.xml"/>
session-factory>
hibernate-configuration>
效果显示:
public class HibernateTest {
@Test
public void testAdd() {
// 1、加载hibernate核心配置文件(固定)
// 到src下面找到的名称是hibernate.cfg.xml
// 在hibernate里面封装了对象
Configuration configuration = new Configuration();
configuration.configure();
// 2、创建SessionFactory对象(固定)
// 读取hibernate核心配置文件内容。创建sessionFactory
// 在过程中,根据映射关系,在配置数据库里面把表创建
SessionFactory sessionFactory = configuration.buildSessionFactory();
// 3、使用SessionFactory创建session对象(固定)
// 类似于连接
Session session = sessionFactory.openSession();
// 4、开启事务(固定)
Transaction transaction = session.beginTransaction();
// 5、写具体逻辑 crud操作(唯一变化)
User user = new User();
user.setUsername("小王");
user.setPassword("1234");
user.setAddress("上海");
// 调用session的方法实现添加
session.save(user);
// 6、提交事务(固定)
transaction.commit();
// 7、关闭资源(固定)
session.close();
sessionFactory.close();
}
}
# 1、加载hibernate核心配置文件(固定)
# 到src下面找到的名称是hibernate.cfg.xml
# 2、去指定位置查找配置文件
Configuration config = new Configuration ().configure("/config/hibernate.cfg.xml");
# 3、加载映射文件
Configuration configuration = new Configuration () .configure ("xml文件位置");
configuration.addResource("com/domain/User.hbm.xml")
使用Configuration对象 创建 SessionFactory 对象
1)、创建SessionFactory对象过程中做事情:
- 根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建
只有配置文件中有:<property name="hibernate.hbm2ddl.auto">update</property> 才会创建
创建SessionFactory的过程中,十分的消耗资源
1)、在hibernate操作中,建议一个项目一般创建一个sessionFactory对象
具体实现
1)、写工具类,在静态代码块实现
-静态代码块在类加载的时候,执行一次
1、类似于jdbc中的connection
2、调用session中不同的方法实现crud操作
- 添加save方法
- 修改update方法
- 删除delete方法
- 根据id查询 get方法
3、单线程对象
- session对象不能共用,只能自己使用
开启事务
Transaction transaction = session.beginTransaction();
事务管理的常用方法,具体如下:
- commit()方法:提交相关联的session实例。
- rollback(方法:撤销事务操作。
事务概念
1、事务四个特性
- 原子性(都成功或都失败)
- 一致性(操作之前之后,数据一致)
- 隔离性(同时操作同一条记录,不产生影响)
- 持久性(对数据所作的所有改动都必须在事务成功结束前保存)
开启事务
Transaction transaction = session.beginTransaction();
事务管理的常用方法,具体如下:
- commit()方法:提交相关联的session实例。
- rollback(方法:撤销事务操作。
事务概念
1、事务四个特性
- 原子性(都成功或都失败)
- 一致性(操作之前之后,数据一致)
- 隔离性(同时操作同一条记录,不产生影响)
- 持久性(对数据所作的所有改动都必须在事务成功结束前保存)
Hibernate01 - 入门概念 搭建环境 api
Hibernate02 - 缓存 一对多 多对多:
Hibernate03 -查询方式 OID hql QBC