• Hibernate API详解


    hibernate体系结构

    PO:persistent Object 持久对象,javabean+hbm.xml,习惯称呼为PO类

    Configuration

    Configuration hibernate 提供用于存放所有配置信息对象 

    构造方法

    new Configuration(),加载配置文件,hibernate.properties文件。但一般情况没有编写。

           参考的配置文件:%h%project/etc/hibernate.properties

     api

    config.configure(),加载src下hibernate.xml文件

    config.configure(String path) path指定核心配置文件的位置

       例如:conifgure("/cn/util/abc.cfg.xml")

    加载映射文件

    通常将映射文件配置hibernate.cfg.xml<mapping resource="cn/util/.../User.hbm.xml"> 

    config.addClass(*.class) 将在class对象同级目录下,同名的hbm.xml文件

          例如:config.addClass(Book.class),加载Book类,所在的包下面的Book.hbm.xml文件

    config.addResource(String hbm)将指定映射文件xml加载内存,此时文件名称任意,不建议任意

    SessionFactory

    sessionFactory  用于提供session,相当于连接池,通过Configuration加载hibernate.cfg.xml创建对象

    获得对象:config.builderSessionFactory()

    SessionFactory是线程安全的。目的是每一个线程获得的session都是不同的,不存在线程并发问题

    session获得:

      创建一个新的session:factory.openSession();

      将session绑定本地线程中,在一个线程共享session:factory.getCurrentSession();(之后使用)

    工具类

    package cn.hibernate.util;

    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;

    public class H3Utils {
    //方式1
    //private static SessionFactory factory2 = new Configuration().configure().buildSessionFactory();


    //方式2
    //创建一个工厂
    private static Configuration configuration;
    private static SessionFactory factory;


    static{
    configuration = new Configuration().configure();
    factory = configuration.buildSessionFactory();
    }


    public static Session openSession(){
    return factory.openSession();
    }
    }

    Session接口

    session :服务器 与 数据库之间会话,相当于 Connection

    session单线程,存在线程并发问题,线程不安全。 

    注意:session必须关闭,session.close();

    Transaction 

    开启事物:session.beginTransaction();

    提交事物:session.commit();

    回滚事物:session.rollback();

    @Test
    public void demo01(){
    //01.获取session
    Session session = H3Utils.openSession();
    Transaction transaction = null;
    try {
    //#1开启事物
    transaction = session.beginTransaction();

    //操作:。。。。


    //#2提交
    transaction.commit();
    } catch (HibernateException e) {
    // TODO Auto-generated catch block
    if(transaction != null){
    //#3回滚
    transaction.rollback();
    }
    e.printStackTrace();
    }
    }

  • 相关阅读:
    让WPF的Popup不总置顶的解决方案
    virtio 驱动的数据结构理解
    关于Linux下面msyql安装后并未设置初始密码,但是登录报错“Access denied for user 'root'@'localhost' (using password: NO)”的解决方案
    gulp初涉
    前后端分离--构建前端Mock Server--windows部署rap
    一些css小用法总结(持续更新~)
    js原生封装自定义滚动条
    ie下面兼容性问题的一些总结
    关于html水平垂直居中的一些总结吧
    C# 正则表达式匹配string字符串中的时间串(yyyyMMdd)
  • 原文地址:https://www.cnblogs.com/MisterLiu/p/6933498.html
Copyright © 2020-2023  润新知