SSHE框架整合(增删改查)

时间:2023-11-24 20:36:50

1.前期准备:jar包(c3p0、jdbc ,各个框架)

SSHE框架整合(增删改查)

SSHE框架整合(增删改查)

web.xml文件:spring的   转码的,和Struts2的过滤器

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>L1219_SSHE</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list> <!-- spring -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:app.xml</param-value> </context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- 转码 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <!-- 过滤器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> </web-app>

  Hibernate.cfg.xml的文件,并生成实体类的映射文件,

注意:现在用spring来生成映射文件。

SSHE框架整合(增删改查)

spring的app.xml的配置,用的连接池来连接数据库

SSHE框架整合(增删改查)

SSHE框架整合(增删改查)

Hibernate的各种配置,sessionFactory声明当前session,通过sessionFactory.getCurrentSession()来获取,(DAO层)

SSHE框架整合(增删改查)

声明事务

SSHE框架整合(增删改查)

然后见如下图所示的各种包,在包中实现各接口以及实现类(impl)实现类中主要是个方法(增删改查)

SSHE框架整合(增删改查)

Struts2的配置,主要是Action的方法的配置,(增删改查的action)

注意:name是页面发送的get或post请求的URL地址,class是spring中对应的id, method是Action类中的方法名

 

SSHE框架整合(增删改查)

DAO层接口

package com.hanqi.dao;

import java.util.List;
import java.util.Map; import com.hanqi.entity.Student; public interface StudentDAO { //获取数据列表
List<Student> find(int page , int rows,String sort,Map<String,String> where);
//获取数据条数
int getTotal(Map<String,String> where); void insert(Student stu);//添加
void update(Student stu);//修改
void delete(String sno);//删除
}

  DAO的实现类

package com.hanqi.dao.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Map; import org.hibernate.Query;
import org.hibernate.SessionFactory; import com.hanqi.dao.StudentDAO;
import com.hanqi.entity.Student; public class StudentDAOImpl implements StudentDAO { private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
} @Override
public List<Student> find(int page, int rows, String sort, Map<String, String> where) { //创建基础HQL语句
String sql = "from Student where 1=1";
//判断传递的的参数
String sname = where.get("sname_s");
if(sname != null && !sname.equals(""))
{
sql += " and sname = :sname";
} String sclass = where.get("sclass_s");
if(sclass != null && !sclass.equals(""))
{
sql += " and sclass = :sclass";
}
//排序 if(sort != null && !sort.equals(""))
{
sql += " order by " + sort;
}
//得到HQL
//并判断查询条件
Query q = sessionFactory.getCurrentSession().createQuery(sql);
if(sname != null && !sname.equals(""))
{
q.setString("sname",sname);
}
if(sclass != null && !sclass.equals(""))
{
q.setString("sclass",sclass);
} List<Student> rtn = new ArrayList<Student>();
rtn = q.setMaxResults(rows)//每页行数
.setFirstResult((page-1)*rows).list();//起始页码 return rtn;
} @Override
public int getTotal(Map<String, String> where) {
int rtn= 0; //创建基础HQL语句
String sql = "select count(1) from Student where 1=1";
//判断传递的的参数
String sname = where.get("sname_s");
if(sname != null && !sname.equals(""))
{
sql += " and sname = :sname";//and前面加空格
} String sclass = where.get("sclass_s");
if(sclass != null && !sclass.equals(""))
{
sql += " and sclass = :sclass";
}
//得到HQL
Query q = sessionFactory.getCurrentSession().createQuery(sql);
if(sname != null && !sname.equals(""))
{
q.setString("sname",sname);
}
if(sclass != null && !sclass.equals(""))
{
q.setString("sclass",sclass);
}
//获取Query对对象,定义集合并实例化
List<Object> lo = q.list(); if(lo != null && lo.size() > 0)
{
rtn = Integer.parseInt(lo.get(0).toString());//转换成int并赋值
} return rtn;
} //添加数据
@Override
public void insert(Student stu)
{ sessionFactory.getCurrentSession().save(stu); } //修改数据
@Override
public void update(Student stu)
{ sessionFactory.getCurrentSession().update(stu); } //删除
@Override
public void delete(String sno)
{ //Student st = (Student)se.get(Student.class, sno); //se.delete(st); //HQL方式执行删除
sessionFactory.getCurrentSession().createQuery("delete Student where sno =?")
.setString(0, sno)
.executeUpdate(); } }

  service接口

