很简单的ssh三层架构,一个dao泛型基类,一个service泛型基类,service基类实现基本的findAll操作,具体的业务service 类集成service基本,并给基类传递泛型,似的具体业务类无需编写findAll方法,现在的问题是,好像具体的业务service无法把泛型传到 dao基类中, 在此感谢
代码:
dao基类
Java 代码
1. @Repository
2. public abstract class BaseDao<T extends Serializable> {
3. protected Class<T> clazz;
4.
5. protected SessionFactory sessionFactory;
6.
7. protected BaseDao() {
8. this.clazz = ReflectionUtils.getSuperClassGenricType(getClass());
9. }
10.
11. /**
12. * 获取sessionFactory
13. *
14. * @return sessionFactory
15. */
16. public SessionFactory getSessionFactory() {
17. return sessionFactory;
18. }
19.
20. /**
21. * 采用@Autowired按类型注入SessionFactory,当有多个SesionFactory的时候Override本函数.
22. */
23. @Autowired
24. public void setSessionFactory(final SessionFactory sessionFactory) {
25. this.sessionFactory = sessionFactory;
26. }
27.
28. /**
29. * 取得当前Session.
30. */
31. public Session getSession() {
32. return sessionFactory.getCurrentSession();
33. }
34.
35. public List<T> findAll() {
36. return createCriteria().list();
37. }
38. public Criteria createCriteria(final Criterion... criterions) {
39. Criteria criteria = getSession().createCriteria(clazz);
40. for (Criterion c : criterions) {
41. criteria.add(c);
42. }
43. return criteria;
44.
45. }
46. }
@Repository
public abstract class BaseDao<T extends Serializable> {
protected Class<T> clazz;
protected SessionFactory sessionFactory;
protected BaseDao() {
this.clazz = ReflectionUtils.getSuperClassGenricType(getClass());
}
/**
* 获取sessionFactory
*
* @return sessionFactory
*/
public SessionFactory getSessionFactory() {
return sessionFactory;
}
/**
* 采用@Autowired按类型注入SessionFactory,当有多个SesionFactory的时候Override本函数.
*/
@Autowired
public void setSessionFactory(final SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
/**
* 取得当前Session.
*/
public Session getSession() {
return sessionFactory.getCurrentSession();
}
public List<T> findAll() {
return createCriteria().list();
}
public Criteria createCriteria(final Criterion... criterions) {
Criteria criteria = getSession().createCriteria(clazz);
for (Criterion c : criterions) {
criteria.add(c);
}
return criteria;
}
}
service 基类
Java 代码
1. public class BaseManager<T extends Serializable> {
2.
3. @Resource
4. private BaseDao<T> baseDao;
5.
6. public List<T> findAll() {
7. return baseDao.findAll();
8. }
9. }
public class BaseManager<T extends Serializable> {
@Resource
private BaseDao<T> baseDao;
public List<T> findAll() {
return baseDao.findAll();
}
}
具体业务类
Java 代码
1. @Service
2. public class TablsService extends BaseManager<Tabls>{
3.
4. }
@Service
public class TablsService extends BaseManager<Tabls>{
}
测试类
Java 代码
1. public class TablsServiceTest extends AbstractTestBean {
2.
3. @Resource
4. private TablsService tablsService;
5.
6. @Test
7. public void listTest() {
8.
9. System.out.println(tablsService.findAll());
10. }
11. } |
|