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