S2SH CRUD 整合

Posted zhouixi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了S2SH CRUD 整合相关的知识,希望对你有一定的参考价值。

采用的框架 Struts2+Spring4+Hbiernate4.

 

目录结构

   

EmployeeAction:

  1 package com.xx.ssh.actions;
  2 
  3 import java.io.ByteArrayInputStream;
  4 import java.io.InputStream;
  5 import java.io.UnsupportedEncodingException;
  6 import java.util.Date;
  7 import java.util.Map;
  8 import org.apache.struts2.interceptor.RequestAware;
  9 import com.opensymphony.xwork2.ActionSupport;
 10 import com.opensymphony.xwork2.ModelDriven;
 11 import com.opensymphony.xwork2.Preparable;
 12 import com.xx.ssh.entities.Employee;
 13 import com.xx.ssh.service.DepartmentService;
 14 import com.xx.ssh.service.EmployeeService;
 15 
 16 public class EmployeeAction extends ActionSupport implements RequestAware,
 17         ModelDriven<Employee>, Preparable {
 18 
 19     private static final long serialVersionUID = 1L;
 20 
 21     private EmployeeService employssService;
 22 
 23     public void setEmployssService(EmployeeService employssService) {
 24         this.employssService = employssService;
 25     }
 26 
 27     private DepartmentService departmentService;
 28 
 29     public void setDepartmentService(DepartmentService departmentService) {
 30         this.departmentService = departmentService;
 31     }
 32 
 33     public String list() {
 34         request.put("employees", employssService.getAll());
 35         System.out.println("request: " + request.size());
 36         return "list";
 37     }
 38 
 39     private Integer id;
 40 
 41     public void setId(Integer id) {
 42         this.id = id;
 43     }
 44 
 45     private InputStream inputStream;
 46 
 47     public InputStream getInputStream() {
 48         return inputStream;
 49     }
 50     //回调函数。判断是否删除
 51     public String delete() {
 52         try {
 53             employssService.delete(id);
 54             inputStream = new ByteArrayInputStream("1".getBytes("UTF-8"));
 55         } catch (Exception e) {
 56             e.printStackTrace();
 57             try {
 58                 inputStream = new ByteArrayInputStream("0".getBytes("UTF-8"));
 59             } catch (UnsupportedEncodingException e1) {
 60                 e1.printStackTrace();
 61             }
 62         }
 63         return "ajax-success";
 64     }
 65 
 66     private String lastName;
 67 
 68     public void setLastName(String lastName) {
 69         this.lastName = lastName;
 70     }
 71     //回调函数。判断用户名是否存在。
 72     public String validateLastName() {
 73         try {
 74             if (employssService.lastNameIsValid(lastName)) {
 75 
 76                 inputStream = new ByteArrayInputStream("1".getBytes("utf-8"));
 77             } else {
 78 
 79                 inputStream = new ByteArrayInputStream("0".getBytes("utf-8"));
 80             }
 81         } catch (Exception e) {
 82 
 83         }
 84         return "ajax-success";
 85     }
 86 
 87     private Employee model;
 88 
 89     /*
 90      * 可以根椐ID来判断为save方法准备的model是new的还是数据库获取的。
 91      */
 92     public void prepareSave() {
 93         if (id == null) {
 94             model = new Employee();
 95         } else {
 96             model = employssService.get(id);
 97         }
 98     }
 99 
100     public String save() {
101 
102         if (id == null) {
103             model.setCreateTime(new Date());
104 
105         }
106         employssService.saveOrUpdate(model);
107         return SUCCESS;
108     }
109 
110     public String input() {
111         request.put("departments", departmentService.getAll());
112         return INPUT;
113     }
114 
115     public void prepareInput() {
116         if (id != null) {
117             model = employssService.get(id);
118         }
119 
120     }
121 
122     private Map<String, Object> request;
123 
124     @Override
125     public void setRequest(Map<String, Object> arg0) {
126         this.request = arg0;
127 
128     }
129 
130     @Override
131     public Employee getModel() {
132 
133         return model;
134     }
135 
136     @Override
137     public void prepare() throws Exception {
138 
139     }
140 
141 }
View Code

SSHDateConverter:自定义转换器

 1 package com.xx.ssh.converters;
 2 
 3 import java.text.DateFormat;
 4 import java.text.ParseException;
 5 import java.text.SimpleDateFormat;
 6 import java.util.Date;
 7 import java.util.Map;
 8 
 9 import org.apache.struts2.util.StrutsTypeConverter;
