SSH三大框架整合,实现了泛型baseAction,泛型baseService,泛型baseDao
struts2的版本为2.3,hibernate为3.6.10,spring为3.2,用的数据库是mysql5.0
BaseAction抽取了公共代码,比如UserService,StudentService等,还有ModelDriver,request,session,application,parameter等,还有struts跟json整合的时候,写一个jsonMap或者jsonList
下面显示的是BaseDaoImpl部分的代码,这个类实现了公共代码的抽取,比如说session,实现了公共的CRUD
然后UserDaoImpl这个类继承了BaseDaoImpl,然后又实现了自身的业务逻辑代码,比如登陆注册等
BaseServiceImpl也是抽取了一些公共代码,比如说用户的UserDao、TeacherDao,StudentDao等,他们都是用spring来依赖注入,有一个很关键的就是,BaseDao是泛型的,因为类型不可知,所以是不能被注入的,所以只能通过反射来创建
package com.ssh.demo.dao.impl; |
03 | import java.lang.reflect.ParameterizedType; |
04 | import java.util.List; |
06 | import javax.annotation.Resource; |
08 | import org.hibernate.Session; |
09 | import org.hibernate.SessionFactory; |
10 | import org.springframework.context.annotation.Lazy; |
11 | import org.springframework.stereotype.Repository; |
13 | import com.ssh.demo.dao.BaseDao; |
18 | * @Title: BaseServiceImpl.java |
19 | * @Package cn.itcast.shop.service.impl |
20 | * @Description: TODO(用来抽取和实现公共的业务逻辑代码) |
22 | * @date 2014-4-27 上午9:39:19 |
25 | @Repository ( "baseDao" ) |
27 | @SuppressWarnings ( "unchecked" ) |
28 | public class BaseDaoImpl<T> implements BaseDao<T> { |
30 | private Class clazz= null ; |
33 | System.out.println( "当前子类对象:" + this ); |
34 | System.out.println( "获取当前this对象相应的类型:" + this .getClass()); |
35 | System.out.println( "获取当前类型的父类型信息(并不包括父类型参数信息):" + this .getClass().getSuperclass()); |
36 | System.out.println( "获取当前类型的父类型信息(包括父类型参数信息):" + this .getClass().getGenericSuperclass()); |
37 | ParameterizedType type=(ParameterizedType) this .getClass().getGenericSuperclass(); |
38 | clazz=(Class)type.getActualTypeArguments()[ 0 ]; |
39 | System.out.println(clazz); |
43 | private SessionFactory sessionFactory; |
45 | protected Session getSession() { |
46 | return sessionFactory.getCurrentSession(); |
50 | public void save(T t) { |
55 | public void delete( int id) { |
56 | String hql = "DELETE FROM " + clazz.getSimpleName() + " WHERE id=:id" ; |
57 | getSession().createQuery(hql) |
63 | public void update(T t) { |
65 | getSession().update(t); |
66 | } catch (Exception e) { |
72 | public List<T> query() { |
73 | String hql = "FROM " + clazz.getSimpleName(); |
74 | return getSession().createQuery(hql).list(); |
78 | public T get( int id) { |
79 | String hql = "FROM " + clazz.getSimpleName() + " WHERE id=:id" ; |
80 | return (T) getSession().createQuery(hql) |