package com.hanqi.service;

import java.util.List;
import java.util.Map; import com.hanqi.entity.Student; public interface StudentService {
List<Student>getList(int page , int rows,String sort,Map<String,String> where);
int getTotal(Map<String,String> where);
String getPageJSON(int page, int rows,String sort,Map<String,String> where); // void insert(Student stu);
// void update(Student stu);
// void delete(String sno); //service的添加
void addStudent(Student stu);
//修改
void editStudent(Student stu); //删除
void deleteStudent(String sno);
}

  service的实现类

package com.hanqi.service.impl;

import java.util.List;
import java.util.Map; import com.alibaba.fastjson.JSONObject;
import com.hanqi.dao.StudentDAO;
import com.hanqi.entity.Student;
import com.hanqi.service.PageJSON;
import com.hanqi.service.StudentService; public class StudentServiceImpl implements StudentService { private StudentDAO studentDAO; public void setStudentDAO(StudentDAO studentDAO) {
this.studentDAO = studentDAO;
} @Override
public List<Student> getList(int page, int rows, String sort, Map<String, String> where) {
// TODO 自动生成的方法存根
return studentDAO.find(page, rows, sort, where);
} @Override
public int getTotal(Map<String, String> where) {
// TODO 自动生成的方法存根
return studentDAO.getTotal(where);
} @Override
public String getPageJSON(int page, int rows, String sort, Map<String, String> where) { PageJSON<Student> pj = new PageJSON<Student>();//引用泛型类
String rtn = JSONObject.toJSONString(pj); //"{total:0,rows:[]}";//空的JSON对象 int total = studentDAO.getTotal(where);//符合查询条件的总条数
if(total>0)
{
List<Student> ls = studentDAO.find(page, rows,sort,where); //String ls_json = JSONArray.toJSONString(ls);//转成JSON格式 pj.setTotal(total);
pj.setRows(ls); rtn = JSONObject.toJSONString(pj); //转义字符,转成JSON读取的格式
//rtn = "{\"total\":"+total+",\"rows\":"+ls_json+"}" ; } return rtn;
} // @Override
// public void insert(Student stu) {
// // TODO 自动生成的方法存根
// studentDAO.insert(stu);
// }
//
//
// @Override
// public void update(Student stu) {
// // TODO 自动生成的方法存根
// studentDAO.update(stu);
//
// }
//
//
// @Override
// public void delete(String sno) {
// // TODO 自动生成的方法存根
// studentDAO.delete(sno);
// } @Override
public void addStudent(Student stu) {
// TODO 自动生成的方法存根
studentDAO.insert(stu);
} @Override
public void editStudent(Student stu) {
// TODO 自动生成的方法存根
studentDAO.update(stu); } @Override
public void deleteStudent(String sno) {
// TODO 自动生成的方法存根
studentDAO.delete(sno);
} }

  Action

package com.hanqi.action;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map; import javax.servlet.http.HttpServletResponse; import org.apache.struts2.ServletActionContext; import com.hanqi.entity.Student;
import com.hanqi.service.StudentService; public class StudentAction { private StudentService studentService; HttpServletResponse response = ServletActionContext.getResponse(); public void setStudentService(StudentService studentService) {
this.studentService = studentService;
} //接受参数
private int page;
private int rows;
private String sort;
private String order; private String sname_s;
private String sclass_s; //添加的参数
private String sno ;
private String sname ;
private String ssex;
private String sbirthday;
private String sclass; //接受参数表示添加或修改
private String type ; public String getType() {
return type;
} public void setType(String type) {
this.type = type;
} public String getSno() {
return sno;
} public void setSno(String sno) {
this.sno = sno;
} public String getSname() {
return sname;
} public void setSname(String sname) {
this.sname = sname;
} public String getSsex() {
return ssex;
} public void setSsex(String ssex) {
this.ssex = ssex;
} public String getSbirthday() {
return sbirthday;
} public void setSbirthday(String sbirthday) {
this.sbirthday = sbirthday;
} public String getSclass() {
return sclass;
} public void setSclass(String sclass) {
this.sclass = sclass;
} public StudentService getStudentService() {
return studentService;
} public int getPage() {
return page;
} public void setPage(int page) {
this.page = page;
} public int getRows() {
return rows;
} public void setRows(int rows) {
this.rows = rows;
} public String getSort() {
return sort;
} public void setSort(String sort) {
this.sort = sort;
}
public String getOrder() {
return order;
}
public void setOrder(String order) {
this.order = order;
} public String getSname_s() {
return sname_s;
} public void setSname_s(String sname_s) {
this.sname_s = sname_s;
} public String getSclass_s() {
return sclass_s;
} public void setSclass_s(String sclass_s) {
this.sclass_s = sclass_s;
} @Override
public String toString() {
return "StudentAction [page=" + page + ", rows=" + rows + ", sort=" + sort + ", order=" + order + ", sname_s="
+ sname_s + ", sclass_s=" + sclass_s + "]";
} //返回数据列表
public void getStudentList()
{
System.out.println("this="+this); //调用serIve
try
{
//查询参数 if(sname_s != null)
{
sname_s = new String(sname_s.getBytes("ISO-8859-1"),"UTF-8");
} if(sclass_s != null)
{
sclass_s = new String(sclass_s.getBytes("ISO-8859-1"),"UTF-8");
}
System.out.println("sname_s="+sname_s+"sclass_s="+sclass_s); //对条件进行打包
Map<String,String> where = new HashMap<String,String>(); where.put("sname_s", sname_s);
where.put("sclass_s", sclass_s); //对分页情况的判断 //组合排序语句
String ls = "";
if(sort != null && order != null)
{
ls= sort + " " + order;//注意加空格
}
//System.out.println("ls="+ls);
String json = studentService.getPageJSON(page, rows,ls,where); System.out.println("json="+json); //返回数据 HttpServletResponse response = ServletActionContext.getResponse(); response.setCharacterEncoding("UTF-8");
response.setContentType("text/json"); response.getWriter().println(json); }
catch(Exception e)
{
e.printStackTrace();
}
} //添加
public void getSave()
{
HttpServletResponse response = ServletActionContext.getResponse();
String msg = "{'success':true,'message':'保存成功'}";
if(sno != null && type != null)
{
try
{
Student stu = new Student();
stu.setSno(sno);
stu.setSclass(sclass);
stu.setSname(sname);
stu.setSsex(ssex);
if(sbirthday !=null && !sbirthday.trim().equals(""))
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
stu.setSbirthday(sdf.parse(sbirthday));
}
if(type.equals("add"))//根据type判断按钮调用方法
{
studentService.addStudent(stu);
}
else
{
studentService.editStudent(stu);
}
}
catch(Exception e)
{
msg = "{'success':false,'message':'访问失败'}";
} try {
response.getWriter().print(msg); } catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
else
{ msg = "{'success':false,'message':'访问异常'}";
try {
response.getWriter().print(msg); } catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
} } }

 删除的action

package com.hanqi.action;

import java.io.IOException;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.hanqi.service.StudentService;

public class DeleteStudentAction {

	private StudentService studentService;

	HttpServletResponse response = ServletActionContext.getResponse();

	public void setStudentService(StudentService studentService) {
this.studentService = studentService;
} //接受删除的参数
private String snos; public String getSnos() {
return snos;
} public void setSnos(String snos) {
this.snos = snos;
} //删除
public void getDelete()
{
String msg = "{'success':true,'message':'删除成功'}";
if(snos != null )
{
System.out.println("snos=="+snos);
try
{
String [] sno = snos.split(",");//分割
for(String s : sno)
{
studentService.deleteStudent(s);
} }
catch(Exception e)
{
msg = "{'success':false,'message':'访问异常'}";
} }
else
{ msg = "{'success':false,'message':'删除失败'}"; }
try {
response.getWriter().print(msg); } catch (IOException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
} }

  页面显示层

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<!-- 顺序不可以乱 -->
<!-- 1.jQuery的js包 -->
<script type="text/javascript" src="jquery-easyui-1.4.4/jquery.min.js"></script>
<!-- 2.css资源 -->
<link rel="stylesheet" type="text/css" href="jquery-easyui-1.4.4/themes/default/easyui.css">
<!-- 3. 图标资源 -->
<link rel="stylesheet" type="text/css" href="jquery-easyui-1.4.4/themes/icon.css">
<!-- 4.easyui的js包 -->
<script type="text/javascript" src="jquery-easyui-1.4.4/jquery.easyui.min.js"></script>
<!-- 5.本地语言 -->
<script type="text/javascript" src="jquery-easyui-1.4.4/locale/easyui-lang-zh_CN.js"></script>
</head>
<body>
<script type="text/javascript"> //把long型的日期转成yyyy-MM-dd
function getDate(date)
{
//得到日期对象
var d = new Date(date);
//得到年 月 日
var year = d.getFullYear();
var month = (d.getMonth()+1);
var day = d.getDate();
//拼装
var rtn = year+"-"+(month<10 ? "0"+month : month) + "-"+(day<10 ? "0"+day : day);
return rtn;
} var type = "add";//定义点击按钮,初始化是添加的 $(function(){ $("#hh").datagrid({ url:'studentAction.action',//Struts.xml的name
//冻结列
frozenColumns:[[
{field:'id',checkbox:true},//复选框
{field:'sno',title:'学号',width:100}
]], //定义列 列配置对象
columns:[[ {field:'sname',title:'姓名',width:200,align:'center'},
{field:'ssex',title:'性别',width:200,align:'center',
formatter: function(value,row,index){
if(value == '男'||value == 'f')
{
return '男';
}
else
{
return '女';
}
},
styler:function(value,row,index){
if(value=='男'|| value=='f')
{
return 'background-color:#ccccff;color:red;'; }
}
}, {field:'sbirthday',title:'生日',width:200,align:'right',
formatter:function(value, row, index){
if(value && value !="")
{
return getDate(value);
}
else
{
return '无';
} } }, {field:'sclass',title:'班级',width:200,align:'center'} ]] ,
fitColumns:true, //列自适应宽度,不能和冻结列同时设置为true
striped:true, //斑马线
idField:'sno', //主键列
rownumbers:true, //显示行号
singleSelect:false, //是否单选
pagination:true, //分页栏
pageList:[8,16,24,32] , //每页行数选择列表
pageSize:8 , //初始每页行数
remoteSort:true , //是否服务器端排序,设成false才能客户端排序
sortName:'sno',//排序字段,基于服务器端排序
sortOrder:'desc',//排序顺序
//顶部工具栏
toolbar:[ {
iconCls:'icon-search',
text:'查询', handler:function(){
//序列化查询表单
var f = $("#form2").serialize();
//alert(f);
$("#hh").datagrid({url:"studentAction.action?"+f})},//把查询条件带给servlet }, {
iconCls:'icon-add',
text:'添加',
handler:function(){
type ="add";
//$("#sno").textbox({readonly:false});
//清除表单旧数据
$("#form1").form("reset");//重置表单数据 $("#saveStu").dialog('open');
}
},
{
iconCls:'icon-edit',
text:'修改',
handler:function(){
type ="edit";
//判断是否选中一条数据
var data = $("#hh").datagrid('getSelected');
if(data)
{
//alert(date);
//设置主键字段只读
$("#sno").textbox({readonly:true});
$("#form1").form("reset");//重置表单数据
$('#form1').form('load',{sno:data.sno,
sname:data.sname,
ssex:data.ssex,
sbirthday:getDate(data.sbirthday),
sclass:data.sclass
});
//$("#form1").form() $("#saveStu").dialog({title:'修改学生'}).dialog('open'); }
else
{
$.messager.show({
title:'提示',
msg:'请选中一条记录'
});
} }
},
{
iconCls:'icon-delete',
text:'删除',
handler:function(){
//getSelections返回所有被选中的行,当没有记录被选中的时候将返回一个空数组。
var data = $("#hh").datagrid('getSelections');
if(data.length > 0)
{
//alert("条数="+data.length);
$.messager.confirm(
'确认','您确认要删除吗?',function(r){
if(r)
{
//alert("fff="+data[0].sno);
//使用数组保存选中数据的记录主键
var snos=[];
for(var i = 0 ; i<data.length;i++)
{
snos [i]= data[i].sno;
}
//把要删除的主键传递给Servlet
$.get("deleteStudent.action?snos="+snos, function(rtn){ //alert(rtn);
//解析
var ms = eval("("+ rtn +")");
if(ms.success)
{
//若删除成功刷新页面
$("#hh").datagrid('reload');
}
$.messager.show({
title:'提示',
msg:ms.message
});
});
}
}
);
}
else
{
$.messager.show({
title:'提示',
msg:'请选择一条要删除的数据'
})
}
}
}
],
});
}) </script>
<div id="search" class="easyui-panel" title="查询条件" style="height:80px;width:100%"
data-options="{
iconCls:'icon-search',
collapsible:true}">
<form id="form2"><br>
<table border="0" style="margin-left:30px">
<tr>
<td>姓名:<input class="easyui-textbox" id="sname_s" name="sname_s"></td>
<td>班级:<input class="easyui-textbox" id="sclass_s" name="sclass_s"></td>
</tr>
</table> </form>
</div> <table id="hh"></table> <div class="easyui-dialog" id="saveStu" style="width:400px; height:300px"
title="添加学生"
data-options="{
closed:true,
modal:true,
buttons:[{
text:'保存',
iconCls:'icon-save',
handler:function(){
$('#form1').form('submit',{ url:'saveStudent.action?type='+ type, //
onSubmit:function(){
var isValid = $(this).form('validate');
if(!isValid)
{
$.messager.show({ title:'消息',
msg:'数据验证未通过'
});
}
return isValid; // 返回false终止表单提交
},
success:function(data){
var msg = eval('('+ data +')');//eval是js的方法
if(!msg.success)
{
alert(msg.message);
}
else
{
$('#hh').datagrid('load');
$.messager.show({ title:'消息',
msg:'数据验证通过,保存成功'
});
$('#saveStu').dialog('close');
} }
});
} }, {
text:'取消',
iconCls:'icon-cancel',
handler:function(){$('#saveStu').dialog('close')},
}]
}">
<form action="" id="form1" method="post"><br><br>
<table border="0" width=100%>
<tr>
<td align="right" width="30%">学号:</td>
<td>
<input class="easyui-textbox" id="sno" name="sno"
data-options="required:true,validType:'length[3,8]'">
</td>
</tr>
<tr>
<td align="right" width="30%">姓名:</td>
<td>
<input class="easyui-textbox" id="sname" name="sname"
data-options="required:true,validType:'length[2,3]'">
</td>
</tr>
<tr>
<td align="right" width="30%">性别:</td>
<td>
<input type="radio" name="ssex" value="男" checked>男
<input type="radio" name="ssex" value="女">女 </td>
</tr> <tr>
<td align="right" >生日:</td>
<td>
<input class="easyui-datebox" id="sbirthday" name="sbirthday"
data-options="required:false,">
</td>
</tr> <tr>
<td align="right" >班级:</td>
<td>
<input class="easyui-textbox" id="sclass" name="sclass"
data-options="required:true,validType:'length[5,5]'">
</td>
</tr>
</table> </form> </div>
</body>
</html>