10 
11 public class SSHDateConverter extends StrutsTypeConverter {
12 
13     private DateFormat dateFormat;
14     {
15         dateFormat = new SimpleDateFormat("yyyy-MM-dd");
16     }
17     
18     @Override
19     public Object convertFromString(Map context, String[] values, Class toClass) {
20         if(toClass == Date.class){
21             try {
22                 return dateFormat.parse(values[0]);
23             } catch (ParseException e) {
24                 e.printStackTrace();
25             }
26         }
27         
28         return null;
29     }
30 
31     @Override
32     public String convertToString(Map context, Object o) {
33         if(o instanceof Date){
34             return dateFormat.format((Date)o);
35         }
36         return null;
37     }
38 
39 }
View Code

BaseDao:SessionFactory

 1 package com.xx.ssh.dao;
 2 
 3 import org.hibernate.Session;
 4 import org.hibernate.SessionFactory;
 5 
 6 public class BaseDao {
 7     private SessionFactory  sessionFactory;
 8 
 9     public void setSessionFactory(SessionFactory sessionFactory) {
10         this.sessionFactory = sessionFactory;
11     }
12     
13     public Session getSession() {
14         return  this.sessionFactory.getCurrentSession();
15     }
16 }
View Code

DepartmentDao:Dao层

 1 package com.xx.ssh.dao;
 2 
 3 import java.util.List;
 4 
 5 import com.xx.ssh.entities.Department;
 6 
 7 public class DepartmentDao extends BaseDao{
 8     public List<Department> getAll(){
 9         String hql="FROM Department";
10         return getSession().createQuery(hql).list();
11     }
12 }
View Code

EmployeeDao

 1 package com.xx.ssh.dao;
 2 
 3 import java.util.List;
 4 
 5 import org.hibernate.Query;
 6 import org.hibernate.Session;
 7 import org.hibernate.SessionFactory;
 8 
 9 import com.xx.ssh.entities.Employee;
10 
11 public class EmployeeDao extends BaseDao {
12     
13     
14     public void delete(Integer id){
15         String hql="delete from Employee e where e.id=? ";
16         getSession().createQuery(hql).setInteger(0,id).executeUpdate();
17     }
18 
19     public List<Employee> getAll(){
20         
21         String hql="from Employee e LEFT OUTER JOIN FETCH e.department";
22         return getSession().createQuery(hql).list();
23     }
24     public void saveOrUpdate(Employee employee){
25         getSession().saveOrUpdate(employee);
26     }
27     public Employee getEmployeeByLastName(String lastName){
28         
29         String hql="from Employee e where e.lastName=? ";
30         Query query = getSession().createQuery(hql).setString(0,lastName);
31         return (Employee)query.uniqueResult();
32     }
33     public Employee get(Integer id){
34         return (Employee) getSession().get(Employee.class,id);
35         
36     }
37 }
View Code

实体:Department

 1 package com.xx.ssh.entities;
 2 
 3 public class Department {
 4     private Integer id;
 5     private String departmentName;
 6 
 7     public Integer getId() {
 8         return id;
 9     }
10 
11     public void setId(Integer id) {
12         this.id = id;
13     }
14 
15     public String getDepartmentName() {
16         return departmentName;
17     }
18 
19     public void setDepartmentName(String departmentName) {
20         this.departmentName = departmentName;
21     }
22 }
View Code

实体:Employee

 1 package com.xx.ssh.entities;
 2 
 3 import java.util.Date;
 4 
 5 public class Employee {
 6     
 7     
 8     //
 9     private Integer id;
10     //不能被修改
11     private String lastName;
12     private String email;
13     //从前端传入的是string类型,所以需要注意转换。
14     private Date birth;
15     //不能被修改
16     private Date createTime;
17     //单向n-1的关联关系
18     private Department department;
19     
20     public Integer getId() {
21         return id;
22     }
23     public void setId(Integer id) {
24         this.id = id;
25     }
26     public String getLastName() {
27         return lastName;
28     }
29     public void setLastName(String lastName) {
30         this.lastName = lastName;
31     }
32     public String getEmail() {
33         return email;
34     }
35     public void setEmail(String email) {
36         this.email = email;
37     }
38     public Date getBirth() {
39         return birth;
40     }
41     public void setBirth(Date birth) {
42         this.birth = birth;
43     }
44     public Date getCreateTime() {
45         return createTime;
46     }
47     public void setCreateTime(Date createTime) {
48         this.createTime = createTime;
49     }
50     public Department getDepartment() {
51         return department;
52     }
53     public void setDepartment(Department department) {
54         this.department = department;
55     }
56     
57     @Override
58     public String toString() {
59         return "Employee [birth=" + birth + ", createTime=" + createTime
60                 + ", department.id=" + department + ", email=" + email + ", id="
61                 + id + ", lastName=" + lastName + "]";
62     }
63 }
View Code

