SSH_Annotaction高配架构

本文详细介绍了SSH_Annotaction高配架构的底层Dao封装、Model类设计、Service层实现及用户操作流程,旨在提供一种高效、简洁的架构解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SSH_Annotaction高配架构,综合我多年的架构运用,以及个人理论加强,加以配置改良,实用性应该是比较方便,快捷的了,如果有再厉害的,我就五体投地了~偷笑

转正题:

首先上底层Dao封装:

BaseDao

package com.zwd.dao;

import java.io.Serializable;
import java.util.List;

import com.zwd.utils.PageUtil;

public interface BaseDao<E> {
	public Long saveEntity(E e);

	public void updateEntity(E e);

	public void deleteEntity(E e);
	
	public void deleteEntityById(Serializable id);

	public E loadEntity(final Class<E> class1, final Serializable id);

	public E loadEntityById(Serializable id);

	public List<E> loadListEntities(PageUtil page);
	
	public List<E> loadListAllEntities();
}

PS:除了最基本的CRUD,还封装了一切常用的分页,批量层接口

BaseDaoImpl:

package com.zwd.dao.impl;

import java.io.Serializable;
import java.lang.reflect.ParameterizedType;
import java.sql.SQLException;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.zwd.dao.BaseDao;
import com.zwd.utils.PageUtil;

public class BaseDaoImpl<E> extends HibernateDaoSupport implements BaseDao<E> {

	private Class<E> cls;

	public BaseDaoImpl() {
		// 就是要获取E的真实数据类型
		cls = (Class<E>) ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];

	}

	public Long saveEntity(E e) {
		return (Long) this.getHibernateTemplate().save(e);
	}

	public void updateEntity(E e) {
		this.getHibernateTemplate().update(e);

	}

	public void deleteEntity(E e) {
		this.getHibernateTemplate().delete(e);

	}

	public E loadEntity(final Class<E> class1, final Serializable id) {
		return this.getHibernateTemplate().get(class1, id);

	}

	public E loadEntityById(Serializable id) {
		return (E) loadEntity(cls, id);
	}

	@SuppressWarnings("unchecked")
	public List<E> loadListEntities(final PageUtil page) {
		return this.getHibernateTemplate().executeFind(new HibernateCallback<List<E>>() {
			public List<E> doInHibernate(Session session) throws HibernateException, SQLException {
				Long totalL = (Long) session.createQuery("select count(*) from " + page.getModelName()).uniqueResult();
				page.setTotalCount(totalL.intValue());
				return session.createQuery("from " + page.getModelName()+" a order by a.id desc").setFirstResult((page.getPageNow() - 1) * page.getPageSize()).setMaxResults(page.getPageSize()).list();
			}
		});
	}

	public void deleteEntityById(Serializable id) {
		deleteEntity(loadEntityById(id));
	}
	
	public List<E> loadListAllEntities() {
		return this.getHibernateTemplate().executeFind(new HibernateCallback<List<E>>() {
			public List<E> doInHibernate(Session session) throws HibernateException, SQLException {
				return session.createQuery("from " + cls.getName() +" a order by a.id desc").list();
			}
		});
	}

}

BaseService:

package com.zwd.service;

import java.io.Serializable;
import java.util.List;

import com.zwd.utils.PageUtil;

public interface BaseService<E> {
	public Long saveEntity(E e);

	public void updateEntity(E e);

	public void deleteEntity(E e);

	public void deleteEntityById(Serializable id);

	public E loadEntity(final Class<E> class1, final Serializable id);

	public E loadEntityById(Serializable id);

	public List<E> loadListEntities(PageUtil page);
	
	public List<E> loadListAllEntities();
}

BaseServiceImpl:

package com.zwd.service.impl;

import java.io.Serializable;
import java.util.List;

import com.zwd.dao.BaseDao;
import com.zwd.service.BaseService;
import com.zwd.utils.PageUtil;

public class BaseServiceImpl<E> implements BaseService<E>{
	protected BaseDao<E> baseDao;
		
	public Long saveEntity(E e) {
		return baseDao.saveEntity(e);
	}

	public void updateEntity(E e) {
		baseDao.updateEntity(e);
	}

	public void deleteEntity(E e) {
		baseDao.deleteEntity(e);
	}

	public void deleteEntityById(Serializable id) {
		baseDao.deleteEntityById(id);
	}

	public E loadEntity(Class<E> class1, Serializable id) {
		return baseDao.loadEntity(class1, id);
	}

	public E loadEntityById(Serializable id) {
		return baseDao.loadEntityById(id);
	}

	public List<E> loadListEntities(PageUtil page) {
		return baseDao.loadListEntities(page);
	}

	public List<E> loadListAllEntities() {
		return baseDao.loadListAllEntities();
	}
	
	public BaseDao<E> getBaseDao() {
		return baseDao;
	}

	public void setBaseDao(BaseDao<E> baseDao) {
		this.baseDao = baseDao;
	}
	
	
}
PS:底层封装无非就是为子类服务的,不一定要复杂,相反越简单越好,不累赘,此乃精华之所在
--------------------------------------------------------------------------- 华丽的分界线 -------------------------------------------------------------------------------------------------------------------

以下便是演员登场:

Model:(这个以User为例子)

package com.zwd.model;

import javax.persistence.Entity;

