Javaのhibernateフレームワークの基礎とトランザクションの4つの特性

19189 ワード

取引
トランザクションのプロパティ
   :               。
                   ,      
   :                            。
   :                   ,              
                       ,             。
   :          ,                 
                               

トランザクションの使用
実行する文をトランザクションのsql文(トランザクションの開始とトランザクションのコミット)でラップします.
    1.     
    2.    sql  
    3.       
    4.       (     )      ,         

  :
    begin;
    update   set money=money-100 where username='a';
    update   set money=money+100 where username='b';
    commit;

トランザクションの独立性レベル
  :                   。
        (  :    ,       )
     :                ,        。
                               。(update)
(  :      ,    ATM                 )
  (  ):                     ,         。(insert)

mysql      :REPEATABLE READ:    、     。       。

hibernate
操作データのオブジェクト関係型データベースはオブジェクト向けの思想を用いて削除・変更し、煩雑なsql文を用いてデータを操作してデータベースに追加することを避ける.
    @Test
    public void fun1() {
        // 1.      
        //     configure()         hibernate.cfg.xml    
        Configuration configuration = new Configuration().configure();
        // 2.  sessionFactory             
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        // 3.        session   
        // openSession          session
        Session session = sessionFactory.openSession();
        //         
        User user = new User();
        user.setUsername("SC");
        user.setPassword("123");
        // 4.  session                 transaction
        Transaction transaction = session.beginTransaction();

        //          
        session.save(user);

        // 5.    
        transaction.commit();
        // 6.    
        session.close();
        sessionFactory.close();
    }

オブジェクトの変更
    @Test
    public void fun2() {
        Configuration configuration = new Configuration().configure();
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        //     
        // 1.    (  id  )
        User user = session.get(User.class, 1);
        // 2.    
        user.setUsername("zb");
        user.setPassword("1");
        // 3.          :        update
        //session.save(user);
        session.update(user);

        transaction.commit();
        session.close();
        sessionFactory.close();
    }

検索
   :
        @Test
        public void fun3() {
            Configuration configuration = new Configuration().configure();
            SessionFactory sessionFactory = configuration.buildSessionFactory();
            Session session = sessionFactory.openSession();
            Transaction transaction = session.beginTransaction();

            //   
            User user = session.get(User.class, 1);
            System.out.println(user);

            transaction.commit();
            session.close();
            sessionFactory.close();
        }

   :
    @Test
    public void fun4() {
        Configuration configuration = new Configuration().configure();
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        //   
        User user = session.load(User.class, 1);
        System.out.println(user);

        transaction.commit();
        session.close();
        sessionFactory.close();
        //     :           session      
        //  session     
        // System.out.println(user);
    }

get load     
      :         
      :
        load           (    )
         load       ,   get        sql    
                      
                       
               sql        
                 hibernate     

削除
    @Test
    public void fun5() {
        Configuration configuration = new Configuration().configure();
        // sessionFactory     
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        Session session = sessionFactory.openSession();
        Transaction transaction = session.beginTransaction();

        //   
        // 1.           
        // User user = session.get(User.class, 1);
        // session.delete(user);
        // 2.          id   
        User user = new User();
        user.setId(2);
        session.delete(user);

        transaction.commit();
        session.close();
        sessionFactory.close();
    }

単純パッケージ
    public class HibernateUtils {
        //  sessionFactory      
        private static SessionFactory sessionFactory;
        static {
            //       
            Configuration configuration = new Configuration().configure();
            //   session  
            sessionFactory = configuration.buildSessionFactory();
        }
        //   session   
        public static Session getSession() {
            return sessionFactory.openSession();
        }
        //     session   
        public static Session getCurrentSession() {
            return sessionFactory.getCurrentSession();
        }
    }

HQLクエリーの使用
    @Test
    public void fun6() {
        Session session = HibernateUtils.getSession();
        Transaction transaction = session.beginTransaction();

        //              
        //Query query = session.createQuery("from com.lanou3g.User");
        Query query = session.createQuery("from User", User.class);
        //           
        List list = query.list();
        System.out.println(list);
        transaction.commit();
        session.close();
    }

SQL文クエリー
    @Test
    public void fun7() {
        Session session = HibernateUtils.getSession();
        Transaction transaction = session.beginTransaction();

        //     sql    
        NativeQuery nativeQuery = session.createNativeQuery("select * from user");
        List list = nativeQuery.list();
        // list                Object[]
        //   
        for (Object[] objects : list) {
            System.out.println(Arrays.toString(objects));
        }
        transaction.commit();
        session.close();
    }

hibernateプロファイル
プロファイルのデフォルト名hibernate.cfg.xml
    
    
    <hibernate-configuration>
        
        <session-factory>
            
            <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driverproperty>
            <property name="hibernate.connection.username">rootproperty>
            <property name="hibernate.connection.password">123456property>
            <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/a_hibernate_01property>
            
            <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialectproperty>
            
            <property name="hibernate.show_sql">trueproperty>
            
            <property name="hibernate.format_sql">trueproperty>
            
            <property name="hibernate.hbm2ddl.auto">updateproperty>
            
            
            <mapping resource="com/lanou3g/User.hbm.xml"/>
        session-factory>
    hibernate-configuration>

エンティティークラス
エンティティークラス構成に対応するマッピングファイルを作成する必要があります
1.          
    2.            
    3.xml  

User.hbm.xml
    
    

    
    
    <hibernate-mapping package="com.lanou3g">
        
        <class name="User" table="user">
            
            <id name="id" column="id">
                
                <generator class="native">generator>
            id>
            
            <property name="username" column="username">property>
            <property name="password" column="password">property>

            
        class>
    hibernate-mapping>