spring,springmvc,mybatis,AJAX集成+alibaba的连接池druid

 

在pom.xml所需要的jar包

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>SSMA</groupId>
  <artifactId>SSMA</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <name/>
  <description/>
  <dependencies>
  	<!-- springmvc jar包 -->
  	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-webmvc</artifactId>
		<version>4.2.0.RELEASE</version>
	</dependency>
	
	<!-- 事务所需要的jar包 -->
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-aop</artifactId>
		<version>4.2.0.RELEASE</version>
	</dependency>
	<dependency>
		<groupId>org.springframework</groupId>
		<artifactId>spring-tx</artifactId>
		<version>4.2.0.RELEASE</version>
	</dependency>
	<dependency>  
         <groupId>aopalliance</groupId>  
         <artifactId>aopalliance</artifactId>  
         <version>1.0</version>  
    </dependency>  
    <dependency>  
         <groupId>aspectj</groupId>  
         <artifactId>aspectjweaver</artifactId>  
         <version>1.5.3</version>  
    </dependency>  
	
	<!-- mybatis集成spring需要的jar包 -->
	<dependency>
	  <groupId>org.mybatis</groupId>
	  <artifactId>mybatis-spring</artifactId>
	  <version>1.2.3</version>
	</dependency>
	
	<!-- mybatisjar包 -->
	<dependency>
		<groupId>org.mybatis</groupId>
		<artifactId>mybatis</artifactId>
		<version>3.2.8</version>
	</dependency>
  
  
  	<!-- mysql jar包 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.26</version>
	</dependency>
  
  	<!-- 引用阿里巴巴的连接池 -->
  	<dependency>
  		<groupId>com.alibaba</groupId>
  		<artifactId>druid</artifactId>
  		<version>1.1.5</version>
  	</dependency>
  
  	<!-- jdbc的jar包 -->
  	<dependency>
		 <groupId>org.springframework</groupId>
		 <artifactId>spring-jdbc</artifactId>
		 <version>4.2.0.RELEASE</version>
	</dependency>
  
  <!-- 添加jackson的json解析庫 -->
		<dependency>
		  <groupId>com.fasterxml.jackson.core</groupId>
		  <artifactId>jackson-core</artifactId>
		  <version>2.6.0</version>
		</dependency>
		<dependency>
		  <groupId>org.codehaus.jackson</groupId>
		  <artifactId>jackson-core-asl</artifactId>
		  <version>1.9.12</version>
		</dependency>
		<dependency>
		  <groupId>com.fasterxml.jackson.core</groupId>
		  <artifactId>jackson-annotations</artifactId>
		  <version>2.6.0</version>
		</dependency>
		<dependency>
		  <groupId>com.fasterxml.jackson.core</groupId>
		  <artifactId>jackson-databind</artifactId>
		  <version>2.6.0</version>
		</dependency>
		<dependency>
		  <groupId>org.codehaus.jackson</groupId>
		  <artifactId>jackson-mapper-asl</artifactId>
		  <version>1.9.12</version>
		</dependency>
  
  
  
  
  
  
  
  <!-- 自带的jar包 -->
    <dependency>
      <groupId>org.apache.openejb</groupId>
      <artifactId>javaee-api</artifactId>
      <version>5.0-1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.faces</groupId>
      <artifactId>jsf-api</artifactId>
      <version>1.2_04</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>jsp-api</artifactId>
      <version>2.1</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>javax.faces</groupId>
      <artifactId>jsf-impl</artifactId>
      <version>1.2_04</version>
      <scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
    <sourceDirectory>${basedir}/src</sourceDirectory>
    <outputDirectory>${basedir}/WebRoot/WEB-INF/classes</outputDirectory>
    <resources>
      <resource>
        <directory>${basedir}/src</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
          <webappDirectory>${basedir}/WebRoot</webappDirectory>
          <warSourceDirectory>${basedir}/WebRoot</warSourceDirectory>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>

 

