Hibernate中API详解

1.体系结构
这里写图片描述
PO:persistent object ,用于与数据库交互数据。–dao层 (JavaBean + hbm )
BO:Business object 业务数据对象。–service层
VO:Value Object 值对象。–web层
开发中:直接使用JavaBean 描述三个对象。
这里写图片描述
2.Configuration 配置对象

hibernate 核心配置文件种类

hibernate.cfg.xml 通常使用xml配置文件,可以配置内容更丰富。
hibernate.properties 用于配置key/value 形式的内容,key不能重复的。配置有很多的局限性。一般不用。
参考文件:hibernate-distribution-3.6.10.Final\project\etc\ hibernate.properties提供了核心配置文件常用的配置项,及选择参数。
1.提供构造 new Configuration() hibernate将自动加载 hibernate.properties文件
hibernate.properties文件必须存放在类路径(src)下
2.提供方法 configure() 将加载src下的hibernate.cfg.xml
这里写图片描述
3.扩展api
configure(String) 加载指定目录下的 xml文件
4.手动加载配置文件

        // 手动加载指定的配置文件
        config.addResource("com/itheima/a_hello/User.hbm.xml");
        // 手动加载指定类,对应的映射文件 User--> User.hbm.xml
        config.addClass(User.class);

这里写图片描述
常见异常:
这里写图片描述
开发中:将hbm.xml映射 配置 hibernate.cfg.xml
学习中:可以使用 addClass 或 addResource

3.SessionFactory工厂

  • SessionFactory 相当于java web连接池,用于管理所有session
    获得方式:config.buildSessionFactory();
    sessionFactory hibernate缓存配置信息 (数据库配置信息、映射文件,预定义HQL语句 等)
    SessionFactory线程安全,可以是成员变量,多个线程同时访问时,不会出现线程并发访问问题。
    提供api:
        //打开一个新的会话 session
        factory.openSession();
        //获得当前线程中绑定的会话session
        factory.getCurrentSession();

hibernate支持,将创建的session绑定到本地线程中,底层使用ThreadLocal,在程序之间共享session。
1.必须在hibernate.cfg.xml 配置

<!-- 2 与本地线程绑定 -->
<property name="hibernate.current_session_context_class">thread</property>

2.如果提交或回滚事务,底层将自动关闭session

4.Session 会话

Session 相当于 JDBC的 Connection – 会话
这里写图片描述
通过session操作PO对象 –增删改查
session单线程,线程不安全,不能编写成成员变量。
session api

save 保存
update 更新
delete 删除
get 通过id查询,如果没有 null
load 通过id查询,如果没有抛异常
createQuery(“hql”) 获得Query对象
createCriteria(Class) 获得Criteria对象
5.Transaction 事务

开启事务 beginTransaction()
获得事务 getTransaction()
提交事务:commit()
回滚事务:rollback()

try{
   //开启
   //session操作
   //提交
} catch(e){
   //回滚
}

扩展:不需要手动的管理事务,之后所有的事务管理都交予spring。

6.Query对象

  • hibernate执行hql语句
    hql语句:hibernate提供面向对象查询语句,使用对象(类)和属性进行查询。区分大小写。
    获得 session.createQuery(“hql”)
    方法:

list() 查询所有
uniqueResult() 获得一个结果。如果没有查询到返回null,如果查询多条抛异常。

setFirstResult(int) 分页,开始索引数startIndex
setMaxResults(int) 分页,每页显示个数 pageSize

7.Criteria对象(了解)

QBC(query by criteria),hibernate提供纯面向对象查询语言,提供直接使用PO对象进行操作。
获得方式:Criteria criteria = session.createCriteria(User.class);
条件
criteria.add(Restrictions.eq(“username”, “tom”));

8.工具类

public class H3Utils {

    // 会话工厂,整个程序只有一份。
    private static SessionFactory factory;

    static{
        //1 加载配置
        Configuration config = new Configuration().configure();

        //2 获得工厂
        factory = config.buildSessionFactory();
//3 关闭虚拟机时,释放SessionFactory
            Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {

            @Override
            public void run() {
                System.out.println("虚拟机关闭!释放资源");
                sf.close();
            }
        }));
    }


    /**
     * 获得一个新的session
     * @return
     */
    public static Session openSession(){
        return factory.openSession();
    }

    /**
     * 获得当前线程中绑定session
     * * 注意:必须配置
     * @return
     */
    public static Session getCurrentSession(){
        return factory.getCurrentSession();
    }
}

over~~~

猜你喜欢

转载自blog.csdn.net/weixin_41653442/article/details/81321441
今日推荐