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); } }