s2smb-练手

3 篇文章 0 订阅
2 篇文章 0 订阅

加载依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.et</groupId>
  <artifactId>ssmb</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
    <parent>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-parent</artifactId>
       <version>1.5.4.RELEASE</version>
   </parent>
   
	<dependencies>

      <dependency>
      		<!--表示可以发布web程序   并启动一个tomcat-->
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
      </dependency>
      		
      		<!--添加转译jsp的jar 否则无法转译jsp -->
    	<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>
			<scope>provided</scope>
		</dependency>
		
		<!--集成mybatis  -->
		<dependency>
		  <groupId>org.mybatis.spring.boot</groupId>
		  <artifactId>mybatis-spring-boot-starter</artifactId>
		  <version>1.2.0</version>
		</dependency>
	
			<!--操作数据源  -->
		<dependency>
		    <groupId>org.springframework.boot</groupId>
		    <artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<dependency>
			<groupId>oracle</groupId>
			<artifactId>oracle</artifactId>
			<version>3.2.8</version>
			<scope>system</scope>
			<systemPath>D:\app\Administrator\product\11.2.0\dbhome_1\jdbc\lib\ojdbc6.jar</systemPath>
		</dependency>
		<!--引入Struts2  -->
		<dependency>
		  <groupId>org.apache.struts</groupId>
		  <artifactId>struts2-core</artifactId>
		  <version>2.3.3</version>
		</dependency>
		<!--引入 struts2-spring集成插件 -->
		<dependency>
		  <groupId>org.apache.struts</groupId>
		  <artifactId>struts2-spring-plugin</artifactId>
		  <version>2.3.3</version>
		</dependency>
		<!--引入struts2注解  -->
		<dependency>
		  <groupId>org.apache.struts</groupId>
		  <artifactId>struts2-convention-plugin</artifactId>
		  <version>2.3.3</version>
		</dependency>
		<!--引入json  -->
		<dependency>
		  <groupId>net.sf.json-lib</groupId>
		  <artifactId>json-lib</artifactId>
		  <version>2.3</version>
		  <classifier>jdk15</classifier>
		</dependency>		
		<dependency>
			<groupId>commons-dbcp</groupId>
			<artifactId>commons-dbcp</artifactId>
			<version>1.4</version>
		</dependency>
	</dependencies>
</project>


实例化Struts2的StrutsPrepareAndExecuteFilter过滤器

因为在springboot中是没有web.xml这个配置文件的,所有我们必须手动实例化Struts2的StrutsPrepareAndExecuteFilter过滤器

package cn.et.utils;

import java.util.ArrayList;
import java.util.List;

import org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class WebXmlConfiguration {
	
	
	@Bean
	/**实体化 StrutsPrepareAndExecuteFilter 过滤器*/
	public FilterRegistrationBean registration() {
		//FilterRegistrationBean  spring提供的专门用于集成Servlet的类
	    FilterRegistrationBean registration = new FilterRegistrationBean();
	    //设置过滤器
	    registration.setFilter(new StrutsPrepareAndExecuteFilter());
	    List list = new ArrayList();
	    list.add("/*");
	    list.add("*.action");
	    //设置过滤的路径
	    registration.setUrlPatterns(list);
	    return registration;
	}

}


struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
    	<!--将Struts的Bean交由Spring管理  -->
        <constant name="struts.objectFactory" value="spring"></constant> 
        <!-- 自动扫描 -->    
        <constant name="struts.convention.package.locators.basePackage" value="cn"/>
        <constant name="struts.convention.package.locators" value="cn"/> 
        <!--开启父类类加载器   因为SpringBoot是通过内嵌的Tomcat扫描加载类  而Tomcat本身也属于一个进程
        	所以必须打开Struts的父类类加载器  否则Struts是无法扫描到类的
        -->
        <constant name="struts.convention.exclude.parentClassLoader" value="false" />
        
        
<!--         <package name="default" extends="struts-default">
            <action name="queryEmp" class="cn.et.controller.EmpAction" method="query">
            </action>
        </package> -->

    </struts>

mapper

package cn.et.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import cn.et.entity.Emp;

@Mapper
public interface EmpMapper {