web.xml的配置  如需查看监听  /druid

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
   <!-- 
   		==========================================
   			spring的配置
   		==========================================
    -->
   <context-param>
   	<param-name>contextConfigLocation</param-name>
   	<param-value>classpath:spring.xml</param-value>
   </context-param>
   <listener>
   	<!-- 
   		加载spring.xml文件
   	 -->
   	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>
   
   
   
   
   
   
   <!-- 
   		==============================================
   			springmvc配置
   		==============================================
    -->
   <!-- 
   		设值乱码问题
    -->
   <filter>
	  <filter-name>myFilter2</filter-name>
	  <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	  <init-param>
	  <!-- 设request字符集 -->
	  <param-name>encoding</param-name>
	  <param-value>UTF-8</param-value>
	  </init-param>
	  <init-param>
	  <!--设response字符集,跟随request -->
	  <param-name>forceEncoding</param-name>
	  <param-value>true</param-value>
	  </init-param>
  	</filter>
	<filter-mapping>
	  <filter-name>myFilter2</filter-name>
	  <url-pattern>/*</url-pattern>
  	</filter-mapping>
   
   <!-- 
   		配置springmvc支持 restful风格url  四个动作  get post put delete
   		put+delete  需要在form表单中  添加一个隐藏表单域  
   					<input type='hidden' name="_method" value="delete">  
    -->
  <filter>
	  <filter-name>myFilter</filter-name>
	  <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
  </filter>
  <filter-mapping>
	  <filter-name>myFilter</filter-name>
	  <url-pattern>/*</url-pattern>
  </filter-mapping>
   
   
   
   <!-- spring mvc的核心配置器 -->
    <servlet>
		<servlet-name>mvc</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<!-- 可以指定扫描的spring.xml文件 -->
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/mymvc.xml</param-value>
		</init-param>
		<!-- 启动实例化 -->
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>mvc</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
  
  
  
  
  <!-- 启动druid的监控功能 -->
   <servlet>
		<servlet-name>mydruid</servlet-name>
		<servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class>
		<!-- 设值密码和账号 -->
		<init-param>
			<param-name>loginUsername</param-name>
			<param-value>123456</param-value>
		</init-param>
		<init-param>
			<param-name>loginPassword</param-name>
			<param-value>123456</param-value>
		</init-param>
		<!-- 启动实例化 -->
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>mydruid</servlet-name>
		<url-pattern>/druid/*</url-pattern>
	</servlet-mapping>
  
  
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

 

 

springmvc.xml的配置     springmvc.xml 配置控制层处理+视图层

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
		http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd
		">
		
		<!-- ==================springmvc.xml 配置控制层处理+视图层 ==============================-->
		 
		 <!-- 扫描cn包下的注解 -->
		<context:component-scan base-package="cn">
			<!-- 排除扫描事务逻辑层和持久层的注解 -->
			<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
			<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
		</context:component-scan>
		
		
		<!-- 注解驱动 -->
		<mvc:annotation-driven>
			<!-- josn的消息转换器 -->
			<mvc:message-converters>
				<!-- 用于字節數組的消息轉換器 -->
				<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter">
					<property name="supportedMediaTypes">
						<list>
							<value>text/html</value>
							<value>application/x-www-form-urlencoded</value>
						</list>
					</property>
				</bean>
				<!-- 用于對象消息轉換器 -->
				<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
					<property name="supportedMediaTypes">
						<list>
							<value>text/html</value>
							<value>application/x-www-form-urlencoded</value>
						</list>
					</property>
				</bean>
		</mvc:message-converters>
	</mvc:annotation-driven>
</beans>

在spring.xml同级下创建properties文件 配置连接数据库的四要素

url=jdbc:mysql://localhost:3306/test
driverClass=com.mysql.jdbc.Driver
username1=root
password=123456

 

spring.xml配置   spring.xml 配置管理事务逻辑层+持久层  使用了阿里巴巴的druid的连接池

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:aop="http://www.springframework.org/schema/aop" 
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd 
		">
		
		<!-- ===========spring.xml 配置管理事务逻辑层+持久层 =====================-->
		
		<!-- 扫描cn包下的注解 -->
		<context:component-scan base-package="cn">
			<!-- 排除扫描控制层的注解 -->
			<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
		</context:component-scan>
		
		<!-- 
			所有数据库操作的源都实现自DataSouce
			DriverManagerDataSource(请求产生一个连接  用完关闭==效率慢     要来接重用  使用连接池)
			连接池======c3p0  dbcp   druid(阿里的产品)
		 -->
		<context:property-placeholder location="classpath:mysql.properties"/>//扫描properties文件获取数据库的四要素
		<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
			<property name="url" value="${url}"></property>
			<property name="driverClassName" value="${driverClass}"></property>
			<property name="username" value="${username1}"></property>
			<property name="password" value="${password}"></property>
			<!-- 默认初始化连接个数 -->
			<property name="initialSize" value="1"></property>
			<!-- 连接数的最大值 -->
			<property name="maxActive" value="200"></property>
			<!-- 最大的等待的线程 -->
			<property name="maxIdle" value="100"></property>
			<!-- 开启sql语句的统计功能 -->
			<property name="filters" value="stat"></property>
		</bean>
		
		<!-- ======集成mybatis====== -->
		
		<!-- 配置产生session工厂 -->
		<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
			<property name="dataSource" ref="dataSource"></property>
		</bean>
		<!-- 配置产生session -->
		<bean id="sessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
			<constructor-arg index="0" ref="sqlSessionFactory"></constructor-arg>
		</bean>
		
		<!-- 扫描mybatis的接口映射 -->
		<bean id="scannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
			<property name="basePackage" value="cn.*..*.mapper"></property>
		</bean>
		
		
	<!-- ======事务管理配置========== -->
	<!-- 事务管理类 -->  
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <!-- 事务需要操作数据库     要把连接数据库的bean注入 -->  
        <property name="dataSource" ref="dataSource"></property>  
    </bean>
    
    <!-- 定义通知  通知的代码  spring已经实现 -->  
    <!-- 上面的id名为 id="transactionManager" 下面的 transaction-manager="transactionManager"可以不写-->  
    <tx:advice id="myAdvise" transaction-manager="transactionManager">  
        <tx:attributes>  
            <tx:method name="Update*" propagation="REQUIRED" rollback-for="Exception" isolation="SERIALIZABLE" timeout="5"/>  
            <tx:method name="save*" propagation="REQUIRED" rollback-for="Exception"/>  
            <tx:method name="delete*" propagation="REQUIRED" rollback-for="Exception"/>  
            <tx:method name="*" read-only="true"/>  
        </tx:attributes>  
    </tx:advice>  
    
	<!-- 定义切点 -->  
    <aop:config>  
                            <!-- 任意返回值   cn包下的任意多个包下的service包下的所有类、所有方法拦截 -->  
     <aop:pointcut expression="execution(* cn.*..*.service.*.*(..))" id="myPoint"/>  
        <!-- 把切点和通知绑定     <tx:advice> -->  
        <aop:advisor advice-ref="myAdvise" pointcut-ref="myPoint"/>  
    </aop:config>  	
</beans>


controller层 调用service层

package cn.et.food.controller;

import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import cn.et.food.service.MyFoodService;

@Controller
public class MyFoodController {
	@Autowired
	MyFoodService mdi;
	//查询
	/**
	 * 直接返回一个对象
	 */
	@ResponseBody
	@RequestMapping(value="/queryFoodList",method=RequestMethod.GET)
	public List<Map<String, Object>> queryFoodList(String foodname) throws UnsupportedEncodingException, IOException{
		List<Map<String, Object>> queryAllFood = mdi.queryAllFood(foodname);
		return queryAllFood;
	}
	
	//删除
	@RequestMapping(value="/deleteFood/{foodid}",method=RequestMethod.DELETE)
	public String deleteFood(@PathVariable String foodid, OutputStream os) throws UnsupportedEncodingException, IOException{
		try{
			mdi.deleteFood(foodid);
			os.write("1".getBytes("UTF-8"));
		}catch(Exception e){
			os.write("0".getBytes("UTF-8"));
		}
		return null;
	}
	
	
	//修改
	@RequestMapping(value="/updateFood/{foodid}",method=RequestMethod.PUT)
	public String updateFood(@PathVariable String foodid,String foodname,String price, OutputStream os) throws UnsupportedEncodingException, IOException{
		try{
			mdi.updateFood(foodid, foodname, price);
			//返回以代表成功
			os.write("1".getBytes("UTF-8"));
		}catch(Exception e){
			//返回0代表失败
			os.write("0".getBytes("UTF-8"));
		}
		return null;
	}
	
	
	//增加
	@RequestMapping(value="/saveFood",method=RequestMethod.POST)
	public String saveFood(String foodname,String price, OutputStream os) throws UnsupportedEncodingException, IOException{
		try{
			mdi.saveFood(foodname, price);
			os.write("1".getBytes("UTF-8"));
		}catch(Exception e){
			os.write("0".getBytes("UTF-8"));
		}
		return null;
	}
}


