Hibernate整理学习(一)

hibernate定义

hibernate是一种框架,一种开源的关系对象映射框架,它对JDBC做了
轻量级的封装,可以让使用者直接通过操纵POJO对象,来完成对数据库的操作。hibernate会自动生成sql语句,并执行。

hibernate配置文件

hibernate框架使用中,是直接对POJO对象*进行操作,来达到增删改查数据库的目的。

pojo对象的配置

pojo实体类:
>
public class Dept {
private Integer id;
private String name;
//set,get,以及无参构造
}
/>
Dept:类名对应数据库的表名dept
id :字段,dept表主键
name:字段
Dept配置文件:


    
    
        
        
    
    
        
    



1. < class >标签表示一个实体类,在其中配置实体类的属性

    name ="类的权限定名" table="表名" catalog="数据库名"
 < id >标签设置主键, name="属性名",type="类型"
< column > 设置字段:name="字段名" not-null ="true" 非空
< generator >设置主键生成策略: 不同的数据库,也有不同
                native 根据数据库自适应

2.< property > 属性:

 name 属性名,type 类型
< column > 设置字段:name="字段名" not-null ="true" 非空 
length 长度 
property 标签可简写
< property name="name" column="name" />

配置文件处理

配置文件管理

Configuration

作用:进行配置信息的管理
目标:用来生成SessionFactory
可以在configure()中指定hibernate的配置文件,如果不指定,则在src/classpath下加载hibernate.cfg.xml文件
—加载默认hibernate的配置文件

sessionFactory =  new Configuration().configuration().buildSessionFactory();

—加载指定的hibernate配置文件

sessionFactory = new Configuration().configuration("文件").buildSessionFactory();

SessionFactory

生产session的工厂,
生成一个session,sessionFactory从连接池取出一个连接交给session
对jopo类的操作,都是依赖于session进行的
getSession()

Session

Session是管理数据库的一个任务单元
新建一个session可以理解为要开启一个对数据库操作的任务(个人理解,求斧正)

通过load/get可以从数据库获得pojo对象 load/get(POJO类.class,主键标识)
    get,直接从数据库中查到并获取了对象信息
    load,本人理解为预加载,已经定位了需要的信息,只等临门一脚(真正使用时),才会把对象信息加载到jopo对象中返回。
通过save(pojo),将一个pojo对象加入到session中,没有save操作,不会对数据库进行修改
update(pojo),更新指定主键的字段信息,在xml中有一个update属性,默认为true,可以更新,如果设为false,不可更新。
flush(),将session中的数据刷新到数据库中,如果没有flush,则根本不会对数据库进行操作。flush也有多种默认(详解自己看)。
    比如:
        |FlushMode.ALWAYS:任务一条SQL语句,都会flush一次
        |FlushMode.NEVER :永远不flush  此选项在性能优化时可能用,比如session取数据为只读时用,这样就  

不需要与数据库同步了
除了flush外,还有evict,clear。
evict(pojo)是从session中拆除,如果实在flush之前拆除,则在提交事务
即session.getTransaction().commit()时会异常。不同步(具体原因涉及到session的内部结构了,本人也不太清楚,大概是因为entityEntries在flush注册信息与本身保存的不一致的原意,entityEntries是个map集合)。
Transaction
开启事务(增、删、改的时候是先将jopo保存在session中,如果没有flush(),则根本不会对数据库进行操作),和sql中的开启事务,提交事务/回滚一致。
commit以session中的信息来flush更新数据库
roolback方法session中的信息失效,不更新数据库

你可能感兴趣的:(hibernate)