yxhxj2006

          常用鏈接

          統(tǒng)計

          最新評論

          Hibernate實現(xiàn)CRUD操作

              
              最近學(xué)習(xí)hibernate有幾天了,基本學(xué)會簡單的增刪改查,現(xiàn)在就把實現(xiàn)分享如下:

              一: 首先需要建立數(shù)據(jù)庫,而我采用的mysql數(shù)據(jù)庫,為了更詳細(xì)hibernate的映射,我把數(shù)據(jù)庫表名和字段名與實體類的類名與屬性名取得不一致。
                     create table t_teacher(
                          id 
          int auto_increment,
                          t_username varchar(
          50),
                          t_age 
          int,
                          primary key(id)
                    );


              二:建立數(shù)據(jù)源連接:hibernate.cfg.xml
               
          <?xml version='1.0' encoding='utf-8'?>

          <!DOCTYPE hibernate-configuration PUBLIC

                  
          "-//Hibernate/Hibernate Configuration DTD 3.0//EN"

                  
          "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

           
          <hibernate-configuration>

               
          <session-factory>

                   
          <!-- Database connection settings -->

                  
          <property name="connection.driver_class">com.mysql.jdbc.Driver</property>

                  
          <property name="connection.url">jdbc:mysql://localhost:3306/hxj</property>

                  
          <property name="connection.username">root</property>

                  
          <property name="connection.password">root</property>

           

                  
          <!-- JDBC connection pool (use the built-in) -->

                 
          <!-- <property name="connection.pool_size">1</property> --> 

           

                  
          <!-- SQL dialect -->

                  
          <property name="dialect">org.hibernate.dialect.MySQLDialect</property>

           

                  
          <!-- Enable Hibernate's automatic session context management -->

                  
          <property name="current_session_context_class">thread</property>

           

                  
          <!-- Disable the second-level cache -->

                  
          <property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>

           

                  
          <!-- Echo all executed SQL to stdout -->

                  
          <property name="show_sql">true</property>

           

                  
          <!-- Drop and re-create the database schema on startup -->

                  
          <property name="hbm2ddl.auto">update</property>

           

                  
          <mapping class="com.wsw.hibernate.model.Teacher" /> 

                 

                
          <!-- <mapping resource="com/wsw/hibernate/model/Person.hbm.xml"/>-->

           

              
          </session-factory>

           

          </hibernate-configuration>



           三:建立實體類:Teacher,由于我采用注解方式進行配置,所以需要再實體類上面加上注解。
                 
           

          package com.wsw.hibernate.model;

           

          import java.io.Serializable;

          import javax.persistence.Column;

          import javax.persistence.Entity;

          import javax.persistence.GeneratedValue;

          import javax.persistence.Id;

          import javax.persistence.Table;

          import org.hibernate.annotations.GenericGenerator;

           

          @Entity

          @Table(name
          ="t_teacher")

          public class Teacher implements Serializable {

           

              
          private int id;

              

              
          private String username;

              

              
          private int age;

              

              @Id 

              @GenericGenerator(name 
          = "generator", strategy = "increment")

              @GeneratedValue(generator 
          = "generator")

              @Column(name 
          = "id"

              
          public int getId() {

                 
          return id;

              }


           

              
          public void setId(int id) {

                 
          this.id = id;

              }


              

              @Column(name
          ="t_username")

              
          public String getUsername() {

                 
          return username;

              }


              

              
          public void setUsername(String username) {

                 
          this.username = username;

              }


              

              @Column(name
          ="t_age")

              
          public int getAge() {

                 
          return age;

              }


              
          public void setAge(int age) {

                 
          this.age = age;

              }


          }



             

          四:創(chuàng)建獲取SessionFactory的單例類:


          package com.wsw.hibernate.util;

          import org.hibernate.SessionFactory;

          import org.hibernate.cfg.AnnotationConfiguration;

          import org.hibernate.cfg.Configuration;

          public class HibernateUtil {

              
          private static final SessionFactory sessionFactory;

              
          static {

                  
          try {

                      
          // Create the SessionFactory from hibernate.cfg.xml

                      
          //sessionFactory = new Configuration().configure().buildSessionFactory();

                      sessionFactory 
          = new AnnotationConfiguration().configure()

                              .buildSessionFactory();

                  }
           catch (Throwable ex) {

                      
          // Make sure you log the exception, as it might be swallowed

                      System.err.println(
          "Initial SessionFactory creation failed." + ex);

                      
          throw new ExceptionInInitializerError(ex);

                  }


              }


              
          public static SessionFactory getSessionFactory() {

                  
          return sessionFactory;

              }


          }

              
              五:實現(xiàn)hibernate的CURD操作:
              

          package com.wsw.hibernate.action;

           

          import java.util.List;

           

          import org.hibernate.Query;

          import org.hibernate.Session;

          import org.hibernate.Transaction;

           

          import com.wsw.hibernate.model.Person;

          import com.wsw.hibernate.model.Teacher;

          import com.wsw.hibernate.util.HibernateUtil;

           

          public class TeacherManager {

              
          public static void main(String[] args) {

                  
          //selectTeacher_By_Load(1);

                  insertTeacher();

                  
          //deleteTeacher();

                  selectAll();


                  
          //updateTeacher();

                  
          //insertTeacher();

                  
          //createAndStoreTeacher();

                  
          //select_All_By_Get(2);

                  
          //select_AllPerson_By_Get();

                  
          //annotation();

                  
          //HibernateUtil.getSessionFactory().close();

              }


              
          /**

               * 插入記錄

               
          */


              
          private static void insertTeacher() {

            

                  Session session 
          = HibernateUtil.getSessionFactory().getCurrentSession();

                  session.beginTransaction();    

                  Teacher teacher 
          = new Teacher();

                  teacher.setUsername(
          "aaa");

                  teacher.setAge(
          25);

                  session.save(teacher);

                  session.getTransaction().commit();

                  System.out.println(
          "insert teacher successfully");

                  

              }


              

              
          /**

               * 刪除記錄操作

               
          */


              
          private static void deleteTeacher() {

                  
          int count;

                  Session session 
          = HibernateUtil.getSessionFactory().getCurrentSession();

                  session.beginTransaction();

                  Query query 
          = session.createQuery("delete Teacher where id=?");     

                  query.setParameter(
          01);

                  count 
          = query.executeUpdate();                          // 刪除記錄采用Update方式

                  session.getTransaction().commit();

                  System.out.println(
          "刪除" + count + "條teacher記錄");

              }


              

              
          /**

               * 根據(jù)id采用load方式查詢

               * 
          @param id

               
          */


              
          private static void selectTeacher_By_Load(int id) {

                  Session session 
          = HibernateUtil.getSessionFactory().openSession();

                  
          // load獲取值不能采用這種方式獲取session對象,因為load采用延遲加載/懶加載。而getCurrentSession()獲取session時會自動關(guān)閉session對象,

                  
          // 所以會導(dǎo)致對象沒有保存到內(nèi)存中,然后你使用該對象了,導(dǎo)致該:org.hibernate.LazyInitializationException異常。

                  
          //Session session = HibernateUtil.getSessionFactory().getCurrentSession(); 

                  session.beginTransaction(); 

                  Teacher teacher 
          = (Teacher)session.load(Teacher.class, id);   // 只能是主鍵id獲取對象值,不能以其他的表字段名獲取對象值,否則,只能用HQL語句查詢。

                  System.out.println(
          "load方式commit之前====>Id:" + teacher.getId() + " UserName:" + teacher.getUsername() + " Age:" + teacher.getAge());

                  session.getTransaction().commit();

                  System.out.println(
          "load方式commit之后====》Id:" + teacher.getId() + " UserName:" + teacher.getUsername() + " Age:" + teacher.getAge());

                  session.close(); 
          // load獲取值session方式需要手動關(guān)閉session對象,而通過getCurrentSession()則會自動關(guān)閉session對象

              }


              

              
          /**

               * 根據(jù)id采用get方式查詢

               * 
          @param id

               
          */


              
          private static void selectTeacher_By_Get(int id) {

                  Session session 
          = HibernateUtil.getSessionFactory().getCurrentSession();

                  session.beginTransaction(); 

                  Teacher teacher 
          = (Teacher)session.get(Teacher.class, id);

                  System.out.println(
          "get方式commit之前====>Id:" + teacher.getId() + " UserName:" + teacher.getUsername() + " Age:" + teacher.getAge());

                  session.getTransaction().commit();

                  System.out.println(
          "get方式commit之后====>Id:" + teacher.getId() + " UserName:" + teacher.getUsername() + " Age:" + teacher.getAge());

              }


              

              
          /**

               * 按條件查詢記錄

               
          */


              
          private static void selectAll_By_Request() {

                  Session session 
          = HibernateUtil.getSessionFactory().getCurrentSession();

                  session.beginTransaction();

                  Query query 
          = session.createQuery("from Teacher where id=? and age=:tage"); //在條件語句中,可以用?和:兩種方式。兩者方式各有不同。

                  query.setParameter(
          02);                // 從0開始,而不是從1開始。采用?方式。

                  
          //query.setInteger(0, 2);                // 上面的query.setParameter(0, 2)也可以用query.setInteger(0, 2)代替,效果一樣 

                  query.setParameter(
          "tage"27);          // 采用:方式。前面參數(shù)名與之前的:后面的參數(shù)名必須一致。

                  
          //query.setInteger("tage", 27);          // 上面的query.setParameter("tage", 27)也可以用query.setInteger("tage", 27)代替,效果一樣 

                  List
          <Teacher> listteacher = (List<Teacher>)query.list();

                  printList(listteacher);

              }


              

              
          /**

               * 查詢?nèi)坑涗?br />
               
          */


              
          private static void selectAll() {

                  Session session 
          = HibernateUtil.getSessionFactory().getCurrentSession();

                  session.beginTransaction();

                  Query query 
          = session.createQuery("from Teacher");       

                  List
          <Teacher> listteacher = (List<Teacher>)query.list();

                  printList(listteacher);

              }


              

              
          /**

               * 更新操作

               
          */


              
          private static void updateTeacher() {

                  
          int count;

                  Session session 
          = HibernateUtil.getSessionFactory().getCurrentSession();

                  session.beginTransaction();

                  Query query
          = session.createQuery("update Teacher set t_username='何小景' where id=?");

                  query.setInteger(
          02);

                  count 
          = query.executeUpdate();

                  session.getTransaction().commit();

                  System.out.println(
          "更新" + count +"條記錄");

              }


              
          /**

               * 打印List<Person>對象集合

               * 
          @param listteacher

               
          */


              
          private static void printList(List<Teacher> listteacher){

                  
          for(Teacher teacher : listteacher) {

                      System.out.println(
          "Id:" + teacher.getId() + " UserName:" + teacher.getUsername() + " Age:" + teacher.getAge());

                  }


              }


          }


               

          posted on 2012-06-30 10:29 奮斗成就男人 閱讀(2950) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 库伦旗| 松阳县| 永善县| 瓦房店市| 阳山县| 永定县| 普兰县| 罗城| 商丘市| 澄城县| 宣武区| 嘉兴市| 长春市| 桐柏县| 钟祥市| 永平县| 榆中县| 蒲城县| 应城市| 遂昌县| 富川| 璧山县| 保康县| 商都县| 安西县| 田东县| 郯城县| 长乐市| 双柏县| 奉贤区| 福贡县| 绥滨县| 宁南县| 高平市| 福安市| 大竹县| 湟源县| 宝坻区| 云霄县| 肥城市| 嘉鱼县|