zoukankan      html  css  js  c++  java
  • Hibernate核心API

    (1)Configuration:Hibernate的配置对象:

    Configuration类的作用是对Hibernate进行配置,以及对它进行启动。在Hibernate的启动过程中,Configuration类的实例首先定位映射文档的位置,读取这些配置,然后创建一个SessionFactory对象。虽然Configuration类在整个Hibernate项目中只扮演着一个很小的角色,但它是启动Hibernate时所遇到的第一个对象。

    作用:  

      加载核心配置文件。

        1.hibernate.properties

    Configuration cfg = new Configuration().configure();

        2.hibernate.cfg.xml

    Configuration cfg = new Configuration().configure();

      加载映射文件:

    //手动加载映射文件:
    configuration.addResource("com/hibernate/demo1/Customer.hbm.xml");

    (2).SessionFactory:Session工厂

    SessionFactory内部维护了Hibernate的连接池和HIbernate的二级缓存。是线程安全的对象。一个项目创建一个对象即可。

    (了解)配置c3p0连接池:

    <!-- 配置C3P0连接池 -->
            <property name="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
            <!--在连接池中可用的数据库连接的最少数目 -->
            <property name="c3p0.min_size">5</property>
            <!--在连接池中所有数据库连接的最大数目  -->
            <property name="c3p0.max_size">20</property>
            <!--设定数据库连接的过期时间,以秒为单位,
            如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
            <property name="c3p0.timeout">120</property>
             <!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
            <property name="c3p0.idle_test_period">3000</property>

    抽取工具类:

    为了简化初始化session工厂。

    public class HibernateUtils {
    
        public static final Configuration cfg;
        public static final SessionFactory sf;
        
        static{
            cfg = new Configuration().configure();
            sf = cfg.buildSessionFactory();
        }
        
        public static Session openSession(){
            return sf.openSession();
        }
    }

    (3)Session:类似Connection对象是连接对象

    Session代表的是Hibernate与数据库的连接对象。非线程安全的。是与数据库交互的桥梁。

    Session中的API:

      保存方法:

        Serializable save(Object obj);

      查询方法:

        T get(Class c,Serializable id);

        T load(Class c,Serializable id);

    get和load方法的区别?

            //使用get方法查询
            Customer customer = session.get(Customer.class, 2l);
            System.out.println(customer);
    
            //使用load方法查询
            Customer customer = session.load(Customer.class, 1l);
            System.out.println(customer.getCust_id());    

    get方法和load方法的区别:
    get方法:

    • 采用的是立即加载,执行到这行代码的时候就马上发送SQL语句去查询。
    • 查询后返回的是真实对象本身
    • 查询一个找不到的对象的时候,返回null。

    load方法:

    • 采用的是延迟加载,也称为lazy懒加载,执行到这行代码的时候,不会发送SQL语句,当真正使用这个对象的时候才会发送SQL语句。
    • 查询后返回的是代理对象。javaassist-3.18.1-GA.jar 利用javassist技术产生的代理。
    • 查询一个找不到的对象的时候,返回ObjectNotFoundException。

      删除方法:

        void delete(Object obj);

    @Test
        public void demo04() {
            //删除
            Session session = HibernateUtils.openSession();
            Transaction transaction = session.beginTransaction();
    
            //直接创建对象,删除
            /*Customer customer = new Customer();
            customer.setCust_id(1l);
            session.delete(customer);*/
    
            //先查询再删除(推荐)
            Customer customer = session.get(Customer.class, 1l);
            session.delete(customer);
    
            transaction.commit();
            session.close();
        }

      保存和更新:

        void saveOrUpdate(Object obj);

    @Test
        public void demo05() {
            //保存或更新
            Session session = HibernateUtils.openSession();
            Transaction transaction = session.beginTransaction();
    
            Customer customer = new Customer();
            customer.setCust_name("瓜皮");
            session.saveOrUpdate(customer);
    
            transaction.commit();
            session.close();
        }

      查询数据库所有:

    @Test
        public void demo06() {
            //查询所有
            Session session = HibernateUtils.openSession();
            Transaction transaction = session.beginTransaction();
    
            //接收HQL:Hibernate Query Language 面向对象的查询语言
            Query query = session.createQuery("from Customer");
            List<Customer> customerList = query.list();
            for (Customer customer : customerList) {
                System.out.println(customer);
            }
    
            //接收SQL
            session.createSQLQuery("select * from cst_customer");
            List<Object[]> objectList = query.list();
            for (Object[] customer : objectList) {
                System.out.println(Arrays.toString(customer));
            }
    
            transaction.commit();
            session.close();
        }
  • 相关阅读:
    PNG文件格式具体解释
    opencv2对读书笔记——使用均值漂移算法查找物体
    Jackson的Json转换
    Java实现 蓝桥杯VIP 算法训练 装箱问题
    Java实现 蓝桥杯VIP 算法训练 装箱问题
    Java实现 蓝桥杯VIP 算法训练 单词接龙
    Java实现 蓝桥杯VIP 算法训练 单词接龙
    Java实现 蓝桥杯VIP 算法训练 方格取数
    Java实现 蓝桥杯VIP 算法训练 方格取数
    Java实现 蓝桥杯VIP 算法训练 单词接龙
  • 原文地址:https://www.cnblogs.com/crazypokerk/p/9201263.html
Copyright © 2011-2022 走看看