service层的实现类  接口这里就不写了(抽象出来一个接口就行了)    service层调用dao层

package cn.et.food.service.impl;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import cn.et.food.dao.MyFoodDao;
import cn.et.food.service.MyFoodService;

@Repository
public class MyFoodServiceImpl implements MyFoodService {
	@Autowired
	MyFoodDao dao;
	
	/* (non-Javadoc)
	 * @see cn.et.food.service.impl.MyFoodService#queryAllFood(java.lang.String)
	 */
	public List<Map<String, Object>> queryAllFood(String foodname){
		return dao.queryAllFood(foodname);
	}
	
	
	/* (non-Javadoc)
	 * @see cn.et.food.service.impl.MyFoodService#deleteFood(java.lang.String)
	 */
	public void deleteFood(String foodid){
		dao.deleteFood(foodid);
	}
	
	
	/* (non-Javadoc)
	 * @see cn.et.food.service.impl.MyFoodService#saveFood(java.lang.String, java.lang.String)
	 */
	public void saveFood(String foodname,String price){
		dao.saveFood(foodname, price);
	}
	
	
	/* (non-Javadoc)
	 * @see cn.et.food.service.impl.MyFoodService#updateFood(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void updateFood(String foodid,String foodname,String price){
		dao.updateFood(foodid, foodname, price);
	}
}

dao层的实现类    到层调用mapper

package cn.et.food.dao.impl;

import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import cn.et.food.dao.MyFoodDao;
import cn.et.food.mapper.FoodMapper;

@Repository
public class MyFoodDaoImpl implements MyFoodDao {
	@Autowired
	FoodMapper fm;
	/* (non-Javadoc)
	 * @see cn.et.food.dao.impl.MyFoodDao#queryAllFood(java.lang.String)
	 */
	public List<Map<String, Object>> queryAllFood(String foodname){
		return fm.queryAllFood(foodname);
	}
	