	@Select("select EMPNO, ENAME,JOB,MGR,to_char(HIREDATE,'yyyy-mm-dd') as HIREDATE,SAL,COMM,DEPTNO " +
			"from emp where ename like #{ename}")
	public List<Emp> selectEmp(@Param("ename") String ename);
	
	@Select("select count(rowid) as TC from emp where  ename like #{ename}")
	public int queryEmpCount(@Param("ename") String name);
	
	@Select("select EMPNO, ENAME,JOB,MGR,to_char(HIREDATE,'yyyy-mm-dd') as HIREDATE,SAL,COMM,DEPTNO " +
						"from (select t.*,rownum rn from emp t where ename like  #{ename}) where rn>=#{startIndex} and rn<=#{endIndex}")
	public List<Emp> queryEmp(@Param("ename") String name,@Param("startIndex")int startIndex, @Param("endIndex")int endIndex);
	
	@Insert("insert into emp(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO)"
			+"values ((select max(empno)+1 from emp),#{ename,jdbcType=VARCHAR},#{job}," +
			"#{mgr},#{hiredate,jdbcType=DATE},#{sal},#{comm},#{deptno})")
	public void addEmp(Emp emp);
	
	@Delete("delete from emp where empno=#{empNo}")
	public void deleteEmp(@Param("empNo") String empNo);
	
	@Update("update emp set ENAME=#{ename,jdbcType=VARCHAR},JOB=#{job,jdbcType=VARCHAR}," +
			"MGR=#{mgr,jdbcType=NUMERIC},SAL=#{sal,jdbcType=NUMERIC},COMM=#{comm,jdbcType=NUMERIC}," +
			"	DEPTNO=#{deptno,jdbcType=NUMERIC} where EMPNO=#{empNo,jdbcType=NUMERIC}")
	public void updateEmp(Emp emp);
}


service

要按照规范创建该类的接口,这里我就不发上来了

package cn.et.service.impl;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import cn.et.entity.Emp;
import cn.et.mapper.EmpMapper;
import cn.et.service.EmpService;
import cn.et.utils.PagerEntity;
import cn.et.utils.PagerUtils;
/**
 * Transactional 表示该类中的所有方法都使用事务
 * @author Ma-PC
 */
@Transactional
@Service
public class EmpServiceImpl implements EmpService {

	@Autowired
	private EmpMapper mapper;
	
	/**
	 * 分页的查询操作
	 */
	@Transactional(readOnly=true) //readOnly=true 表示不使用事务
	public PagerEntity queryEmp(int curPage,String name){
		
		if(name== null){
			name="";
		}else{
			name = "%"+name+"%";
		}
		
		//获取数据总条数
		int totalSize = mapper.queryEmpCount(name);
		//分页数据填充
		PagerEntity calc = PagerUtils.calc(curPage, 10, totalSize);
		//获取开始索引
		int startIndex = calc.getStartIndex();
		//获取结束索引
		int endIndex = calc.getEndIndex();
		//根据索引到数据库中查询
		List<Emp> list = mapper.queryEmp(name, startIndex, endIndex);
		//将list 设置到 calc对象中
		calc.setData(list);
		return calc;
	}
	
	/* (non-Javadoc)
	 * @see cn.et.emp.service.EmpService#addEmp(cn.et.emp.object.User)
	 */
	public void addEmp(Emp emp){
		mapper.addEmp(emp);
	}
	
	/* (non-Javadoc)
	 * @see cn.et.emp.service.EmpService#deleteEmp(cn.et.emp.object.User)
	 */
	public void deleteEmp(String empNo){
		mapper.deleteEmp(empNo);
	}
	
	/* (non-Javadoc)
	 * @see cn.et.emp.service.EmpService#updateEemp(cn.et.emp.object.User)
	 */
	public void updateEemp(Emp emp){
		mapper.updateEmp(emp);
	}
}

controller

package cn.et.controller;

import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

import javax.servlet.ServletOutputStream;

import net.sf.json.JSONObject;

import org.apache.struts2.ServletActionContext;
import org.apache.struts2.convention.annotation.Action;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

import cn.et.entity.Emp;
import cn.et.service.EmpService;
import cn.et.utils.PagerEntity;

