Hibernate简单得见解

Hibernate.cfg.xml  连接数据库用的  设置数据库方言(dialect)  设置数据库驱动  可设置展示sql以日志形式展示(show_sql) 并且格式化输出sql(format_sql)  更直观可读性高   设置会话的管理方式(和线程进行绑定)指定当前session范围和上下文由谁来跟踪管理

 

Hibernate中的实体类我觉得很有必要实现Serializable接口 保证数据在传输时能够对其实例正确执行序列化操作

创建完实体还要建立和数据库之间的映射,使用class标签 标签里面有 name 它指的是创建类的全限定名,table指的是与之对应的数据库中表,calss里面还有id标签和 property标签  id标签和property标签内容差不多一样,像name指的就是实体中的字段名称,column指的是数据库中的表字段,只不过id是数据库中的主键,id里面还有一个配置主键生成策略的叫做generator mysql使用identity 生成自动增长主键  Oracle使用sequence

 

Hibernate内部也是使用jdbc来访问数据库的

拓展:

jdbc访问数据库步骤:加载驱动 提供jdbc url 进行数据库连接 创建一个Statement 执行sql语句   返回数据  关闭数据库连接

=======================hibernate执行流程后台====================

Hibernate:

  1. 读取并解析配置文件以及映射文件(使用Configuration创建对象并点出调用configure()方法
  2. 依据配置文件和映射文件中的的信息创建SlsessionFactory对象一旦 sqlsessionFactory创建完毕,Configuration()对象的任何变更都不会影响创建好的SqlsessionFactory,如果配置文件发生了改变,那么就需要基于改动后的Configuration对象创建一个新的SessionFactory,通过Configuration.buildSessionFactory()赋值给SessionFactory
  3. 打开Session (通过创建的SqlssessionFactory点出getCurrentSession()此方法可以避免多个线程拿到同一个会话造成线程并发的问题 而且这个方法调用之后不需要手动的关闭session      还可以使用 opeansession
    1. Session是Hibernate的持久化管理的核心,Session提供了众多的方法save(),delete(),update(),get(),load(),通过这样的方法可以透明的执行增删改。
  4. 开始一个事务
    1. 使用Transaction 创建一个事务
  5. 数据库操作:session.save();
  6. 结束事务

==========================================HQL中使用的方法=====================================

  1. 会使用hiobernate的HQL面向对象的查询语言:其中我觉得里面有一个参数绑定不错
    1. 一种是使用占位符? 通过下表进行绑定(query.setString(0, ”张雪为“)下标初始是0
    2. 第二种是使用命名的方式使用 :形式(query.setString(“name”,”张雪为“))

===========================================================

  1. bernate还有两种缓存的方式:
    1. 一级缓存:他是和数据库的一条sql绑定的执行完生命就结束了,在某个时间的点session会将缓存中变化的数据更新到数据库中保证数据一致,当事务提交之后,使用session.clear()可以清除hibernate的存
    2. 二级缓存:sessionFactory默认应该是开启得

==========================多表的查询========================

  1. 多对一:通过配置<many-to-one> 里面设置name=另一张表的字段(对象) columm 配置他们相关联的主外键关系。这个是在class标签中
  2. 配置多对多使用<many-to- many >  在set标签中添加关联表的名称

 

    1. 二级缓存,默认是开开的

Hibernate还有一个反向工程,可以自动生成实体类和映射关系的xm’l,我们还可以设置配置文件,这个文件应该是需要事先创建好

 

 

==========================================JPA================================================

@Entity 生明一个持久化类

@Table 持久化类对应的表

以上两个是放在类的上面

@Id 相当于数据库中的主键

@GeneratedValue 设置主键生成策略

@Cloumn 指的是数据库的表字段

 

@UniqueConstraint 定义表的唯一约束

@Transient 可以忽略的属性 不用持久化到数据库中

 

==========================================拓展===================================================

 

1、getCurrentSession()会避免不同的线程拿到同一个会话,导致线程并发的问题

getCurrentSession()是通过 配置文件中的name=current­­­_session_context_class的property配置(当前会话管理的方式是和线程进行绑定

2、如果他要是在重新调用会话的时候,getCurrentSession()会先检查是否已经有了此会话,如果有就让他用之间的会话,没有再给他创建新的。

3、除此之外,当我们对数据库一次事务操作之后,他会帮我们自动关闭会话。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值