Hibernate单表映射之hibernate进阶

49 篇文章 5 订阅
37 篇文章 1 订阅

Hibernate初探之单表映射
本文乃是我学习hibernate时所做笔记,不足之处,欢迎指正

主要内容:

  • hibernate.cfg.xml常用配置
  • session简介
  • transaction简介
  • session详解
  • 对象关系映射常用配置

hibernate.cfg.xml 常用配置

1、show_sql:是否把Hibernate运行时的SQL语句输出到控制台,编码阶段便于测试
2、format_sql:输出到控制台的SQL语句是否进行排版,便于阅读。建议设置为true
3、hbm2ddl.auto:可以帮助由Java代码生成数据库脚本,进而生成具体的表结构。
        create:表示每次生成新的表结构,原有表存在则先删除再创建新表并添加记录
        update:在原表上进行更新
        create-drop:表示先创建再删除
        validate:对原有表结构进行验证,如果现有表结构和原有表结构不同,则不会创建表结构
4、default_schema:默认数据库,数据库前缀
5、dialect:配置Hibernate数据库方言,hibernate可针对特殊的数据库进行优化
(可在配置名前加hibernate)

session简介

  • 1、hibernate的执行流程
    hibernate执行流程

  • 2、session简介
    session可理解为操作数据库的对象
    session与connection,是多对一关系,每个session都有一个与之对应的connection,一个connection不同时刻可以供多个session使用

transaction简介

1、hibernate对数据的操作都是封装在事务当中,并且默认是非自动提交的方式。所以用session保存对象时,如果不开启事务,并且手工提交事务,对象并不会真正保存在数据库中

2、如果想让hibernate像jdbc那样自动提交事务,必须调用session对象的doWork()方法,获得jdbc的connection后,设置其为自动提交事务模式(注意:并不推荐这样做)

session.doWork(new Work(){
    @override
    public void execute(Connection connection) throws Exception){
        connection.setAutoCommit(true);
    }
});
session.save(new Student());
session.flush();

session详解

1、如何获得session对象

  • openSession()
  • getCurrentSession()

如果使用getCurrentSession需要在hibernate.cfg.xml文件中进行配置:
如果是本地事务(jdbc事务)

<property name="hibernate.current_session_context_class">thread</property>

如果是全局事务(jta事务)

<property name="hibernate.current_session_context_class">jta</property>

openSession方法:

public void testOpenSession(){
    //获取配置对象
    Configuration config = new Configuration().configure();
    //获得服务注册对象
    ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
        .applySettings(config.getProperties()).buildServiceRegistry();
    //获得sessionFactory对象
    SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
    //获得session对象
    Session session = sessionFactory.openSession();
    if(session!=null){
        System.out.println("session创建成功!");
    } else {
        System.out.prinltn("session创建失败!");
    }
}

getCurrentSession方法

public void testGetCurrentSession(){
    //获取配置对象
    Configuration config = new Configuration().configure();
    //获得服务注册对象
    ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
        .applySettings(config.getProperties()).buildServiceRegistry();
    //获得sessionFactory对象
    SessionFactory sessionFactory = config.buildSessionFactory(serviceRegistry);
    //获得session对象
    Session session = sessionFactory.getCurrentSession();
    if(session!=null){
        System.out.println("session创建成功!");
    } else {
        System.out.prinltn("session创建失败!");
    }
}

openSession与getCurrentSession的区别

  • 1、getCurrentSession在事务提交或者回滚之后会自动关闭,而openSession需要手动关闭。如果使用openSession而没有手动关闭,多次之后会导致连接池溢出
  • 2、openSession每次创建新的session对象,getCurrentSession使用现有的session对象

对象关系文档常用设置

<hibernate-mapping
    schema = "schemaName"
    catalog = "catalogName"
    default-cascade = "cascade_style"       //级联风格
    default-access = "field | property | ClassName" //访问策略
    default-lazy = "true | false"   //加载策略
    package = "packagename"
/>
<class
    name = "ClassName"
    table = "tableName"
    batch-size = "N"
    where =  "condition"
    entity-name = "EntityName"
/>
<id 
    name = "propertyName"
    type = "typename"
    column = "column_name"
    length = "length"
    <generator class = "generatorClass"/>       //主键生成策略
</id>

主键生成策略
这里写图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值