Hibernate(01)

首先认识Hibernate框架是ORM关系映射框架, 工作在持久(dao)层,用对象的方式操作sql数据库

优点:全自动型,自动生成sql语句,具有很强的反射和代理机制,生成代理对象
缺点:因为做的事情太多,所以新能就会大大减弱,虽然有缓存等很多优化手段,但是效果并不明显

搭建Hibernate三个准备七个步骤
第一个准备:创建数据库
第二个准备编写实体类和ORM映射文件

实体类配置ORM映射文件:xml配置文件要与实体类名字一样并在同一个目录下xxx.hbm.xml
引入头文件:

  
   //引入头文件




   
     
                 
                 
                        
                        
                 
                
                 
                 
                 
                 
          

第三个准备配置Hibernate灵魂文件

src目录下创建hibernate.cfg.xml






    
    
          
          com.mysql.jdbc.Driver 
          
          jdbc:mysql:///user 
          
          root 
          
          123 

          
          org.hibernate.dialect.MySQL5Dialect 

          
          true
          true

          
          update 

          
          true 

          
          org.hibernate.connection.C3P0ConnectionProvider 

          
          

    

接下来就是使用Hibernate的七个步骤

         //1 加载灵魂文件
         Configuration cfg = new Configuration().configure();
          //2 创建会话工厂
         SessionFactory sessionFactory = cfg .buildSessionFactory();
          //3 获取会话
         Session session = sessionFactory.openSession();
          //4 开启事务
         Transaction tran = session.beginTransaction();
          //5 CRUD操作
         User user = new User();
          user.setUsername( "小歪");
          user.setBirthday( new Date());
          user.setEmail( "[email protected]");
          // 保存:面向对象的方式操作数据库
        //  session.save(user);
          session.persist( user); // 这个方法跟save功能一样,没有区别,只是名字不一样
         
          //6 事务提交
          tran.commit();
         //7 释放资源
          session.close();
          sessionFactory.close();

下面是CRUD操作

保存
 1. session.save(user);
 2.session.persist(user);   // 和save没有区别只是名字不一样
修改操作
注意:更新操作必须设置id
// Hibernate更新的是所有字段,所以不需要更新的字段也需要赋值
User user = new User();
user.setId(4);
user.setUsername( "kk");

session.update( user);

根据id查询
根据id查询有两种方式,get和load
区别:当查询数据不存在时,get打印null,load报错
User user = session.get(User.class,1);
查询所有
Hibernate查询所 用HQL语句
List list = session.createQuery("from User").list();
用sql
List list = sessioncreateSQLQuery("select * from user").list();
根据条件查询
HQL
// 匿名方式
1.User user = (User) session.createQuery("from User where name=?").setParameter(0,"ros").uniqueResult();
2. User user = (User) session.createQuery("from User where name=?").setString(0,"ros").uniqueResult();
// 命名方式
3.User user = (User) session.createQuery("from User where name=:name").setString("name","ros").uniqueResult(); 
4.User user = (User) session.createQuery("from User where name=:name").setParameter("name","ros").uniqueResult(); 
删除
User user = session.load(User.class,5);// 先查找,再删除
session.delete(user);

提取工具类

   public class HibernateUtil {
    
    private static SessionFactory factory;
        
        static{
            try {
                Configuration cfg = new Configuration();
                cfg.configure();
                factory = cfg.buildSessionFactory();
                //为系统停止运行的时候添加一个监听事件
                Runtime.getRuntime().addShutdownHook(new Thread(){
                    @Override
                    public void run() {
                        factory.close();
                    }
                });
                
            } catch (Exception e) {
                //throw new RuntimeException("创建SessionFactory失败!");
                e.printStackTrace();
            }
        }
        
        public static SessionFactory getSessionFactory(){
            return factory;
        }
        
        public static Session getCurrentSession(){
            return factory.getCurrentSession();
        }
        
        
    }

你可能感兴趣的:(Hibernate(01))