Hibernate 什么梗

一、基础使用

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的 orm 框架,hibernate 可以自动生成SQL语句,自动执行。

1. 持久化类创建

设计原则:

  • 必需为公有类 public,且含公有不带参构造方法
  • 类内部属性私有,提供 setter/getter 封装

2. 创建对象关系映射文件-Clazz.hbm.xml

  • < hibernate-mapping >
属性名称描述
schema模式名称
catalog目录名称
default-cascade级联风格
default-access访问策略
default-lazy加载策略
package默认包名

  • < class >
属性名称描述
name映射类名
table映射表名
batch-size抓取策略
where抓取条件
entity-name多表映射

  • < id >
属性名称描述
name映射属性名
type映射属性类型
column映射表中对应的字段名称
length指定长度
< generator>主键生成策略,如下常用
assigned:手工赋值
native:自动增长,覆盖手工赋值

  • < component >
属性名称描述
name映射组件名
column映射表中对应的字段名称

  • < property >
属性名称描述
name映射属性名
column映射表中对应的字段名称

3. 配置文件(常用配置)-hibernate.cfg.xml

属性名字描述使用
show_sql控制台 log 输出true/false
format_sql控制台 log 排版true/false
hbm2ddl.auto数据处理与表结构生成create: 每次删除原有表,再创建新的表
update:在原有表上更新数据
create-drop:创建后删除
validate:表结构验证,一致的条件下创建
default_schema默认数据库,创建前缀表名称[schema_name]
dialect数据库方言
<session-factory>
    <!-- 数据库用户名 -->
    <property name="connection.username">root</property>
    <!-- 数据库用户名 -->
    <property name="connection.password">666666</property>
    <!-- 数据库驱动类 -->
    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
    <!-- 数据库连接URL -->
    <property name="connection.url">jdbc:mysql://localhost:3306/db_examsystem</property>
    <!-- 数据库方言 -->
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  

    <property name="show_sql">true</property>
    <property name="format_sql">true</property>   
    <property name="hbm2ddl.auto">create</property> 

    <!-- 关联对象关系映射文件 --> 
    <mapping resource="Clazz.hbm.xml"/>  
</session-factory>

4. 事务处理

Hibernate 对数据的操作均封装与事务当中按,且默认非自动提交(无启动事务提交则无法将数据存储值数据库当中)

4.1 Session

  • 获取方式(默认)-openSession
<!-- 需手动关闭,获取新的 session 对象 -->
<property name="hibernate.current_session_context_class">jta</property>
  • 获取方式-getCurrentSession()
<!-- 自动关闭,获取原有 session 对象 -->
<property name="hibernate.current_session_context_class">thread</property>
  • 常用操作
    • save:存储记录
    • get:获取记录(调用时获取,记录不存在返回 null)
    • load:获取记录(使用时获取,记录不存在抛异常)
    • update:更新记录
    • delete:删除

4.2 Transaction

mSession.doWork(new Work() {
    @Override
    public void execute(Connection connection) throws SQLException {
        connection.setAutoCommit(true);// 实现自动提交
    };
});

mSession.save(student);
mSession.flush();

或开启事务实现数据提交存储

mTransaction = mSession.beginTransaction();// 开启
// ...
mTransaction.commit();// 提交

二、表映射

1. 一对多 one2many

  • 模拟当个课室中多个学生的场景,gId 为关联外键
<hibernate-mapping>
    <class name="[packname].Grade" table="grade">
         <id name="gId" type="int">
             <column name="gId" />
             <generator class="native" />
         </id>

        <set name="students" table="student" inverse="false" cascade="save-update" lazy="true">
           <key>
               <column name="gId" />
           </key>
           <one-to-many class="[packname].Student" />
        </set>
    </class>
</hibernate-mapping>
  • < set >常用属性
属性名称描述
name映射类属性的名称
table关联类的目标数据库表
lazy指定关联对象是否使用延迟加载
inverse标识双向关联中被动的一方false/负责维护的一方true
cascadeall:对所有炒作进行级联炒作
save-update:执行保存和更新操作是进行级联操作
delete:执行删除操作时进行级联操作
none:对所有操作不进行级联操作

2. 多对一 many2one

  • 模拟多个学生在同一教室的场景,gId 为关联外键
<hibernate-mapping>
    <class name="[packname].Student" table="student">
         <id name="sId" type="int">
             <column name="sId" />
             <generator class="native" />
         </id>
    <many-to-one name="grade" class="[packname].Grade" column="gId" cascade="all"/>
</hibernate-mapping>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值