Base:基本的
Dao:Data Access Object 数据访问对象,也称为数据访问层
使用BaseDao的好处:我们在初学java的JDBC的部分我们应该是经常会写对数据的增删改查,比如说对学生的增删改查,或者是老师的增删改查等等。。。然而这时你会发现你所写的很多代码都是重复的,这时你就会考虑到代码的优化问题,以及常提到的高内聚低耦合这个概念。
public interface IBaseDao<T> {
public void save(T t);
public void delete(T t);
public void update(T t);
public T findById(Serializable id);
public List<T> findAll();
}
private Class<?> TClass;
@Resource
public void setMySessionFactory(SessionFactory sessionFactory){
super.setSessionFactory(sessionFactory);
}
public BaseDaoImpl() {
ParameterizedType parameterizedType = (ParameterizedType) this.getClass().getGenericSuperclass();
TClass = (Class<?>) parameterizedType.getActualTypeArguments()[0];
}
@Override
public void save(T t) {
this.getHibernateTemplate().save(t);
}
@Override
public void delete(T t) {
this.getHibernateTemplate().delete(t);
}
@Override
public void update(T t) {
this.getHibernateTemplate().update(t);
}
@Override
public T findById(Serializable id) {
return (T) this.getHibernateTemplate().get(TClass, id);
}
@Override
public List<T> findAll() {
String hql = "FROM " + TClass.getSimpleName();
return this.getHibernateTemplate().find(hql);
}
使用方式:
public class UserDaoImpl extends BaseDaoImpl<User> implements IUserDao {
@Override
public User findByUsernameAndPassword(String username, String password) {
String hql = "FROM User u WHERE u.password = ? AND u.username = ?";
List<User> list = this.getHibernateTemplate().find(hql,password,username);
if(!list.isEmpty() && list.size()>0){
return list.get(0);
}
return null;
}