@Entity
public class User extends BaseModel {
	private String name;
	private String password;
	private String depart;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDepart() {
		return depart;
	}
	public void setDepart(String depart) {
		this.depart = depart;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
}

PS:这个我每个Model都继承BaseModel,其实实际开发可以不做,这个我也只是尝试运用Hibernate的其中一种建表模式而已(纯个人实践)

UserAction:

package com.zwd.action;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;

import com.google.gson.Gson;
import com.opensymphony.xwork2.ActionSupport;
import com.zwd.model.User;
import com.zwd.service.UserService;
import com.zwd.utils.PageUtil;
import com.zwd.utils.UserUtil;

@Controller("UserAction")
public class UserAction extends ActionSupport {
	@Autowired
	private UserService userService;
	private List<User> userList;
	private User user;
	private long userId;
	private PageUtil page;
	private String test;

	public String userIndex() {
		if (UserUtil.isLogin()) {
			page.setModelName("User");
			if (page.getPageNow() == 0)
				page.setPageNow(1);
			if (page.getPageSize() == 0)
				page.setPageSize(20);
			userList = userService.loadListEntities(page);
			return SUCCESS;
		}
		return LOGIN;
	}

	public String addUser() throws Exception {
		if (UserUtil.isLogin()) {
			user.setCreateTime(new Date());
			user.setUpdateTime(new Date());
			Long resultId = userService.saveEntity(user);
			if (null != resultId && resultId > 0) {
				HttpServletResponse response = ServletActionContext.getResponse();
				response.setCharacterEncoding("UTF-8");
				PrintWriter pw = response.getWriter();
				pw.write(resultId.toString());
				pw.flush();
				pw.close();
			}
		}
		return null;
	}

	public String loadUser() throws IOException {
		if (UserUtil.isLogin()) {
			userList = userService.loadListAllEntities();
			Gson gson = new Gson();
			String json = gson.toJson(userList);
			HttpServletResponse response = ServletActionContext.getResponse();
			response.setCharacterEncoding("UTF-8");
			PrintWriter pw = response.getWriter();
			pw.write(json);
			pw.flush();
			pw.close();
		}
		return null;
	}

	public String loginUser() {
		try{
			User u = userService.loginUser(user);
		}catch (Exception e) {
            e.printStackTrace();
        }
		/*HttpSession session = ServletActionContext.getRequest().getSession();
		if (null != u) {
			session.setAttribute("user", u);
			return SUCCESS;
		}*/
		test = "账号或密码不正确!";
		return LOGIN;
	}
	
	public String logoutUser() {
		UserUtil.logout();
		return SUCCESS;
	}

	public String delUser() {
		if (UserUtil.isLogin()) {
			userService.deleteEntityById(userId);
			return SUCCESS;
		}
		return LOGIN;
	}
	
	public String UnitUser() {
		User user = new User();
		user.setName("admin");
		user.setPassword("123456");
		userService.saveEntity(user);
		user.setName("caiwu");
		user.setPassword("123456");
		userService.saveEntity(user);
		return SUCCESS;
	}

	public String updateUser() {
		if (UserUtil.isLogin()) {
			user.setUpdateTime(new Date());
			userService.updateEntity(user);
			return SUCCESS;
		}
		return LOGIN;
	}

	//省略get set
}

UserService:(当然继承BaseService,并自己拥有独立的接口封装)

package com.zwd.service;

import com.zwd.model.User;


public interface UserService extends BaseService<User>{
	public User loginUser(User u);
}

UserServiceImpl:(当然继承BaseService,实现自己拥有独立的接口封装)

package com.zwd.service.impl;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.zwd.dao.BaseDao;
import com.zwd.dao.ProductDao;
import com.zwd.dao.UserDao;
import com.zwd.model.Product;
import com.zwd.model.User;
import com.zwd.service.UserService;

@Service("userService")
public class UserServiceImpl extends BaseServiceImpl<User> implements UserService {

	/** 使用其他dao *//*
	private BaseDao<Product> productDao;

	@Resource(name = "productDao")
	public void setProductDao(BaseDao<Product> productDao) {
		this.productDao = productDao;
	}*/

	@Resource
	private UserDao userDao;
	@Resource
	private ProductDao productDao;

	public User loginUser(User u) {
		try {

			Product p = new Product();
			p.setName("234234");
			productDao.saveEntity(p);
			//int i = 2 / 0;
			User user = new User();
			user.setName("5tttttttttt");
			userDao.saveEntity(user);

		} catch (Exception e) {
			// 如果注释掉throw new RuntimeException,那么事务将不能回滚,因为spring捕捉不到Exception  
            // 解决办法,去掉try catch,或者在cache中抛出异常以便spring捕获  
            throw new RuntimeException("运行时出错!");   
		}
		return userDao.loginUser(u);

	}

}

UserDao:(当然继承BaseDao,并自己拥有独立的接口封装)

package com.zwd.dao;

import com.zwd.model.User;
public interface UserDao extends BaseDao<User>{
	public User loginUser(User u);
}

UserDaoImpl:

package com.zwd.dao.impl;
import java.sql.SQLException;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.stereotype.Repository;

import com.zwd.dao.UserDao;
import com.zwd.model.User;

@Repository(value = "userDao") 
public class UserDaoImpl extends BaseDaoImpl<User> implements UserDao {
	public User loginUser(final User user) {
		return this.getHibernateTemplate().execute(new HibernateCallback<User>() {
			public User doInHibernate(Session session) throws HibernateException, SQLException {
				Query query = session.createQuery("from User u where u.name ='" + user.getName() + "'and u.password ='" + user.getPassword() + "'");
				User u = (User) query.uniqueResult();
				return u;
			}
		});
	}
}

以上是基本的架构,其他分页什么都封装就不一一展示了,我会上传我的整个项目的,等资源出来,我在贴上地址

还有struts.xml,applicationContext.xml等配置信息,都会在项目中获取到,如果有心去下整个项目吧

另外有些人遇到同一个service不能注入两个或以上的dao,这里也不会出现,我经过研究也就克服了这个难点了,有问题可以留言,我看到会恢复的哦


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值