表与类映射文件配置。

Department.hbm.xml

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <!-- Generated 2014-7-22 11:21:48 by Hibernate Tools 3.4.0.CR1 -->
 5 <hibernate-mapping>
 6     <class name="com.xx.ssh.entities.Department" table="SSH_DEPARTMENT">
 7         <id name="id" type="java.lang.Integer">
 8             <column name="ID" />
 9             <generator class="native" />
10         </id>
11       
12         <property name="departmentName" type="java.lang.String">
13             <column name="DEPARTMENT_NAME" />
14         </property>
15         
16     </class>
17 </hibernate-mapping>
View Code

Employee.hbm.xml

 1 <?xml version="1.0"?>
 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
 4 <!-- Generated 2014-7-22 11:21:48 by Hibernate Tools 3.4.0.CR1 -->
 5 <hibernate-mapping>
 6     <class name="com.xx.ssh.entities.Employee" table="SSH_EMPLOYEE">
 7         
 8         <id name="id" type="java.lang.Integer">
 9             <column name="ID" />
10             <generator class="native" />
11         </id>
12         
13         <property name="lastName" type="java.lang.String">
14             <column name="LAST_NAME" />
15         </property>
16         
17         <property name="email" type="java.lang.String">
18             <column name="EMAIL" />
19         </property>
20         
21         <property name="birth" type="java.util.Date">
22             <column name="BIRTH" />
23         </property>
24         
25         <property name="createTime" type="java.util.Date">
26             <column name="CREATE_TIME" />
27         </property>
28         
29         <!-- 映射单向 n-1 的关联关系 -->
30         <many-to-one name="department" class="com.xx.ssh.entities.Department" lazy="false">
31             <column name="DEPARTMENT_ID" />
32         </many-to-one>
33         
34     </class>
35 </hibernate-mapping>
View Code

Service层:Department

 1 package com.xx.ssh.service;
 2 
 3 import java.util.List;
 4 
 5 import com.xx.ssh.dao.DepartmentDao;
 6 import com.xx.ssh.entities.Department;
 7 
 8 public class DepartmentService {
 9     private DepartmentDao departmentDao;
10     
11     public void setDepartmentDao(DepartmentDao departmentDao){
12         this.departmentDao=departmentDao;
13     }
14     public List<Department>getAll(){
15         return departmentDao.getAll();
16     }
17     
18 }
View Code

Service层:Employee

 1 package com.xx.ssh.service;
 2 
 3 import java.util.List;
 4 
 5 import com.xx.ssh.dao.EmployeeDao;
 6 import com.xx.ssh.entities.Employee;
 7 
 8 public class EmployeeService {
 9     private EmployeeDao employeeDao;
10     
11     public void setEmployeeDao(EmployeeDao employeeDao)
12     {
13         this.employeeDao=employeeDao;
14     }
15     public boolean lastNameIsValid(String lastName){
16         return employeeDao.getEmployeeByLastName(lastName)==null;
17     }
18     public void delete(Integer id){
19         employeeDao.delete(id);
20     }
21     public void saveOrUpdate(Employee employee){
22         employeeDao.saveOrUpdate(employee);
23     }
24     public List<Employee> getAll(){
25         List<Employee> employees=employeeDao.getAll();
26         /*employees.clear();*/
27         System.out.println(employees.size());
28         

以上是关于S2SH CRUD 整合的主要内容,如果未能解决你的问题,请参考以下文章

整合S2SH开发项目步骤

java S2SH项目框架整合搭建实例教程(转载)

s2sh框架整合所需包,struts2+spring+hibernate所需的jar包下载

基于已构建S2SH项目配置全注解方式简化配置文件

#yyds干货盘点#mybatis-plus学习与实践代码生成器整合swagger2生成CRUD接口

SpringBoot整合ElasticSearch实现模糊查询,批量CRUD,排序,分页,高亮