Hibernate常用API介绍

1.1。 ç onfiguration
它主要是用于加载休眠配置。
Configuration config = new Configuration().config(); 主要加载SRC下的hibernate.cfg.xml中
Configuration config = new Configuration();主要加载的src下的hibernate.properties
Configuration config = new Configuration().config(核心配置文件名称);加载指定的名称的配置文件
问题:我们是在hibernate.cfg.xml的文件中有xxx.hbm.xml文件的位置如果我们使用的是hibernate.properties这种核心配置,它如何加载映射配置?
1.2。 SessionFactory的
首先SessionFactory的它的获取是通过配置得到。
SessionFactory的接口负责初始化Hibernate的。它充当数据存储源的代理,并负责创建会话对象。用到这里了工厂模式。需要注意的是SessionFactory的并不是轻量级的,因为一般情况下,一个项目通常只需要一个SessionFactory的就够,当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory的。
通过SessionFactory的可以得到会话。
是从连接池中获取一个连接。
获取一个与线程绑定的会话。
SessionFactory的它不是轻量级的,不要频繁创建关闭它。在一个项目中有一个SessionFactory的就可以,通过SessionFactory的来获取会话进行操作。
问题:怎样可以保证在一个项目中所使用的SessionFactory是同一个哪?
SessionFactory内部还维护了一个连接池,如果我们要想使用c3p0连接池,应该怎样处理?
1. 我们要导入c3p0的相关jar包
在hibernate/lib/options下有关于c3p0连接池jar包
2. 在hibernate.cfg.xml文件中配置c3p0连接
可以查看etc/hibernate.properties中关于c3p0的配置
1.3. Session
Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。但需要注意的是Session对象是非线程安全的。
问题:我们如何解决session的安全问题?
        我们只需要在方法内部来使用Session就可以。
问题:Session如何获取到?
SessionFactory.openSession()        ;  相当于直接通过SessionFactory创建一个新的Session,使用完成后要手动调用close来关闭。
SessionFactory.getCurrentSession(); 获取一个与线程绑定的Session,当我们提交或事务回滚后会自动关闭。
Session常用的方法:
        save  保存对象
        update 修改操作
        delete删除
        get/load 根据id进行查询
        savenOrUpdate 执行save或update操作
        createQuery()获取一个Query对象
        CreateSQLQUery()获取一个可以操作sql的SQLQuery对象
        createCriteria() 获取一个Criteria它可以完成条件查询
1.4. Transaction
Transaction接口主要用于管理事务,它是hibernate的事务接口,对底层的事务进行了封装。使用它可以进行事务操作。
commit 事务提交
rollback 事务回滚
问题:如果获取一个Transaction对象
Session.beginTransaction();
问题:如果在程序中没有开启事务,是否存在事务?
有事务,session的每一个操作就会开启一个事务。
默认情况下事务是不会自动提交的。
默认不自动提交
事务自动提交.
1.5. Query
Query接口让你方便地对数据库及持久对象进行查询,它可以有两种表达方式:HQL语言或本地数据库的SQL语句。Query经常被用来绑定查询参数、限制查询记录数量,并最终执行查询操作。
通过Query主要完成查询操作.
我们通过Query可以执行hql语句.
Query query=Session.createQuery(hql);
下面这个可以执行sql语句
SQLQUery sqlQuery=Session.createSQLQuery(sql);
SQLQuery是Query的子.
查询所有操作---使用HQL
分页查询
查询指定列信息
Select name ,address from Customer; 得到的是List<Object[]>结果
要想得到List<Customer>结果
1. 在Customer类中生成以name,address为参数的构造,注意,无参数构造也要有。
2. Select new Customer(name,address) from Customer;
条件查询
可以使用where关键字
无名称参数  from Customer where name=?
对其进行赋值query.setParameter(0,“张三”)
来自Customer的有名称参数where name =:myname;
对其进行赋值query.setParameter(“myname”,“李四”);
如果查询结果可以保证就是唯一的,我们可以使用
查询。uniqueResult()来得到一个单独对象。
的SQLQuery
要想执行本地SQL
SQLQuery sqlQuery = session.createSqlQuery(String sql);
使用addEntity方法来将结果封装到指定的对象中,如果不封装,得到的是列表<对象>
如果的sql中有参数,我们使用的setParameter方法完成参数传递。
如果结果就是一个可以使用uniqueResult()来得到一个单独对象。
1.6。 标准
标准接口与查询接口非常类似,允许创建并执行面向对象的标准化查询。值得注意的是标准的接口也是轻量级的,它不能在会议之外使用。
首先我想使用标准,必须得到标准
条件标准= Session.createCriteria()
查询所有操作
Session.createCriteria(实体类的.class)得到一个标准对象,调用列表中查询所有
分页操作与查询的方法一样
setFirstResult()setMaxResults()
条件查询
criteria.add(Restrictions.eq(“姓名”,” XXXX”));
criteria.add(Restrictions.or(Restricitons.eq(),Restrictions.list()... ..))
我们使用的标准可以更加面向对象去操作,它非常适合进行多条件组合查询。

展开阅读全文

没有更多推荐了,返回首页