Hibernate学习笔记(2)----Hibernate中的增删改查(CRUD)

      

      一直以来都不会用Hibernate,是因为本人对数据库一直都很畏惧。在大学期间都没有接触过数据库,本人毕业有半年有余的时间吧,对Oracle,Sql Server (2005),MySql等数据库都只是会简单的增删改查。直到今天本人痛下决心要系统学习Hibernate时,才发现,切,原来Hibernate也是那么简单!


         Hibernate是ORM(Object/RelationMapping)框架,他的作用是:把对持久化对象的增删改查转换成对数据库的操作。通俗的说,以前我们对数据库的操作是通过sql语句进行,而现在我们通过操作持久化对象(POJO)来进行。接下来你就会体会到这句话的意思。        

        首先新建一个JavaBean文件Student.java,并写下注释,代码如下所示:


/**
 * @hibernate.class table="t_student"
 */
packagecom.yqsn.model;
 
importjava.io.Serializable;
 
public classStudent implements Serializable {
        
         private int id;
         private String name;
         private String sex;
         private String address;
        
         /**
          * @hibernate.id
          * generator-class="native"
          * @param id
          */
         public int getId() {
                   return id;
         }
        
         public void setId(int id) {
                   this.id = id;
         }
         /**
          * @hibernate.property
          * @param name
          */
         public String getName() {
                   return name;
         }
        
         public void setName(String name) {
                   this.name = name;
         }
         /**
          * @hibernate.property
          * @param sex
          */
         public String getSex() {
                   return sex;
         }
         public void setSex(String sex) {
                   this.sex = sex;
         }
         /**
          * @hibernate.property
          * @param address
          */
         public String getAddress() {
                   return address;
         }
         public void setAddress(String address){
                   this.address = address;
         }
        
}


 

       生成的映射文件Student.hbm.xml如下所示:


<?xml version="1.0"encoding="ISO-8859-1"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/HibernateMapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 
<hibernate-mapping>
  <class table="t_student"name="com.yqsn.model.Student">
    <id name="id">
      <generator class="native"/>
    </id>
    <property name="name"/>
    <property name="sex"/>
    <property name="address"/>
  </class>
</hibernate-mapping>



        由于在Hibernate中,我们会经常性的创建SessionFactory对象并开启事务,所以我们可以创建一个工具类专门用于创建SessionFactory对象和开启事务,代码如下所示:


 

packagecom.yqsn.util;
 
importorg.hibernate.HibernateException;
importorg.hibernate.Session;
importorg.hibernate.SessionFactory;
importorg.hibernate.Transaction;
importorg.hibernate.cfg.Configuration;
 
public classSessionFactoryUtil {
         private SessionFactory sessionFactory;
         /**
          *
          * method:生成SessionFactory
          * @return
          */
         public SessionFactory getSessionFactory(){
                   try {
                            Configurationcfg=new Configuration().configure();  //实例化Configuration并加载hibernate.cfg.xml文件
                            sessionFactory=cfg.buildSessionFactory();  //创建SessionFactory
                   } catch (HibernateExceptione) {
                            // TODOAuto-generated catch block
                            e.printStackTrace();
                   }
                   return sessionFactory;
         }
         /**
          *
          * method:生成Transaction对象
          * @return
          */
         public Transaction getTransaction(Session session){
                   return  session.beginTransaction();   //开始事务
         }
}


 

 

        下面写了一个类,用于HibernateDao.java,这个方法中定义了对Student对象的各种增删改查,代码如下所示:


package com.yqsn.dao;
 
import java.util.ArrayList;
import java.util.List;
 
import org.hibernate.Session;
import org.hibernate.Transaction;
 
import com.yqsn.model.Student;
import com.yqsn.util.SessionFactoryUtil;
 
public class HibernateDao {
    SessionFactoryUtil sessionFactoryUtil=new SessionFactoryUtil();
    Session session=null;
    Transaction transaction=null;
   
