您的位置:首页 > 其它

hibernate核心API简介

2016-05-17 19:04 246 查看

一、Configuration

Configuration 类的作用是对Hibernate 进行配置,以及对它进行启动。

1、configure()

该方法有5个重载方法

configure()

按默认地址获取主配置文件并生成配置对象,即src目录下的hibernate.cfg.xml文件


configure(Document document)

使用传递的文档对象生成配置对象


configure(File file)

使用传递的文件对象生成配置对象


configure(String resource)

按指定的路径加载配置文件,并生成配置对象


configure(URL url)

按指定的URL路径加载配置文件,并生成配置对象


2、addResource(String resource)

按指定路径加载映射文件,是动态的加载


3、addClass(Class clazz)

加载指定类的映射文件


4、buildSessionFactory()

按已加载配置生成sessionFactory


二、SessionFactory

1、openSession()

获取session


2、getCurrentSession()

也是获取session,但与openSession()不同的是getCurrentSession()获取的是上下文session,每个线程只有一个


3、close()

关闭sessionFactory,此时所有的session都将提交


三、Session

说到session就不得不先说,hibernate中对象的状态

对象的状态:

临时状态:
> 与数据库没有对应,跟Session没有关联
> 一般是新new出的对象
> 刚刚创建,还未交给session管理
持久化状态:
> 对象在Session的管理之中,最终会有对应的数据库记录
> 特点:
1,有OID(对象标识符)
2,对对象的修改会同步到数据库
> 交与session管理后的状态
游离状态:
> 数据库中有对应记录,但对象不在Session管理之中
> 修改此状态对象时数据库不会有变化
> session死亡或被清除后的状态
删除状态:
> 执行了delete()后的对象
> 从数据库中清除后的状态
总而言之:
session中    数据库中
----------------------------
临时      无           无
持久化 有           最终有
游离      无           有
删除      调用了delete()方法后


操作实体对象的方法:

save(Object obj)

> 把临时状态变成持久化状态
> 会马上执行INSERT SQL语句


update(Object obj)

> 把游离状态变为持久化状态
> 保存在缓存中,最后才执行


delete(Object obj)

> 把游离状态变为持久化状态
> 保存在缓存中,最后才执行


saveOrUpdate(Object obj)

> 把临时或游离状态转为持久化状态
> 对象中,id存在时,执行UPDATE
> 对象中,id不存在时,执行INSERT


操作缓存的方法:

clear()

清除所有对象,即不执行SQL语句


evict(Object obj)

清除指定对象,即不执行SQL语句


flush()

刷新缓存,即马上执行SQL语句


refresh(Object obj)

刷新对应对象的缓存,即执行SELECT语句


查询实体对象的方法:

get()

> 获取数据,是持久化状态
> 会马上执行INSERT SQL语句


load()

> 获取数据,是持久化状态
> load()后返回的是一个代理对象
> 要求类不能是final的,否则不能生成子类代理,就不能使用懒加载功能了
> 让懒加载失效的方式:
一、把实体写成final的
二、在hbm.xml中写<class ... lazy="false">
> 不会马上执行sql语句,而是在第1次使用非id或class属性时执行sql


createQuery()

按指定的hql语句生成query对象


createCriteria()

获取criteria对象


事务相关方法:

beginTransaction()

开始事务


getTransaction()

获得事务对象


四、Transaction

begin()

开始事务


commit()

提交事务


rollback()

回滚事务


五、Criteria

> 使用面向对象的形式进行查询,配合Restrictions工具类使用。
> 个人觉得,不如hql语句
> 详细信息可见于下面这个帖子


详细信息

六、Query

说到query就一定要说HQL语句

HQL语句

HQL: Hibernate Query Language.
特点:
1,与SQL相似,SQL中的语法基本上都可以直接使用
2,SQL查询的是表和表中的列;HQL查询的是对象与对象中的属性
3,HQL的关键字不区分大小写,但最好都大写,类名与属性名是区分大小写的
4,SELECT可以省略
5,不可以使用SELECT *
6,聚集函数:count(), max(), min(), avg(), sum()
> 括号里是*时,返回值是Long型
> 否则返回值是括号里面的类型
7,连接查询 / HQL是面向对象的查询
> hql = "SELECT e.id,e.name,d.name FROM Employee e INNER JOIN e.department d";
> hql = "SELECT e.id,e.name,e.department.name FROM Employee e"; //简便方法
8,查询时使用参数
> 方式一:使用'?'占位
hql = "FROM Employee e WHERE id BETWEEN ? AND ?";
List list = session.createQuery(hql)//
.setParameter(0, 5)// 设置参数,第1个参数的索引为0
.setParameter(1, 15)//
.list();
> 方式二:使用变量名
hql = "FROM Employee e WHERE id BETWEEN :idMin AND :idMax";
List list = session.createQuery(hql)//
.setParameter("idMax", 15)//
.setParameter("idMin", 5)//
.list();
9,使用命名查询
将HQL语句写在xxx.hbm.xml配置文件中
<!-- 定义命名的查询 -->
<query name="queryByIdRange">
<![CDATA[FROM Employee e WHERE e.id >= :idMin AND e.id <= :idMax]]>
</query>

Query query = session.getNamedQuery("queryByIdRange");
10,update与delete,不会通知Session缓存
> update
int result = session.createQuery(//
"UPDATE Employee e SET e.name=? WHERE id>15")//
.setParameter(0, "无名氏")//
.executeUpdate();
> delete
int result = session.createQuery(//
"DELETE FROM Employee e WHERE id>15")//
.executeUpdate();


设参方法

setParameter()

设置相应'?'对应的数值


setParameterList()

按数组中的顺序设置'?'对应的数值


执行方法

executeUpdate()

执行hql语句,返回一个int值,代表执行成功的记录的条数


list()

执行hql语句,返回一个存放有相应对象的List


uniqueResult()

查询一个唯一的结果,如果没有结果,则返回null,如果结果有多个,就抛异常


分页常用到的方法

setFirstResult()

从第几个结果开始


setMaxResults()

结果集的最大数量
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: