基于SSH(spring+struts2+hibernate)的新闻系统(二)
基于SSH(spring+struts2+hibernate)的新闻系统(二)
在搭建完环境之后就可以进行系统的开发,新闻系统下我们是前后端分离的。前端用于显示新闻、用户登录、增加评论等;后端的新闻的管理、分类的管理、评论管理、用户管理等。接下来就从简单的后台分类管理开始:
分类管理
一、在src目录下创建包(Package),包名swu.xlc.domain,用来存放实体类,在包目录下创建一个类Category。采用注解的方式进行配置,其中@Entity是指明它是一个实体类,@Table是指明数据库中的表,name是对应映射到数据库中的表名,@Id表示这是主键属性,@GeneratedValue是指明Id自动增长,@Column是映射到数据库表中的列。对于getter和setter方法可以用eclipse的自动生成,然后在添加上构造方法(无参数的和有参数的),最后再加上toString()方法。
@Entity
@Table(name="category")
public class Category {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id")
private Integer id;
private String name;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
@Column(name="name")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Category() {
super();
}
public Category(Integer id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Category [id=" + id + ", name=" + name + "]";
}
}
二、在src目录下创建包(Package),包名swu.xlc.dao,在包下创建一个类DAOImpl,通过dao来继承了HibernateTemplate,从而提供了各种各样的CRUD方法,满足各种数据库操作的需要。通过DAOImpl类提供的setSessionFactory()方法, 来注入SessionFactory。也可以使用DAO接口的方法,但是使用DAOImpl类可以直接声明方法,省去代码。在后面的开发中只需要进行调用DAOImpl方法就可以进行创建sessionFactory。
@Repository("dao")
public class DAOImpl extends HibernateTemplate{
@Resource(name="sf")
public void setSessionFactory(SessionFactory sessionFactory) {
super.setSessionFactory(sessionFactory);
};
}
三、在src目录下创建包(Package),包名swu.xlc.service,在包下创建接口CategoryService,在接口中创建方法public List list();在src目录下创建包(Package),包名swu.xlc.service.impl,在包下创建类CategoryServiceImpl将该类继承CategoryService接口,然后在该类下实现接口中的list方法,@Sevice是将其注册为Spring的服务,@Artowired是自动注入DAOImpl。在CategoryServiceImpl方法中是使用Criteria进行数据查询,这是面向对象的方式在进行数据查询,将不再看到有sql语句的痕迹,当然也可以使用标准的sql语句或者是hql语句。这里我们进行的是查询所有的分类。
package swu.xlc.service;
import java.util.List;
import swu.xlc.domain.Category;
public interface CategoryService {
public List list();
}
package swu.xlc.service.impl;
import java.util.List;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Order;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import swu.xlc.dao.DAOImpl;
import swu.xlc.domain.Category;
import swu.xlc.service.CategoryService;
@Service
public class CategoryServiceImpl implements CategoryService{
@Autowired DAOImpl dao;
@Override
public List list() {
// TODO Auto-generated method stub
DetachedCriteria dc = DetachedCriteria.forClass(Category.class);
dc.addOrder(Order.desc("id"));
return dao.findByCriteria(dc);
}
}
四、在src目录下创建包(Package),包名swu.xlc.action,在包下创建类CategoryAction,在这里就进行后台处理,然后将数据传送至前端,使用struts的action来进行跳转。@Namespace是指明一个命名空间,@ParentPackage继承mystruts包,这个包我们在struts.xml中进行了配置,@Results用于配置多个action映射,@Result用于映射action,name是指定名称,location用于指定资源的URL(必须有),@Autowired是自动注入CategoryService,@Action用于注解struts2的Action,在调用该action后会执行下面对应的方法,方法返回的值会映射到@Result中,最终会返回到视图中去。通过调用CategoryService的list方法来查询数据库中所有的分类,然后将分类的数据保存为categorys中,然后跳转到/WEB-INF/jsp/list_category.jsp视图中去。
package swu.xlc.action;
import java.util.List;
import org.apache.struts2.convention.annotation.Action;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import org.springframework.beans.factory.annotation.Autowired;
import swu.xlc.domain.Category;
import swu.xlc.service.CategoryService;
@Namespace("/")
@ParentPackage("mystruts")
@Results(
{
/*分类管理*/
@Result(name="categorylist", location="/WEB-INF/jsp/list_category.jsp"),
}
)
public class CategoryAction {
@Autowired
private CategoryService categoryService;
private Category category;
List<Category> categorys;
public CategoryService getCategoryService() {
return categoryService;
}
public void setCategoryService(CategoryService categoryService) {
this.categoryService = categoryService;
}
public Category getCategory() {
return category;
}
public void setCategory(Category category) {
this.category = category;
}
public List<Category> getCategorys() {
return categorys;
}
public void setCategorys(List<Category> categorys) {
this.categorys = categorys;
}
@Action("listcategory")
public String list() {
categorys=categoryService.list();
return "categorylist";
}
}
五、在WEB-INF目录下穿建一个包,包名为jsp,在该包下创建一个名为list_category.jsp的jsp页面。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.*" %>
<%@ page isELIgnored="false"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>分类管理</title>
</head>
<body>
<div>
<c:forEach items="${categorys}" var="cs">
<div>${cs.id}--${cs.name}</div>
</c:forEach>
</div>
</body>
</html>
六、在数据库中创建数据库new(这里要与applicationContext.xml)的数据库配置对应,然后在new下创建表category,为表添加id,name属性
然后在表中添加数据如下数据:
七、这样就写好了一个简单的分类查询,运行项目在tomcat上,然后可以访问地址 http://localhost:8080/ssh_new/listcategroy 如果的到下面的页面就是成功了,同时也会在控制台打印以下语句。