Hibernate整理学习(一)

xiaoxiao2021-02-28  110

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配置文件:

<hibernate-mapping> <class name="jopo.Dept" table="Dept" catalog="test"> <id name="id" type="java.lang.Integer"> <column name="id" not-null="true" /> <generator class="increment"/> </id> <property name="name" type="java.lang.String"> <column name="name" length="20" /> </property> </class> </hibernate-mapping>

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中<property>有一个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中的信息失效,不更新数据库

转载请注明原文地址: https://www.6miu.com/read-45908.html

最新回复(0)