本文以hibernate来操纵mysql数据库,所以在此之前必须确保mysql数据库已经正确安装好。。。
1、导hibernate包的核心jar包。。。
2、导hbm.xml文件
3、导hibernate.cfg.xml文件
以上三个文件为hibernate环境搭建的基础材料...其可以到hibernate的官网去下载.....在这里我为大家准备好了我自己常用的版本
4、编写pojo类(这里以Student类为例)
package com.njupt.pojo;
import java.io.Serializable;
public class Student implements Serializable{
private 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>