springmvc+hibernate泛型抽取基礎Dao與Service

利用泛型抽象出來的dao和service,一開根據網上方法一直想獲取泛型T,後來發現是不可行的,需要傳遞你的pojo.class類

package com.xll.dao;
import java.util.List;
public interface  BasicDao<T> {
    public abstract void save(T t);    
    public abstract void update(T t);    
    public abstract void delete(int id);    
    public abstract T get(int id);   
    public abstract List<T> queryAllRecord();
    public abstract Long getRecordAmount();
}
package com.xll.dao.impl;
import java.util.List;
import javax.annotation.Resource;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.xll.dao.BasicDao;
@Lazy(true)
@Transactional
@Repository("basicDao")
public class BasicDaoImpl<T> implements BasicDao<T> {
    @Resource
    protected SessionFactory sessionFactory;
    /** clazz中存儲了當前操作的類型,即泛型T */
    private Class<?> clazz;
    public BasicDaoImpl(Class<?> clazz) {
        this.clazz = clazz;
    }
    @Override
    public void save(T t) {
        Session session = sessionFactory.getCurrentSession();
        session.save(t);
    }
    @Override
    public void update(T t) {
        Session session = sessionFactory.getCurrentSession();
        session.update(t);
        session.flush();
    }
    @Override
    public void delete(int id) {
        Session session = sessionFactory.getCurrentSession();
        String hql = "delete from " + clazz.getSimpleName() + " where id = ?";
        session.createQuery(hql).setInteger(0, id);
    }
    @Override
    public T get(int id) {
        Session session = sessionFactory.getCurrentSession();
        String hql = "from " + clazz.getSimpleName() + " where id = ?";
        return (T) session.createQuery(hql).setInteger(0, id).uniqueResult();
    }
    @Override
    public List<T> queryAllRecord() {
        Session session = sessionFactory.getCurrentSession();
        String hql = "from " + clazz.getSimpleName();
        return session.createQuery(hql).list();
    }
    @Override
    public Long getRecordAmount() {
        Session session = sessionFactory.getCurrentSession();
        String hql = "select count(*) from " + clazz.getSimpleName();
        return (Long) session.createQuery(hql).uniqueResult();
    }
}
package com.xll.service;
import java.util.List;
public interface BasicService<T> {   
    public abstract void save(T t);   
    public abstract void update(T t);    
    public abstract void delete(int id);    
    public abstract T get(int id);   
    public abstract List<T> queryAllRecord();
    public abstract Long getRecordAmount();
}
package com.xll.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import com.xll.dao.BasicDao;
import com.xll.service.BasicService;
@Lazy(true)
@Service("basicSerivce")
public class BasicServiceImpl<T> implements BasicService<T> {
    @Lazy(true)
    @Autowired
    private BasicDao<T> basicDaoImpl;
    @Override
    public void save(T t) {
        basicDaoImpl.save(t);
    }
    @Override
    public void update(T t) {
        basicDaoImpl.update(t);
    }
    @Override
    public void delete(int id) {
    }
    @Override
    public T get(int id) {
        return null;
    }
    @Override
    public List<T> queryAllRecord() {
        return basicDaoImpl.queryAllRecord();
    }
    @Override
    public Long getRecordAmount() {
        return basicDaoImpl.getRecordAmount();
    }
}

*當實現或者時,傳遞你要pojo類即可

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章