hibernate的环境搭建

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

本文以hibernate来操纵mysql数据库,所以在此之前必须确保mysql数据库已经正确安装好。。。


1、导hibernate包的核心jar包。。。

2、导hbm.xml文件

3、导hibernate.cfg.xml文件

以上三个文件为hibernate环境搭建的基础材料...其可以到hibernate的官网去下载.....在这里我为大家准备好了我自己常用的版本http://download.csdn.net/detail/caihongshijie6/6584855

4、编写pojo类(这里以Student类为例)


package com.njupt.pojo;import java.io.Serializable;public class Student implements Serializableprivate int id; private String name; private String pwd; private int age; public int getId() {  return id; } public void setId(int id) {  this.id = id; } public String getName() {  return name; } public void setName(String name) {  this.name = name; } public String getPwd() {  return pwd; } public void setPwd(String pwd) {  this.pwd = pwd; } public int getAge() {  return age; } public void setAge(int age) {  this.age = age; }   }


5、HibernateUtil类

package com.njupt.util;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.cfg.Configuration;public class HibernateUtil {// 创建SessionFactory private static SessionFactory sessionFactory;// 使用静态代码块(只创建一次)来创建sessionFactory static{//  读取配置hibernate.cfg.xml  try {   Configuration configuration =     new Configuration().configure("hibernate.cfg.xml");   sessionFactory = configuration.buildSessionFactory();  } catch (Exception e) {   e.printStackTrace();  } }// 获得session public static Session getSession(){  return sessionFactory.openSession(); }// 关闭session,session总是默认保存数据(save(),get(),load()...)// 很可能出现内存泄露 public static void close(Session session){  if(session!=null){   if(session.isOpen()){// null.isOpen    session.close();   }  } } }


6、进行测试

编写测试类SessionTest

package com.njupt.util;import java.util.Iterator;import java.util.List;import org.hibernate.Hibernate;import org.hibernate.HibernateException;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.Transaction;import org.junit.Test;import com.njupt.pojo.Student;import com.njupt.util.HibernateUtil;public class SessionTest // public void testSave(){ // // System.out.println("保存"); // String str =null; // System.out.println(str.length()); // } // 1 保存操作 @Test public void testSave() {  Session session = null;  Transaction transaction = null;  try {   // 首先获得session   session = HibernateUtil.getSession();   // 获得Transaction   transaction = session.getTransaction();   // 开启事务   transaction.begin();   // 创建person对象   Student person = new Student();   person.setName("zzt_love_hjd");   person.setAge(21);   person.setPwd("123321");   // 使用session保存person对象   session.save(person);   // 提交事务   transaction.commit();  } catch (Exception e) {   // 打印异常信息   e.printStackTrace();   // 回滚   transaction.rollback();  } finally {   // 关闭session   HibernateUtil.close(session);  } } // 查询id=2的person对象 @Test public void testGet1() {  Session session = null;  // 查询操作,对数据库的表没有任何修改,不用开启事务  try {   session = HibernateUtil.getSession();   // session.get()   Student person = (Student) session.get(Student.class, 3);   System.out.println("-------------------------------");   System.out.println(person.getId() + "," + person.getName());  } catch (Exception e) {   // TODO: handle exception   e.printStackTrace();  } finally {   HibernateUtil.close(session);  } } // 使用load加载对象 @Test public void testLoad1() {  Session session = null;  try {   session = HibernateUtil.getSession();   // 没有发出sql语句   // load():不会立刻去查询数据库,hibernate会返回一个代理对象   // 暂时代替person对象(避免对数据库过于频繁的访问,   // 提高系统性能)   // hibernate 返回代理对象是cglib动态代理   // cglib返回是目标对象(Person)的子类对象   Student person = (Student) session.load(Student.class, 1);   System.out.println("-------------------");   // 真正需要访问数据的时候   // 发出了sql语句,person发出的sql语句   // hibernate返回的代理对象发出对应sql语句   System.out.println(person.getName());  } catch (Exception e) {   // TODO: handle exception   e.printStackTrace();  } finally {   HibernateUtil.close(session);  } } // get()查询的数据,在数据库中不存在 // 返回null @Test public void testGet2() {  Session session = null;  try {   session = HibernateUtil.getSession();   Student person = (Student) session.get(Student.class, 2);   System.out.println(person);  } catch (Exception e) {   // TODO: handle exception   e.printStackTrace();  } finally {   HibernateUtil.close(session);  } } // load()查询数据库中没有的数据 // 如果数据库中没有与之对应的数据,则抛出 // ObjectNotFoundException // 常见异常:SQLException / HibernateException / NestableRuntimeException @Test public void testLoad2() {  Session session = null;  try {   session = HibernateUtil.getSession();   Student person = (Student) session.load(Student.class, 2);   System.out.println(person);  } catch (Exception e) {   // TODO: handle exception   e.printStackTrace();  } finally {   HibernateUtil.close(session);  } } // load:需要的时候才发出sql语句,去数据库中真实的查询 // 这叫做延迟加载/懒加载(预习) // proxy:代理 // org.hibernate.LazyInitializationException: // could not initialize proxy - no Session // hibernate.load()返回的代理对象的生命周期跟session保持一致 // 关闭session,代理对象也不能使用了,不能发出sql语句 @Test public void testLoad3() {  Session session = null;  Student person = null;  try {   session = HibernateUtil.getSession();   person = (Student) session.load(Student.class, 1);  } catch (Exception e) {   e.printStackTrace();  } finally {   HibernateUtil.close(session);  }  System.out.println(person.getName()); } // 修改操作 @Test public void testUpdate() {  Session session = null;  try {   session = HibernateUtil.getSession();   session.beginTransaction();// 直接开启一个事务   Student person = (Student) session.get(Student.class, 1);   person.setName("cangsong");   person.setAge(30);   session.update(person);   // getTransaction().commit();获得开启的事务,并提交   session.getTransaction().commit();  } catch (Exception e) {   // TODO: handle exception   e.printStackTrace();   // session.getTransaction().rollback();获得开启的事务,并回滚   session.getTransaction().rollback();  } finally {   HibernateUtil.close(session);  } } // 删除操作 @Test public void testDelete() {  Session session = null;  try {   session = HibernateUtil.getSession();   session.beginTransaction();   Student person = (Student) session.get(Student.class, 2);   session.delete(person);   session.getTransaction().commit();  } catch (Exception e) {   // TODO: handle exception   e.printStackTrace();   session.getTransaction().rollback();  } finally {   HibernateUtil.close(session);  } } // 查询t_person中所有的对象 @Test public void testQuery3() {  Session session = null;  try {   session = HibernateUtil.getSession();   // createQuery("hql语句"):用session来创建一个Query对象   // 封装hql语句   Query query = session.createQuery("from Person");   // 使用query做查询操作,返回的结果保存到了一个list集合当中   List list = query.list();   // 对集合的遍历   Iterator<Student> iterator = list.iterator();   while (iterator.hasNext()) {    Student person = iterator.next();    System.out.println(person.getId() + "," + person.getName());   }  } catch (Exception e) {   // TODO: handle exception   e.printStackTrace();  } finally {   HibernateUtil.close(session);  } }}


经过以上的6步这时候,你便能在通过hibernate来操作数据库了................................

!!!!特别提醒:要想使用hibernate的自动建表功能,可以在hibernate.cfg.xml中按如下配置:

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



           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/sfhinsc/article/details/84060795