利用泛型抽象出来的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类即可