	/* (non-Javadoc)
	 * @see cn.et.food.dao.impl.MyFoodDao#deleteFood(java.lang.String)
	 */
	public void deleteFood(String foodid){
		fm.deleteFood(foodid);
	}
		
	
	/* (non-Javadoc)
	 * @see cn.et.food.dao.impl.MyFoodDao#saveFood(java.lang.String, java.lang.String)
	 */
	public void saveFood(String foodname,String price){
		fm.saveFood(foodname, price);
	}
	
	/* (non-Javadoc)
	 * @see cn.et.food.dao.impl.MyFoodDao#updateFood(java.lang.String, java.lang.String, java.lang.String)
	 */
	public void updateFood(String foodid,String foodname,String price){
		fm.updateFood(foodid, foodname, price);
	}
}

mapper层   使用注解执行sql语句

package cn.et.food.mapper;

import java.util.List;
import java.util.Map;

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

public interface FoodMapper {
	@Select("select * from food where foodName like '%${foodname}%'")
	public List<Map<String, Object>> queryAllFood(@Param("foodname") String foodname);
	
	@Delete("delete from food where foodid=#{0}")
	public void deleteFood(String foodid);
	
	@Insert("insert into food(foodName,price) values(#{0},#{1})")
	public void saveFood(String foodname,String price);
	
