最近实现了Spring2.5 Hibernate3.2 Hibernate Annotation 3.3 GenericDao 整合实现
用起来还是很顺手的
代码给出如下
java 代码
java 代码
- package cn.feigme.model;
- /**
- * @author Feigme
- *
- */
- import javax.persistence.Entity;
- import javax.persistence.GeneratedValue;
- import javax.persistence.GenerationType;
- import javax.persistence.Id;
- import javax.persistence.Table;
- /**
- * 用户.带jpa annotation简版配置.
- */
- @Entity
- @Table(name = "User")
- public class User {
- private Integer id;
- private String username;
- private String password;
- private String email;
- @Id
- @GeneratedValue(strategy = GenerationType.AUTO)
- public Integer getId() {
- return id;
- }
- public void setId(Integer id) {
- this.id = id;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- public String getUsername() {
- return username;
- }
- public void setUsername(String username) {
- this.username = username;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
Hibernate Annotation减少了XML文件,配制起来也非常方便
java 代码
- package cn.feigme.dao;
- import java.io.Serializable;
- public interface IGenericDao<T, PK extends Serializable> {
- PK save(T newInstance);
- T find(PK id);
- void update(T transientObject);
- void delete(T persistentObject);
- }
基于jdk5.0特性的 generic dao 可以减少很多dao重复编码
java 代码
- /**
- * GenericDaoHibernateImpl.java
- * cn.feigme.dao.impl
- * @author Feigme
- * 2007-8-26
- */
- package cn.feigme.dao.impl;
- import java.io.Serializable;
- import cn.feigme.dao.IGenericDao;
- /**
- * @author Feigme
- *
- */
- public abstract class GenericDaoHibernateImpl<T, PK extends Serializable> extends BaseDao implements IGenericDao<T,PK> {
- private Class<T> persistentClass;
- /*@SuppressWarnings("unchecked")
- public GenericDaoHibernateImpl(Class<T> t) {
- this.persistentClass = (Class<T>) ((ParameterizedType) getClass()
- .getGenericSuperclass()).getActualTypeArguments()[0];
- }*/
- public GenericDaoHibernateImpl(Class<T> t){
- this.persistentClass = t;
- }
- public Class<T> getPersistentClass() {
- return persistentClass;
- }
- public void delete(T persistentObject) {
- this.getHibernateTemplate().delete(persistentObject);
- }
- @SuppressWarnings("unchecked")
- public T find(PK id) {
- return (T) this.getHibernateTemplate().get(getPersistentClass(), id);
- }
- @SuppressWarnings("unchecked")
- public PK save(T newInstance) {
- return (PK)this.getHibernateTemplate().save(newInstance);
- }
- public void update(T transientObject) {
- this.getHibernateTemplate().update(transientObject);
- }
- }
generic dao的实现类,注意他的构造函数
java 代码
- /**
- * UserDao.java
- * cn.feigme.dao
- * @author Feigme
- * 2007-8-27
- */
- package cn.feigme.dao;
- import cn.feigme.model.User;
- /**
- * @author Feigme
- *
- */
- public interface UserDao extends IGenericDao<User,Long> {
- }
UserDao 就非常简单了,继承GenericDao就可以了,如果多的方法,直接写在这个dao中,
java 代码
- /**
- * UserDaoImpl.java
- * cn.feigme.dao.impl
- * @author Feigme
- * 2007-8-27
- */
- package cn.feigme.dao.impl;
- import cn.feigme.dao.UserDao;
- import cn.feigme.model.User;
- /**
- * @author Feigme
- *
- */
- public class UserDaoImpl extends GenericDaoHibernateImpl<User, Long > implements UserDao {
- /**
- * 必须要有空构造函数
- */
- public UserDaoImpl() {
- super(User.class);
- }
- }
这里有一点也是要特别注意的,至少我测试时出了些问题
java 代码
- package test;
- import org.junit.After;
- import org.junit.Before;
- import org.junit.Test;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
- import cn.feigme.dao.UserDao;
- import cn.feigme.model.User;
- public class Mytest {
- private UserDao dao;
- @Before
- public void setUp() throws Exception {
- String[] config = new String[] {
- "spring/applicationContext.xml",
- "spring/dataAccessContext-hibernate.xml",
- "spring/serviceContext.xml"};
- ApplicationContext ctx = new ClassPathXmlApplicationContext(config);
- dao = (UserDao) ctx.getBean("userDao");
- }
- @After
- public void tearDown() throws Exception {
- }
- @Test
- public void save() {
- User u = new User();
- u.setUsername("feigme is me");
- u.setEmail("feigme@163.com");
- dao.save(u);
- }
- }
这就是简单点的测试类,整合时一定要把 jar包找齐,网上别人提供的很多例子都是不完全的,所以还是要多看看
包中的文档啊!