import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

@Controller
public class EmpAction extends ActionSupport implements ModelDriven<Emp>{
	
	@Autowired
	private EmpService service;
	private Emp emp;
	private Integer curPage;
	
	
	public ServletOutputStream getOS() throws IOException{
		
		return ServletActionContext.getResponse().getOutputStream();
	}
	/**
	 * 
	 * 使用分页功能
	 * curPage表示要获取数据的当前页
	 * @param name
	 * @param os
	 * @throws IOException 
	 * @throws UnsupportedEncodingException 
	 */
	@Action(value="/queryEmp")
	public String query() throws IOException{
		PagerEntity pe = service.queryEmp(curPage, emp.getEname());
		String str = JSONObject.fromObject(pe).toString();
		getOS().write(str.getBytes("UTF-8"));
		return NONE;
	}
	
	/**
	 * 删除数据的方法
	 * @param enpNo
	 * @param os
	 * @throws UnsupportedEncodingException
	 * @throws IOException
	 */
	@Action(value="/delemp")
	public void delEmp() throws UnsupportedEncodingException, IOException{
		OutputStream os=getOS();
		try {
			service.deleteEmp(emp.getEmpNo().toString());
			//json接受的是字符串 不可以直接只用数字
			os.write("1".getBytes("utf-8"));
		} catch (Exception e) {
			os.write("0".getBytes("utf-8"));
		}
	}
	
	@Action(value="/addemp")
	public void addEmp() throws UnsupportedEncodingException, IOException{
		OutputStream os=getOS();
		try {
			service.addEmp(emp);
			os.write("1".getBytes("UTF-8"));
		} catch (Exception e) {
			System.out.println(e);
			os.write("0".getBytes("UTF-8"));
		}
	}
	
	@Action(value="/update")
	public void updateEmp() throws UnsupportedEncodingException, IOException{
		OutputStream os=getOS();
		try {
			service.updateEemp(emp);
			os.write("1".getBytes("UTF-8"));
		} catch (Exception e) {
			System.out.println(e);
			os.write("0".getBytes("UTF-8"));
		}
	}
	

	public Integer getCurPage() {
		return curPage;
	}
	public void setCurPage(Integer curPage) {
		this.curPage = curPage;
	}
	@Override
	public Emp getModel() {
		if(null==emp){
			emp = new Emp();
		}
		return emp;
	}
}


