Hibernate学习
什么是orm思想
-
hibernate使用orm思想对数据库进行crud操作
-
在web阶段学习javabean,更正确的叫法是: 实体类
-
orm(Object Relational Mapping),对象关系映射
文字描述:
-
让实体类和数据库表进行一一对应关系
让实体类首先和数据库表对应
让实体类属性和表里面字段对应
-
不需要直接操作数据库表,而操作表对应实体类对象
画图描述:


Hibernate入门
搭建hibernate环境
-
导入jar包
因为使用hibernate时候,有日志信息输出,hibernate本身没有日志信息输出的jar包,导入其日志的jar包。
-
创建实体类
-
使用hibernate时候,不需要自己手动创建表,hibernate会自动创建表。
-
-
配置实体类和数据库表一一对应关系(关系对象映射)
-
配置文件实现
-
创建xml格式的配置文件
映射配置文件名称和位置没有固定要求,建议在实体类所在包里面创建,实体类名.hbm.xml
<hibernate-mapping>
<!-- 1.配置类和表对应
class标签
name属性:实体类的全路径
table属性:数据库表名称
-->
<class name="cn.itcast.entity.user" table="t_user">
<!--2.配置实体类id和表id对应
hibernate要求实体类有一个属性唯一值
hibernate要求有字段为唯一直-->
<!--id标签
name属性:实体类里面id属性名称
column属性:生成的表字段的名称
-->
<id name="uid" column="uid">
<!--设置数据库表id增长策略
native:生成表id值就是主键 自动增长
-->
<generator class="native"></generator>
</id>
<!--配置其他属性和表字段对应
name属性:实体类里面id属性名称
column属性:生成的表字段的名称
-->
<property name="username" column="username"></property>
<property name="password" column="password"></property>
<property name="address" column="address"></property>
</class>
</hibernate-mapping>
-
-
-
创建hibernate核心配置文件
-
核心配置文件格式xml,但是核心配置文件名称和位置固定的
位置:必须src下面。
名称:必须hibernate.cfg.xml
-
引入dtd约束
-
hibernate在操作过程中,只会加载核心配置文件,其他文件不会加载
第一部分:配置数据库信息
第二部分:配置hibernate信息
第三部分:把映射文件放到核心配置文件中
<hibernate-configuration>
<session-factory>
<!--第一部分:配置数据库信息-->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.password">123456</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/nxu_se</property>
<property name="hibernate.connection.username">root</property>
<!--第二部分:配置hibernate信息 可选的 -->
<!--输出底层SQL语句-->
<property name="hibernate.show_sql">true</property>
<!--输出底层SQL语句格式化-->
<property name="hibernate.format_sql">true</property>
<!--hibernate帮创建表,需要配置之后
update:如果已经有表,更新,如果没有,创建-->
<property name="hibernate.hbddl.auto">update</property>
<!--配置数据库方言
在mysql里面实现分页关键字limit,只能使用MySQL里面
在oracle数据库,实现分页row
让hibernate矿建识别不同数据库的自己特有语句
-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<!--第三部分:把映射文件放到核心配置文件中 是必须要做的-->
<mapping resource="cn/itcast/entity/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
实现添加操作
-
加载hibernate核心配置文件
-
创建SessionFactory对象
-
使用SessionFactory创建session对象
-
开启事务
-
写具体逻辑crud操作
-
提交事务
-
关闭资源
//1. 加载hibernate核心配置文件
//到src下面找到名称是hibernate.cfg.xml
//在hibernate里面封装对象
Configurtion 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();
user.setUsername("小王");
user.setPassword("250");
user.setAddress("日本");
session.save(user);
//6. 提交事务
tx.commit();
//7. 关闭资源
session.close();
sessionFactory.close();查看效果:
-
是否生成表
-
看表是否有记录
Hibernate配置文件详解
Hibernate映射配置文件
-
映射配置文件名称和位置没有固定要求
-
映射配置文件中,标签name属性值写实体类相关内容
-
class标签name属性值是实体类全路径(包名+类名用点)
-
id标签和property标签,name属性值:实体类属性名称
-
-
id标签和property标签,column属性可以省略
-
不写值和name属性值是一样的
-
-
property标签type属性:设置生成表字段的类型,不写的话会自动对应类型。
Hibernate核心配置文件
-
配置书写位置要求
<hibernate-configuration> <session-factory>
要在session-factory里面书写
</session-factory> </hibernate-configuration>
-
配置三部分要求
-
数据库部分是必须的
-
Hibernate设置部分是可选的
-
映射文件是必须的
-
-
核心配置文件名称和位置是固定的
-
位置:src下面
-
名称:hibernate.cfg.xml
-
Hibernate中的核心API
Configuration
//代码
Configurtion cfg=new Configuration();
cfg.configure();
//(1)到src下面找到名称hibernate.cfg.xml配置文件,创建对象,把配置文件放到对象里(加载核心配置文件)SessionFactory(重点)
//代码
SessionFactory sessionFactory = cfg.buildSessionFactory();
//1.使用configuration对象创建sessionFactory对象
//(1)创建sessionFactory过程中做事情
//根据核心配置文件中,有数据库配置,有映射文件部分,到数据库里面根据映射关系把表创建<property name="hibernate.hbm2ddl.auto">update</property>//2.创建sessionFactory过程中,这个过程是特别耗资源的因为每次都会执行一次
//(1)在hibernate操作中,建议一个项目创建一个sessionFactory对象(工具类)
//3.具体实现
//(1)写工具类、写静态代码块实现(静态代码块只执行一次)
//静态代码块在类加载时候执行,执行一次
static Configuration cfg = null;
static SessionFactory sessionFactory=null
//静态代码块
static{
Congiguration cfg= new Configuration();
cfg.configure();
sessionFactory = cfg.buildSessionFactory();
}
public static SessionFactory getSessionFactory(){
return sessionFactory;
}Session(重点)
-
session类似于jdbc中的connection
-
调用session里面不同的方法实现crud操作
-
添加save方法
-
修改update
-
删除delete方法
-
根据id查询get方法
-
-
session对象是单线程对象
-
session对象不能共用,只能自己使用
-
Transaction
-
事务对象
Transaction tx = session.beginTransaction();
-
事务提交和回滚方法
tx.commit();
tx.rollback();
-
事务概念
-
事务的四个特性
-
-


浙公网安备 33010602011771号