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

来源:互联网 发布:淘宝靠谱iphone 编辑:程序博客网 时间:2024/06/06 09:35

      

      一直以来都不会用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,谢谢~