    /**
     * method:插入数据
     * @param student
     */
    public void insertData(Student student){
         session= sessionFactoryUtil.getSessionFactory().openSession();
         transaction=sessionFactoryUtil.getTransaction(session);
         session.save(student);
         transaction.commit();
         session.close();
       }
    /**
     * method:更新全部数据
     */
    public void updateData(Student student){
       session=sessionFactoryUtil.getSessionFactory().openSession();
       transaction=sessionFactoryUtil.getTransaction(session);
       session.update(student);
       transaction.commit();
       session.close();
    }
    /**
     * method:根据条件选择性更新数据
     */
    public void updateDataByCondition(int id,String data){
       session=sessionFactoryUtil.getSessionFactory().openSession();
       transaction=sessionFactoryUtil.getTransaction(session);
       Student student=(Student) session.get(Student.class, id);
       student.setSex(data);
       transaction.commit();
       session.close();
    }
    /**
     * method:查询数据
     */
    @SuppressWarnings("unchecked")
    public List<Student> queryList(){
       List<Student> students=new ArrayList<Student>();
       session=sessionFactoryUtil.getSessionFactory().openSession();
       transaction=sessionFactoryUtil.getTransaction(session);
       students=(session.createQuery("fromStudent").list());
       transaction.commit();
       session.close();
       return  students;
      
    }
    /**
     * method:删除数据
     */
    public void deleteData(int id){
       session=sessionFactoryUtil.getSessionFactory().openSession();
       transaction=sessionFactoryUtil.getTransaction(session);
       Student student=(Student) session.get(Student.class, id);
       session.delete(student);
       transaction.commit();
       session.close();
    }
}


 

       下面来看看怎么使用这几个方法!


      ● 增加数据


      新建一个类,里面包含一个主方法,代码如下所示:


package com.yqsn.test;
 
 
import java.util.ArrayList;
import java.util.List;
 
import com.yqsn.dao.HibernateDao;
import com.yqsn.model.Student;
 
 
public class HibernateCRUD {
  
   public static void main(String[] args) {
    HibernateDao hibernateDao=new HibernateDao();
    Student student1=new Student(1,"张三","男","美国");
    Student student2=new Student(2,"李四","女","英国");
    Student student3=new Student(3,"王五","男","中国");
    hibernateDao.insertData(student1);
hibernateDao.insertData(student2);
hibernateDao.insertData(student3);
}
 
}


 

      查询数据库可以看出数据顺利插入进去了:


 


       ● 修改数据


      我们在此类的main方法中使用update方法,代码如下所示:


Student student4=new Student();
    student4.setId(2);
    student4.setName("马六");
    student4.setAddress("北京");
hibernateDao.updateData(student4);


       查询数据库时会发现我们没有设置sex值时会将数据库中sex中此值设为null:




        因此这种更新在我们需要全部更新数据时可以这样。如果我们选择性更新数据这样肯定不行,最好使用下面这种方法将此行的sex值更换一下(也就是选择性更新数据的范例):


        hibernateDao.updateDataByCondition(2,"女");


        这个方法是将id与sex的值传递到方法中去,然后在方法在设置此值。查询一下数据库就发现此值的确更改了。


        ● 查询数据


       查询数据比较简单,在此方法我们中返回查询的结果集,然后在遍历输出,打印在控制台上,如下所示代码:


List<Student> list=newArrayList<Student>();
       list=hibernateDao.queryList();
       for(int i=0;i<list.size();i++){
          Student s=list.get(i);
         System.out.println("id:"+s.getId()+",name:"+s.getName()+",sex:"+s.getSex()+",address:"+s.getAddress());
      }


       运行时我们在MyEclipse的控制台上看见打印输出的数据:


 


        ● 删除数据


        删除数据时,我们需要把删除数据的id传递过去即可,代码如下所示:


         hibernateDao.deleteData(1);


         这样就完成了对数据的删除,当我们查询数据库时就会发现此条数据已不见了。




          由于本人只是详细说了方法的应用,并没有阐述各个方法的意思,所以还请见谅。其实,有一定Java基础的人都应该能看懂的。


         好了,会了这些也就能与数据开始打交道了,后面开始学习Hibernate的各种映射关系。


         这是本人学习的结果,欢迎转载,欢迎交流,但转载务必给出本文章的链接地址:http://blog.csdn.net/youqishini/article/details/7484390,谢谢~





你可能感兴趣的:(Hibernate,数据库,session,String,MyEclipse,import)