	@Update("update food set foodName=#{1},price=#{2} where foodid=#{0}")
	public void updateFood(String foodid,String foodname,String price);
}

jsp页面  使用的AJAX无刷新

<%@ 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 'list.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 flag=true;
	function a(){
		if(flag){
			document.getElementById("addDiv").style.display='none';
			flag=false;
		}else{
			document.getElementById("addDiv").style.display='block';
			flag=true;
		}
	}
	
	
	//封装了重复的代码
	function sendAjax(url,methodType,param,retnFunction){
		var xmlhttp=null;
		//兼容所有的浏览器 创建XHR对象
		if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
			xmlhttp = new XMLHttpRequest();
		} else {// code for IE6, IE5
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		
		xmlhttp.onreadystatechange=function() {
			if (xmlhttp.readyState==4 && xmlhttp.status==200){
				retnFunction(xmlhttp.responseText);
			}
		}
		
		if(methodType=="get"||methodType=="GET"){
			xmlhttp.open("GET",url+"?"+param,true);
			xmlhttp.send();
		}else{
			xmlhttp.open("POST",url,true);
			//charset=UTF-8  解决乱码问题
			xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");
			xmlhttp.send(param);
		}
	}
	
	//查询和删除
	function query() {
		var foodname=document.getElementsByName("foodName")[0].value;
		sendAjax("${pageContext.request.contextPath}/queryFoodList","GET",
		"foodname="+foodname,function(responseText){
				var resultJson=responseText;
		    	//转化为js对象  返回为一个集合
		    	var resultObj=JSON.parse(resultJson);
		    	//获取表格id为myTable对象
		    	var table=document.getElementById("myTable");
		    	//获取所有的name为dataTr的tr
		    	var allDataTr=document.getElementsByName("dataTr");
		    	for(var i=0;allDataTr.length;i++){
		    		//数组是动态变化的   删了第一个 第二个会变成第一个
		    		table.removeChild(allDataTr[0]);
		    	}
		    	
		    	//展示查询的结果
		    	for(var i=0;i<resultObj.length;i++){
		    		var obj=resultObj[i];
		    		
		    		//获取td对象
		    		var td=document.createElement("td");
		    		//设值
		    		td.innerText=obj.foodName;
		    		var td1=document.createElement("td");
		    		td1.innerText=obj.price;
		    		//获取一个td对象
		    		var td2=document.createElement("td");
		    		
		    		//删除按钮
		    		var ib=document.createElement("button");
		    		ib.innerText="删除";
		    		td2.appendChild(ib);
		    		
		    		//修改按钮
		    		var ib1=document.createElement("button");
		    		ib1.innerText="修改";
		    		td2.appendChild(ib1);
		    		
		    		
		    		
		    		//获取tr对象
		    		var tr=document.createElement("tr");
		    		//把获取的对象绑定在button按钮上
		    		ib.foodObj=obj;
		    		//把tr绑定在button按钮上
		    		ib.myLineTr=tr;
		    		//删除的事件
		    		ib.addEventListener("click",function(){
		    			//获取当前按钮
		    			var eventSrc=event.srcElement;
		    			table.removeChild(eventSrc.myLineTr);
		    			
		    			sendAjax("${pageContext.request.contextPath}/deleteFood/"+
		    			eventSrc.foodObj.foodid,"POST","_method=delete",function(responseText){
		    				if(responseText==1){
		    					alert("删除成功");
		    				}else{
		    					alert("删除失败");
		    				}
		    			})
		    		});
		    		
		    		
		    		//修改的事件
		    		ib1.foodObj=obj;
		    		ib1.addEventListener("click",function(){
		    			//获取当前按钮
		    			var eventSrc=event.srcElement;
		    			//显示窗口
		    			document.getElementById('updateDiv').style.display='block';
		    			document.getElementsByName("umyFoodName")[0].value=eventSrc.foodObj.foodName;
		    			document.getElementsByName("umyFoodPrice")[0].value=eventSrc.foodObj.price;
		    			document.getElementsByName("umyFoodid")[0].value=eventSrc.foodObj.foodid;
		    		});
		    		//给tr标签设一个标识
		    		tr.setAttribute("name","dataTr");
					//在tr追加td
					tr.appendChild(td);
					tr.appendChild(td1);
					tr.appendChild(td2);
					//把tr追加到table后
		    		table.appendChild(tr);
	  			}
		});
	}
	
	//新增
	function saveFood(){
		var myFoodName=document.getElementsByName("myFoodName")[0].value;
		var myFoodPrice=document.getElementsByName("myFoodPrice")[0].value;
		sendAjax("${pageContext.request.contextPath}/saveFood","POST",
		"foodname="+myFoodName+"&price="+myFoodPrice,function(responseText){
		    if(responseText==1){
		    	alert("新增成功");
		    	document.getElementById('addDiv').style.display='none';
		    	query();
		    }else{
		    	alert("新增失败");
		    }
		});
	}
	
	function updateFood(){
		var umyFoodName=document.getElementsByName("umyFoodName")[0].value;
		var umyFoodPrice=document.getElementsByName("umyFoodPrice")[0].value;
		var umyFoodid=document.getElementsByName("umyFoodid")[0].value;
		
		sendAjax("${pageContext.request.contextPath}/updateFood/"+umyFoodid,
		"POST","_method=put&foodname="+umyFoodName+"&price="+umyFoodPrice,function(responseText){
		    if(responseText==1){
		    	alert("修改成功");
		    	document.getElementById('updateDiv').style.display='none';
		    	query();
		    }else{
		    	alert("修改失败");
		    }
		});
	}
