//CategoryService接口
public interface CategoryService extends BaseService<Category> {
public void save(Category category); //插入
public void update(Category category);//更新
public void delete(int id); //删除
public Category get(int id); //获取一个Category
public List<Category> query(); //获取全部Category
}
public class CategoryServiceImpl extends BaseServiceImpl<Category> implements CategoryService {
private SessionFactory sessionFactory;
//Spring会注进来
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
protected Session getSession() {
//从当前线程获取session,如果没有则创建一个新的session
return sessionFactory.getCurrentSession();
}
@Override
public void save(Category category) {
getSession().save(category);
}
@Override
public void update(Category category) {
getSession().update(category);
}
@Override
public void delete(int id) {
/*第一种方法有个弊端,就是没删除一次得先查询一次
Object obj = getSession().get(Category.class, id);
if(obj != null) {
getSession().delete(obj);
}*/
String hql = "delete Category while id=:id";
getSession().createQuery(hql) //
.setInteger("id", id) //
.executeUpdate();
}
@Override
public Category get(int id) {
return (Category) getSession().get(Category.class, id);
}
@Override
public List<Category> query() {
String hql = "from Category";
return getSession().createQuery(hql).list();
}
}
//基础接口BaseService,使用泛型
public interface BaseService<T> {
public void save(T t);
public void update(T t);
public void delete(int id);
public T get(int id);
public List<T> query();
}
/**
* @Description TODO(公共模块的抽取)
* @author eson_15
*
*/
@SuppressWarnings("unchecked")
public class BaseServiceImpl<T> implements BaseService<T> {
private Class clazz; //clazz中存储了当前操作的类型,即泛型T
private SessionFactory sessionFactory;
public BaseServiceImpl() {
//下面三个打印信息可以去掉,这里是给自己看的
System.out.println("this代表的是当前调用构造方法的对象" + this);
System.out.println("获取当前this对象的父类信息" + this.getClass().getSuperclass());
System.out.println("获取当前this对象的父类信息(包括泛型信息)" + this.getClass().getGenericSuperclass());
//拿到泛型的参数类型
ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
clazz = (Class)type.getActualTypeArguments()[0];
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
protected Session getSession() {
//从当前线程获取session,如果没有则创建一个新的session
return sessionFactory.getCurrentSession();
}
@Override
public void save(T t) {
getSession().save(t);
}
@Override
public void update(T t) {
getSession().update(t);
}
@Override
public void delete(int id) {
System.out.println(clazz.getSimpleName());
String hql = "delete " + clazz.getSimpleName() + " as c where c.id=:id";
getSession().createQuery(hql) //
.setInteger("id", id) //
.executeUpdate();
}
@Override
public T get(int id) {
return (T) getSession().get(clazz, id);
}
@Override
public List<T> query() {
String hql = "from " + clazz.getSimpleName();
return getSession().createQuery(hql).list();
}
}
//CategoryService接口继承BaseService接口
public interface CategoryService extends BaseService<Category> {
/*
* 只要添加CategoryService本身需要的新的方法即可,公共方法已经在BaseService中了
*/
}
/**
* @Description TODO(模块自身的业务逻辑)
* @author eson_15
*
*/
public class CategoryServiceImpl extends BaseServiceImpl<Category> implements CategoryService {
/*
* 只需实现CategoryService接口中新增的方法即可,公共方法已经在BaseServiceImpl中实现了
*/
}
<!-- 泛型类是不能实例化的,所以要加lazy-init属性 --> <bean id="baseService" class="cn.it.shop.service.impl.BaseServiceImpl" lazy-init="true"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <bean id="categoryService" class="cn.it.shop.service.impl.CategoryServiceImpl" parent="baseService"/>
public interface AccountService extends BaseService<Account> { //注意BaseService里的泛型现在是Account
/*
* 只要添加AccountService本身需要的新的方法即可,公共方法已经在BaseService中了
*/
}
public class AccountServiceImpl extends BaseServiceImpl<Account> implements AccountService {
/*
* 只需实现AccountService接口中新增的方法即可,公共方法已经在BaseServiceImpl中实现了
*/
//管理登陆功能,后期再完善
}
public class CategoryAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware{
private Category category;
private CategoryService categoryService;
public void setCategoryService(CategoryService categoryService) {
this.categoryService = categoryService;
}
public String update() {
System.out.println("----update----");
categoryService.update(category);
return "index";
}
public String save() {
System.out.println("----save----");
return "index";
}
public String query() {
//解决方案一,采用相应的map取代原来的内置对象,这样与jsp没有依赖,但是代码量比较大
// ActionContext.getContext().put("categoryList", categoryService.query()); //放到request域中
// ActionContext.getContext().getSession().put("categoryList", categoryService.query()); //放到session域中
// ActionContext.getContext().getApplication().put("categoryList", categoryService.query()); //放到application域中
//解决方案二,实现相应的接口(RequestAware,SessionAware,ApplicationAware),让相应的map注入
request.put("categoryList", categoryService.query());
session.put("categoryList", categoryService.query());
application.put("categoryList", categoryService.query());
return "index";
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
private Map<String, Object> request;
private Map<String, Object> session;
private Map<String, Object> application;
@Override
public void setApplication(Map<String, Object> application) {
this.application = application;
}
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
@Override
public void setRequest(Map<String, Object> request) {
this.request = request;
}
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<a href="${pageContext.request.contextPath }/category_update.action?category.id=2&category.type=gga&category.hot=false">访问update</a>
<a href="category_save.action">访问save</a>
<a href="category_query.action">查询所有类别</a><br/>
<c:forEach items="${requestScope.categoryList }" var="category">
${category.id } | ${category.type } | ${category.hot } <br/>
</c:forEach>
<c:forEach items="${sessionScope.categoryList }" var="category">
${category.id } | ${category.type } | ${category.hot } <br/>
</c:forEach>
<c:forEach items="${applicationScope.categoryList }" var="category">
${category.id } | ${category.type } | ${category.hot } <br/>
</c:forEach>
</body>
</html>
public class BaseAction extends ActionSupport implements RequestAware,SessionAware,ApplicationAware {
protected Map<String, Object> request;
protected Map<String, Object> session;
protected Map<String, Object> application;
@Override
public void setApplication(Map<String, Object> application) {
this.application = application;
}
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
@Override
public void setRequest(Map<String, Object> request) {
this.request = request;
}
}
public class CategoryAction extends BaseAction {
private Category category;
<pre name="code" class="java">
private CategoryService categoryService;
public void setCategoryService(CategoryService categoryService) {
this.categoryService = categoryService;
}
public String update() {System.out.println("----update----");categoryService.update(category); return "index"; }public String save() {System.out.println("----save----");return "index"; } public String query() {request.put("categoryList", categoryService.query()); session.put("categoryList", categoryService.query()); application.put("categoryList", categoryService.query()); return "index"; } public Category getCategory() { return category; } public void setCategory(Category category) {this.category = category; }}
public class CategoryAction extends BaseAction implements ModelDriven<Category>{
private Category category;
//使用ModelDriven接口必须要实现getModel()方法,此方法会把返回的项压到栈顶
@Override
public Category getModel() {
category = new Category();
return category;
}
<pre name="code" class="java"> private CategoryService categoryService;
public void setCategoryService(CategoryService categoryService) {
this.categoryService = categoryService;
}
public String update() {
System.out.println("----update----");
categoryService.update(category);
return "index";
}
public String save() {
System.out.println("----save----");
return "index";
}
public String query() {
request.put("categoryList", categoryService.query());
session.put("categoryList", categoryService.query());
application.put("categoryList", categoryService.query());
return "index";
}
}
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'index.jsp' starting page</title>
</head>
<body>
<a href="${pageContext.request.contextPath }/category_update.action?category.id=2&category.type=gga&category.hot=false">访问update</a>
<a href="category_save.action?id=1&type=haha&hot=true">测试ModelDriven</a>
<a href="category_query.action">查询所有类别</a><br/>
<c:forEach items="${requestScope.categoryList }" var="category">
${category.id } | ${category.type } | ${category.hot } <br/>
</c:forEach>
<c:forEach items="${sessionScope.categoryList }" var="category">
${category.id } | ${category.type } | ${category.hot } <br/>
</c:forEach>
<c:forEach items="${applicationScope.categoryList }" var="category">
${category.id } | ${category.type } | ${category.hot } <br/>
</c:forEach>
</body>
</html>
//因为有很多不同的model都需要使用ModelDriven,所以这里使用泛型
public class BaseAction<T> extends ActionSupport implements RequestAware,SessionAware,ApplicationAware,ModelDriven<T> {
protected Map<String, Object> request;
protected Map<String, Object> session;
protected Map<String, Object> application;
protected T model;
@Override
public void setApplication(Map<String, Object> application) {
this.application = application;
}
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
@Override
public void setRequest(Map<String, Object> request) {
this.request = request;
}
@Override
public T getModel() { //这里通过解析传进来的T来new一个对应的instance
ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperclass();
Class clazz = (Class)type.getActualTypeArguments()[0];
try {
model = (T)clazz.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
return model;
}
}
//继承BaseAction,并且加上泛型
public class CategoryAction extends BaseAction<Category> {
private CategoryService categoryService;
public void setCategoryService(CategoryService categoryService) {
this.categoryService = categoryService;
}
public String update() {
System.out.println("----update----");
categoryService.update(model);//直接使用model
return "index";
}
public String save() {
System.out.println("----save----");
System.out.println(model); //直接使用model
return "index";
}
public String query() {
request.put("categoryList", categoryService.query());
session.put("categoryList", categoryService.query());
application.put("categoryList", categoryService.query());
return "index";
}
}
//我将BaseAction中的内容归归类了
public class BaseAction<T> extends ActionSupport implements RequestAware,SessionAware,ApplicationAware,ModelDriven<T> {
//service对象
protected CategoryService categoryService;
protected AccountService accountService;
public void setCategoryService(CategoryService categoryService) {
this.categoryService = categoryService;
}
public void setAccountService(AccountService accountService) {
this.accountService = accountService;
}
//域对象
protected Map<String, Object> request;
protected Map<String, Object> session;
protected Map<String, Object> application;
@Override
public void setApplication(Map<String, Object> application) {
this.application = application;
}
@Override
public void setSession(Map<String, Object> session) {
this.session = session;
}
@Override
public void setRequest(Map<String, Object> request) {
this.request = request;
}
//ModelDriven
protected T model;
@Override
public T getModel() {
ParameterizedType type = (ParameterizedType)this.getClass().getGenericSuperclass();
Class clazz = (Class)type.getActualTypeArguments()[0];
try {
model = (T)clazz.newInstance();
} catch (Exception e) {
throw new RuntimeException(e);
}
return model;
}
}
这样CategoryAction中就更加清爽了:
public class CategoryAction extends BaseAction<Category> {
public String update() {
System.out.println("----update----");
categoryService.update(model);
return "index";
}
public String save() {
System.out.println("----save----");
System.out.println(model);
return "index";
}
public String query() {
request.put("categoryList", categoryService.query());
session.put("categoryList", categoryService.query());
application.put("categoryList", categoryService.query());
return "index";
}
}
<!-- 如果是prototype类型,默认是使用时创建,不是启动时自动创建 --> <bean id="baseAction" class="cn.it.shop.action.BaseAction" scope="prototype"> <property name="categoryService" ref="categoryService"></property> <property name="accountService" ref="accountService"></property> </bean> <bean id="categoryAction" class="cn.it.shop.action.CategoryAction" scope="prototype" parent="baseAction"/>
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有