ajax.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    
    <title>My JSP 'ajax.jsp' starting page</title>
    
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
	
	<script type="text/javascript">
		
		var contextPath = "${pageContext.request.contextPath}";
	
		function $(id){
			return document.getElementById(id);
		}
		
		function sendAjax(url,param,callbacks){
			var xhr= new XMLHttpRequest();
			xhr.open("post", url, true);
			//post请求  必须要设置 请求头的参数  否则无法使用
			xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
			//当ajax的回调状态为4 和 页面码为200 调用callbacks并传入响应内容
			xhr.onreadystatechange=function(){
				if(xhr.readyState==4 && xhr.status==200){
					callbacks(xhr.responseText);
				}
			}
			xhr.send(param);
		}
		
		function add_td(td_data){
			var trTd=document.createElement("td");
                	//添加数据
               	trTd.innerHTML=td_data;
            return trTd;
		}
		
		var Curpage=0;
			//总页数
		var	totalPage=0;
			//总条数
		var	totalCount=0;
			//下一页
		var	nextPage=1;
			//上一页
		var	prePage=1;
		
		
		function query(curPage){
			if(!curPage){
				curPage=1;
			}
		
			//申请xhr对象
			var xhr= new XMLHttpRequest();
			var name =$("name").value;
			//调用xhr.open方法初始化请求参数
			/* open方法的第一个参数表示 发送请求的方式 
					         第二个参数表示 发送到那个路径
					         第三个参数表示   异步(true)或者同步(false)
			*/ 
			xhr.open("GET", "${pageContext.request.contextPath}/queryEmp?ename="+name+"&curPage="+curPage, true);
			//设置响应的回调,当后台返回JSON后,调用xhr.onreadystatechange指定的函数;
			xhr.onreadystatechange=function(){
		
             /**
               ajax调用后台action会回调该方法 多次
                 xhr.readyState 
                    0: 请求未初始化
					1: 服务器连接已建立
					2: 请求已接收
					3: 请求处理中
					4: 请求已完成,且响应已就绪
					在第四种状态的时候获取到json
             **/
             if(xhr.readyState==4 && xhr.status==200){
             	//获取到的JSON是个字符串转换成json对象
             	 var allJson = JSON.parse(xhr.responseText)
             	  //转换成json对象
              	 var jsonObj=allJson.data;
             	//获取当前页
				Curpage=allJson.curPage;
				//总页数
				totalPage=allJson.pageCount;
				//总条数
				totalCount=allJson.totalSize;
				//下一页
				nextPage=allJson.nextPage;
				//上一页
				prePage=allJson.prePage;
				
				$("surspan").innerText=Curpage;
				$("sum").innerText=totalPage;
				$("count").innerText=totalCount;
              
             	 
             	 
             	//往表格中填充数据
             	var tb=$("td");
              	var tr=tb.getElementsByTagName("tr");
              	//因无刷新技术中,不会自动清除数据。所以每次查询前都需要清空表格中的数据
              	var length = tr.length;
              	for(var i=1;i<length;i++){
              	 tb.removeChild(tr[1]);
              	}
              	
              	//开始填充数据
              	for(var i=0;i<jsonObj.length;i++){
              		//获取jsobObj的每一行的数据
              		var rowData=jsonObj[i];
              		
              		//创建表格的行和列
              		var trRow=document.createElement("tr");
              		//调用add_td函数创建列并充填数据 在加入到tr中
	               	trRow.appendChild(add_td(rowData.ename));
                	trRow.appendChild(add_td(rowData.job));
           			trRow.appendChild(add_td(rowData.mgr));
           			trRow.appendChild(add_td(rowData.hiredate));
           			trRow.appendChild(add_td(rowData.sal));
           			trRow.appendChild(add_td(rowData.comm));
           			trRow.appendChild(add_td(rowData.deptno));
           			var td = document.createElement("td");
           			var inp = td.innerHTML='<input type="button" value="X" οnclick=deleteEmp('+rowData.empNo+')><input type="button" value="U" οnclick=toUpdate('+rowData.empNo+',"'+rowData.ename+'","'+rowData.job+'","'+rowData.mgr+'","'+rowData.sal+'","'+rowData.comm+'","'+rowData.deptno+'")>';
           			trRow.appendChild(td);
                	//将tr加入到表格中
                 	tb.appendChild(trRow);
              	}
             }
			}
			//真正发起请求的sned()方法
			xhr.send();
		
		}
		
		function toUpdate(empNo,ename,job,mgr,sal,comm,deptno) {
		  document.getElementById('updateDiv').style.display='block';
			$("empNoId").value=empNo;
			$("upEname").value=ename;
			$("upJOB").value=job;
			$("upMGR").value=mgr;
			$("upSAL").value=sal;
			$("upCOMM").value=comm;
			$("upDEPTNO").value=deptno;
		}
		
		function updateEmp(){
			var id = $("empNoId").value
			var ename = $("upEname").value
			var job = $("upJOB").value
			var mgr = $("upMGR").value
			var sal	= $("upSAL").value
			var comm = $("upCOMM").value
			var deptno = $("upDEPTNO").value
			var param = "empNo="+id+"&ename="+ename+"&job="+job+"&mgr="+mgr+"&sal="+sal+"&comm="+comm+"&deptno="+deptno;
			sendAjax(contextPath+"/update",param, function(text) {
				if(text==1){
					document.getElementById('updateDiv').style.display='none';
					alert("修改成功");
					query(Curpage);
				}else{
					alert("修改失败");
				}
			})
		}
		
		function deleteEmp(EMPNO){
			var url = contextPath+"/delemp";
			var param = "empNo="+EMPNO;
			sendAjax(url,param,function(text){
				if(text==1){
					alert("删除成功");
					query(Curpage);
				}else{
					alert("删除失败");
				}
			})
		}
		
		function addEmp(){
			var	name = $("addEname").value;
			var	job = $("addJOB").value;
			var	mgr = $("addMGR").value; 
			var	date = $("addHIREDATE").value;
			var	sal = $("addSAL").value;
			var	comm = $("addCOMM").value;
			var	deptno = $("addDEPTNO").value;
			var param = "ename="+name+"&job="+job+"&mgr="+mgr+"&date="+date+"&sal="+sal+"&comm="+comm+"&deptno="+deptno;
			sendAjax(contextPath+"/addemp",param,function(text){
				if(text==1){
					document.getElementById('addDiv').style.display='none';
					alert("添加成功");
					query(Curpage);
				}else{
					alert("添加失败");
				}
			})
		}
		
	</script>
  </head>
  
  <body οnlοad="query(1)">
   	<input type="text" name="name" id="name"/>
   	<input type="button" value="查询" οnclick="query(1)"/>
   	<input type="button" value="新增" οnclick="document.getElementById('addDiv').style.display='block'">
   	

   	<table id="td">

   		<tr>
			<td>员工名称11</td>
			<td>员工职称</td>
			<td>所属领导</td>
			<td>入司时间</td>
			<td>工资</td>
			<td>奖金</td>
			<td>所属部门</td>
			<td>操作</td>
   		</tr>
   	</table>
   	
   	<input type="image" src="${pageContext.request.contextPath}/image/18.gif" οnclick="query(1)"/>
   	<input type="image" src="${pageContext.request.contextPath}/image/20.gif" οnclick="query(prePage)"/>
   	当前 <span id="surspan"></span> 页  总 <span id="sum"></span> 页  总条数 <span id="count"></span>
   	<input type="image" src="${pageContext.request.contextPath}/image/16.gif" οnclick="query(nextPage)"/>
   	<input type="image" src="${pageContext.request.contextPath}/image/14.gif" οnchange="query(totalPage)"/>
   	
   	   <!-- 新增的div -->
	<div id="addDiv" style="display:none;position: absolute;left: 35%;top: 40%;width: 300px;height:100px;background:linear-gradient(to bottom,skyblue,gray);border: 1px solid black;">
		<input type="hidden" name="_method" value="post">
		员工名称: <input type='text' id="addEname" name='user.ename'><Br/>
		员工职称: <input type='text' id="addJOB"  name='user.job'><Br/>
		所属领导: <input type='text' id="addMGR"  name='user.mgr'><Br/>
		入司时间: <input type='text' id="addHIREDATE" name='user.hiredate'><Br/>
		工资: <input type='text' id="addSAL"  name='user.sal'><Br/>
		奖金: <input type='text' id="addCOMM" name='user.comm'><Br/>
		所属部门: <input type='text' id="addDEPTNO"  name='user.deptno'><Br/>
		<input type='button' οnclick="addEmp()" value="保存">
		<input type='button' value="关闭" οnclick="document.getElementById('addDiv').style.display='none'">
	</div>
   
   <!-- 修改的div -->
    <div id="updateDiv" style="display:none;position: absolute;left: 35%;top: 40%;width: 300px;height:100px;background:linear-gradient(to bottom,skyblue,gray);border: 1px solid black;">
		<input type="hidden" name="_method" value="put"/>
		<input type='hidden' id='empNoId' name='user.empNo'/> 
		员工名称: <input type='text' id="upEname" name='user.ename'><Br/>
		员工职称: <input type='text' id="upJOB"  name='user.job'><Br/>
		所属领导: <input type='text' id="upMGR"  name='user.mgr'><Br/>
		工资: <input type='text' id="upSAL"  name='user.sal'><Br/>
		奖金: <input type='text' id="upCOMM" name='user.comm'><Br/>
		所属部门: <input type='text' id="upDEPTNO"  name='user.deptNo'><Br/>
	    <input type='button' value='保存' οnclick="updateEmp()">
	    <input type='button' value="关闭" οnclick="document.getElementById('updateDiv').style.display='none'">
  	</div>
  
  </body>
</html>

Start 启动类

package cn.et;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;


@EnableTransactionManagement  //表示启动全局事务支持
@SpringBootApplication
public class Start {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		 SpringApplication.run(Start.class, args); 
	}

}


分页代码
























































































  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值