</script>

	</head>

	<body>
		<input type="text" name="foodName">
		<input type="button" value="提交" onclick="query()"> <input type="button" value="新增" onclick="a()">
	</body>

	<table id="myTable">
		<tr><th>菜品名</th><th>菜品价格</th><th>操作</th></tr>
	</table>
	
	<!-- 新增弹出的窗口 -->
	<div id="addDiv" style="display:none;position:absolute;left:40%;top:40%;z-index:100;border:1px solid black; width:200px;height:200px">
		              新增<br/>
		菜品名:<input type="text" name="myFoodName"/><br/>
		价格:<input type="text" name="myFoodPrice"/><br/>
		<input type="button" value="保存" onclick="saveFood()"/><input type="button" value="关闭" onclick="a()"/>
	</div>
	
	<!-- 修改弹出的窗口 -->
	<div id="updateDiv" style="display:none;position:absolute;left:40%;top:40%;
		z-index:100;border:1px solid black; width:200px;height:200px">
		              修改<br/>
		<input type="hidden" name="umyFoodid"/>
		菜品名:<input type="text" name="umyFoodName"/><br/>
		价格:<input type="text" name="umyFoodPrice"/><br/>
		<!-- onclick点击事件关闭窗口 -->
		<input type="button" value="确定" onclick="updateFood()"/><input type="button" value="关闭" 
		onclick="document.getElementById('updateDiv').style.display='none'"/>
	</div>
</html>

 

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值