Hibernate

Hibernate的概述

是一个标准ORM框架
操作对象就相当于操作表结构
通过映射文件吧对象与表关联到一起

对jdbc的一个封装

优点:简化了jdbc的繁琐代码
对面向对象特性的良好支持

缺点:不支持动态sql,灵活性较低
不适合大规模的数据处理

Hibernate 开发环境搭建

1.导入jar包 lib下required包下的所有jar包,还有log4j.jar及数据库连接

project-etc下找约束

配置映射文件User.hbm.xml
a.列名子标签形式存在
b.列名可以不写,默认和实体类名字段一样
c.type可以不写,默认和实体字段属性一致

主键生成策略:native(根据本地数据支持主键生成方式)
uuid(根据uuid算法生成一个32位16进制的字符串,推荐使用,使用此算法,主键必须为字符串)



    
    
    
    
    
    
        
    

主配置文件hibernate.cfg.xml




    

        com.mysql.jdbc.Driver
        jdbc:mysql:///bank
        root
        

        
        org.hibernate.dialect.MySQLDialect
        
        
        
        
        update
        
        true
        
        true
        
        
        
    
    



测试类

Configuration con=new Configuration();
     con.configure();//加载配置文件
     SessionFactory factory = con.buildSessionFactory();//得到 SessionFactory对象
     System.out.println(factory);

crud操作

a.得到工厂对象
b.打开session
c.开启事物
d.crud操作
e.提交事务
f.关闭资源

Hibernate_第1张图片
2.png

快照机制
从数据库查询出的额数据会在缓存和快照区各一个 当调用flush或者close方法刷新缓存,来和快照区数据比对,有更新就推入数据库

对象的三种状态

a.瞬时态 (1)new出来的,不和 Session 实例关联(2) 在数据库中没有和瞬时对象关联的记录

b.持久态 瞬时对象转为持久对象:
(1) 通过 Session 的 save() 和 saveOrUpdate() 方法把一个瞬时对象与数据库相关联,这个瞬时对象就成为持久化对象。
(2) 使用get(),load() 待方法查询到的数据对象,将成为持久化对象。
持久化对象的特点:
(1) 和 Session 实例关联
(2) 在数据库中有和持久对象关联的记录

c.游离态:数据库有记录,但是脱离了session,缓存中没有

  1. 本质上和瞬时对象相同
    (2) 只是比瞬时对象多了一个数据库记录标识值 id.
    持久对象转为游离对象:
    当执行 close() 或 clear(),evict() 之后,持久对象会变为游离对象。
    瞬时对象转为持久对象:
    通过 Session 的 update(),saveOrUpdate() 和 lock() 等方法,把游离对象变为持久对象。

要先查后改

修改方法:

1.update
2.saveOrUpdate
当没设置存入数据的主键时执行save
设置了就执行update,主键在数据库找不到时,就会报状态异常
3.merge
当没有主键时,执行插入,当有主键时,先查询,判断是否存在,存在就修改,不存在就执行插入
瞬时态的数据被merge操作后变成游离态,返回的数据为持久态

查询方法

         Session session = HibernateUtil.getsession();
        Transaction transaction = session.beginTransaction();
        User user = new User();
        user.setAge(208);
        user.setName("ewjj");
    User user2 = session.get(User.class, 5);
    //一发送就执行sql语句
    User load = session.load(User.class, 1);
    //使用结果时,才执行sql语句,推荐
     session.saveOrUpdate(user);
        transaction.commit();
        session.close();
        Configuration con = new Configuration();
       con.configure();// 加载配置文件
       SessionFactory factory = con.buildSessionFactory();// 得到
                                                           // SessionFactory对象
       System.out.println(factory);
       Session session = factory.openSession();
       Transaction transaction = session.beginTransaction();
       User user = new User();
       try {
           user.setAge(20);
           user.setName("ew");
           session.save(user);
           transaction.commit();
       } catch (Exception e) {
           if (transaction != null) {
               transaction.rollback();
           }
       } finally {
           session.close();
       }


工具类

       private HibernateUtil() {
   }
   static SessionFactory factory;
   static {
       Configuration con = new Configuration();
       factory = con.configure().buildSessionFactory();
   }
   public static Session getsession(){
   return factory.openSession();
   }
   ```

你可能感兴趣的:(Hibernate)