使用Hibernate不是很久,自己在边学习的过程中发现如果要每增加一个Entity就要实现一个DAO和DaoImp的话会比较麻烦,所以自己就写了下面这两个类来实现了对所有Entity通用的操作。
首先写一个 Dao interface:
使用泛型,把需要使用Dao的Entity抽象为T;
然后写一个实现类 DaoImp.class:
当然没有完全泛型化,如find方法中的id.同时HibernateSessionFactory为一个sessionFactory的提供者。
下面是一个测试Entity
采用注解方法来注册Entity
下面类简单测试:
以上只是为自己测试学习之用,比较简单。后来查找网络发现已经有完整的模版DAO,仅供参考罢了.
有了这个方法,自己学习起来速度当然加快拉,有了更多的时间去看书,不被重复的代码占用时间。
首先写一个 Dao interface:
package com.cennavi.dao;
public interface Dao<T> {
public void add(T a );
public T find(Class<T> t,int id);
public void delete(T t);
public void update(T t);
}
使用泛型,把需要使用Dao的Entity抽象为T;
然后写一个实现类 DaoImp.class:
package com.cennavi.daoImp;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.cennavi.dao.Dao;
import com.cennavi.factory.HibernateSessionFactory;
public class DaoImp<T> implements Dao<T> {
public Session sf=HibernateSessionFactory.getSession();
@Override
public void add(T obj) {
Transaction ts=sf.beginTransaction();
ts.begin();
sf.save(obj);
ts.commit();
}
@Override
public void delete(T obj) {
Transaction ts=sf.beginTransaction();
ts.begin();
sf.delete(obj);
ts.commit();
}
@SuppressWarnings("unchecked")
@Override
public T find(Class<T> t,int id) {
Transaction ts=sf.beginTransaction();
T obj=(T)sf.get(t, id);
ts.commit();
return obj;
}
@Override
public void update(T obj) {
Transaction ts=sf.beginTransaction();
ts.begin();
sf.saveOrUpdate(obj);
ts.commit();
}
}
当然没有完全泛型化,如find方法中的id.同时HibernateSessionFactory为一个sessionFactory的提供者。
下面是一个测试Entity
package com.cennavi.pojo;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
@Entity
public class User implements Serializable {
private static final long serialVersionUID = 1186025505012915442L;
@Id
@GeneratedValue
private int id;
private String name;
private String snn;
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 getSnn() {
return snn;
}
public void setSnn(String snn) {
this.snn = snn;
}
}
采用注解方法来注册Entity
下面类简单测试:
package com.cennavi.client;
import com.cennavi.dao.Dao;
import com.cennavi.daoImp.DaoImp;
import com.cennavi.pojo.BigUser;
import com.cennavi.pojo.User;
public class UserDaoImpTest {
public static void main(String[] args) {
Dao<User> dao=new DaoImp<User>();
User user=new User();
user.setName("roan");
user.setSnn("1111111111111111111111");
dao.add(user);
}
}
以上只是为自己测试学习之用,比较简单。后来查找网络发现已经有完整的模版DAO,仅供参考罢了.
有了这个方法,自己学习起来速度当然加快拉,有了更多的时间去看书,不被重复的代码占用时间。