Hibernate实现对象的增删改查

   Hibernate是一个面向Java环境的对象/关系数据库映射工具,用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。

   Hibernate的优势:开源免费;轻量级封装;可拓展性;稳定发展。

   使用步骤:

1,新建Java/WEB工程.

    new-->Web Project -->填写工程名.

2,在工程上右键-->myEclipse-->Add Hibernate Capabilities --> 选择Hibernate版本号 --> Next --> 选择数据库类型 --> Next --> 选择JavaPackage --> Finish.(生成两个与Hibernate相关的文件:hibernate.cfg.xml,HibernateSessionFactory.java)

3,生成映射类和映射文件:

切换到DB,选择表,右键 --> Hibernate Reverse Engineering.. --> 选择需要生成的文件(实体类,映射文件,dao) --> Generation Id 选择native-->Finish.

4,自己写Dao方法.

代码如下,

接口类:BaseDao

package com.justplay.dao;
import java.util.List;
public interface BaseDao {
 public void save(Object o);
 public void update(Object o);
 public void delete(Object o);
 public Object get(Class clazz, long id);
 public List list(String hql);
}

实现类:BaseDaoImpl

package com.justplay.dao.impl;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.justplay.dao.BaseDao;
import com.justplay.util.HibernateSessionFactory;
public class BaseDaoImpl implements BaseDao {
 public void save(Object o) {
  Session session = HibernateSessionFactory.getSession();
  Transaction tr = session.beginTransaction();
  try {
   session.save(o);
   tr.commit();
  } catch (HibernateException e) {
   e.printStackTrace();
  }finally{
   HibernateSessionFactory.closeSession();
  }
 }
 public void update(Object o) {
  Session session = HibernateSessionFactory.getSession();
  Transaction tr = session.beginTransaction();
  try {
   session.update(o);
   tr.commit();
  } catch (HibernateException e) {
   e.printStackTrace();
  }finally{
   HibernateSessionFactory.closeSession();
  }
 }
 public void delete(Object o) {
  Session session = HibernateSessionFactory.getSession();
  Transaction tr = session.beginTransaction();
  try {
   session.delete(o);
   tr.commit();
  } catch (HibernateException e) {
   e.printStackTrace();
  }finally{
   HibernateSessionFactory.closeSession();
  }
 }
 public Object get(Class clazz, long id) {
  Session session = HibernateSessionFactory.getSession();
  try {
   return session.get(clazz, id);
  } catch (HibernateException e) {
   e.printStackTrace();
  }finally{
   HibernateSessionFactory.closeSession();
  }
  return null;
 }
 public List list(String hql) {
  Session session = HibernateSessionFactory.getSession();
  try {
   return session.createQuery(hql).list();
  } catch (HibernateException e) {
   e.printStackTrace();
  }finally{
   HibernateSessionFactory.closeSession();
  }
  return null;
 }
}

测试类TestBaseDaoImpl:

package test;
import java.util.List;
import junit.framework.TestCase;
import com.justplay.dao.BaseDao;
import com.justplay.po.User;
public class TestBaseDaoImpl extends TestCase {
 BaseDao dao;
 protected void setUp() throws Exception {
  dao = new com.justplay.dao.impl.BaseDaoImpl();
 }
 protected void tearDown() throws Exception {
  super.tearDown();
 }
 public void testSave() {
  User u = new User();
  u.setUsername("Tom");
  u.setPassword("1234");
  dao.save(u);
 }
 public void testUpdate() {
  User u = (User) dao.get(User.class, 2);
  u.setUsername("Lucy");
  u.setPassword("2345");
  dao.update(u);
 }
 public void testDelete() {
 }
 public void testGet() {
  System.out.println(dao.get(User.class, 1));
 }
 public void testList() {
  List list = dao.list("from User");
  System.out.println(list.size());
 }
}

给出实体类吧:

User

package com.justplay.po;
/**
 * User entity. @author MyEclipse Persistence Tools
 */
public class User implements java.io.Serializable {
 // Fields
 private static final long serialVersionUID = 1L;
 private Long id;
 private String password;
 private String username;
 // Constructors
 /** default constructor */
 public User() {
 }
 /** full constructor */
 public User(String password, String username) {
  this.password = password;
  this.username = username;
 }
 // Property accessors
 public Long getId() {
  return this.id;
 }
 public void setId(Long id) {
  this.id = id;
 }
 public String getPassword() {
  return this.password;
 }
 public void setPassword(String password) {
  this.password = password;
 }
 public String getUsername() {
  return this.username;
 }
 public void setUsername(String username) {
  this.username = username;
 }
 @Override
 public String toString() {// 方便测试
  return "User [id=" + id + ", password=" + password + ", username="
    + username + "]";
 }
}

如果觉得 BaseDao中的方法太多,可以换种方式: UserDaoImpl

package com.justplay.dao.impl;
import com.justplay.dao.UserDao;
import com.justplay.po.User;

// 继承BaseDaoImpl(可以不用继续写实现方法了),实现UserDao
 public class UserDaoImpl extends BaseDaoImpl implements UserDao {
 public void save(User u) {
  super.save(u);
 }
}

UserDao

package com.justplay.dao;
import com.justplay.po.User;
public interface UserDao {
 public void save(User u);
}

 测试类TestUserDaoImpl:

package test;
import junit.framework.TestCase;
import com.justplay.dao.UserDao;
import com.justplay.dao.impl.UserDaoImpl;
import com.justplay.po.User;
public class TestUserDaoImpl extends TestCase {
 UserDao dao;
 protected void setUp() throws Exception {
  dao = new UserDaoImpl();
 }
 protected void tearDown() throws Exception {
  super.tearDown();
 }
 public void testSaveUser() {
  User u = new User();
  u.setPassword("1234");
  u.setUsername("Jack");
  dao.save(u);
 }
}