zoukankan      html  css  js  c++  java
  • SpringMVC使用AJAX向后台传送对象数组

    废话就不多说了直接上代码吧

    1、我们配置好自动生成代码和mapper文件的.xml文件

    见上一篇MyBatis-Generator 基本使用方法博客。

    2、配置mybatis-config.xml文件

    jdbc.properties文件代码如下:

    driver = org.mariadb.jdbc.Driver
    url = jdbc:mariadb://localhost:3306/EmployeeDB
    username = root
    password = root

    mybatis-config.xml文件代码如下:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
    
    <configuration>
        <!-- 定义可以复用的变量 -->
        <!--<properties resource="jdbc.properties"/>-->
    
        <!--配置文件-->
        <settings>
            <!-- 使用jdbc的getGeneratedKeys获取数据库自增主键值 -->
            <setting name="useGeneratedKeys" value="true" />
            <!-- 使用列别名替换列名 默认:true -->
            <setting name="useColumnLabel" value="true" />
            <!-- 开启驼峰命名转换:Table {create_time} -> Entity {createTime} -->
            <setting name="mapUnderscoreToCamelCase" value="true" />
        </settings>
        
        <!-- 给类设置别名,简化xml文件 -->
        <!--<typeAliases>-->
            <!--<typeAlias alias="entity" type="com.xiaobai.entity.CustomerEntity"/>-->
            <!--扫描该包下的所有类-->
            <!--<package name="com.xiaobai.entity"/>-->
        <!--</typeAliases>-->
    
        <!-- 类型转换器 -->
        <!--<typeHandlers>-->
            <!--<typeHandler handler="com.xiaobai.dao.InvoiceDAO"/>-->
            <!--<package name="com.xiaobai.dao"/>-->
        <!--</typeHandlers>-->
    
        <!--<plugins>-->
            <!--<plugin interceptor="com.github.pagehelper.PageInterceptor">-->
                <!--<property name="param1" value="value1"/>-->
            <!--</plugin>-->
        <!--</plugins>-->
        <plugins>
            <plugin interceptor="com.github.pagehelper.PageInterceptor" />
        </plugins>
    
        <!--<environments default="development">-->
            <!--<environment id="development">-->
                <!--<transactionManager type="JDBC"></transactionManager>-->
                <!--<dataSource type="POOLED">-->
                    <!--<property name="driver" value="${driver}"/>-->
                    <!--<property name="url" value="${url}"/>-->
                    <!--<property name="username" value="${username}"/>-->
                    <!--<property name="password" value="${password}"/>-->
                <!--</dataSource>-->
            <!--</environment>-->
        <!--</environments>-->
    
        <!-- 指定映射器 -->
        <!--<mappers>-->
            <!--<mapper resource="mapper/PersonMapper.xml"/>-->
        <!--</mappers>-->
    
    </configuration>
    

    3、配置需要的Spring配置文件

    spring-web.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:contxt="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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <!--扫描包下面所有的 @Controller 注解的类,并将其实例化,放入容器-->
        <contxt:component-scan base-package="com.xiaobai.controller" />
    
        <!-- 启用mvc 的常用注解 -->
        <mvc:annotation-driven />
    
        <!-- 将所有的静态资源,交给 Servlet处理 -->
        <mvc:default-servlet-handler />
    
        <!-- 配置 jsp -->
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
            <property name="prefix" value="/WEB-INF/jsp/" />
            <property name="suffix" value=".jsp" />
        </bean>
    
    </beans>

    spring-dao.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:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    
        <!--使用外部文件-->
        <context:property-placeholder location="classpath:jdbc.properties" />
    
        <!--创建数据源-->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="org.mariadb.jdbc.Driver" />
            <property name="jdbcUrl" value="jdbc:mariadb://localhost:3306/EmployeeDB" />
            <property name="user" value="root" />
            <property name="password" value="Qi1007.." />
    
            <property name="maxPoolSize" value="30" />
            <property name="minPoolSize" value="10" />
            <property name="autoCommitOnClose" value="false" />
            <property name="checkoutTimeout" value="10000" />
            <property name="acquireRetryAttempts" value="2" />
        </bean>
    
        <!--配置 mybatis-->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="typeAliasesPackage" value="com.xiaobai.model" />
            <property name="configLocation" value="classpath:mybatis-config.xml" />
            <property name="mapperLocations" value="classpath:mapper/*.xml" />
        </bean>
    
        <!--自动注入 Mapper-->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
            <property name="basePackage" value="com.xiaobai.dao" />
        </bean>
    
        <!--配置声明式事务管理-->
        <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="dataSource" />
        </bean>
        <tx:annotation-driven proxy-target-class="true" />
    
    </beans>

    spring-service.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:context="http://www.springframework.org/schema/context"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
    
        <!--启用注解 @Component-->
        <context:component-scan base-package="com.xiaobai" />
    
        <!-- 启用 aspectj 方式 AOP-->
        <aop:aspectj-autoproxy proxy-target-class="true" />
    
    </beans>

    4、配置日志文件log4j.properties

    # 全局配置: 只显示错误级别的日志,输出为名字为 stdou 的日志
    log4j.rootLogger=ERROR, stdout
    
    # MyBatis 的日志配置,只输出 com.nf147.bookstore_ssm.dao 包下产生 INFO 以及以上级别的日志
    #TRACE为日志级别,可进行修改
    log4j.logger.com.nf147.bookstore_ssm.dao=TRACE
    
    # 定义名字为 stdout 的日志,将日志输出到控制台
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
    
    #log4j.appender.database=org.apache.log4j.jdbc.JDBCAppender
    #log4j.appender.database.layout=org.apache.log4j.PatternLayout
    #log4j.appender.database.driver=org.mariadb.jdbc.Driver
    #log4j.appender.database.Threshold=TRACE
    #log4j.appender.database.BufferSize=1
    #log4j.appender.database.URL=jdbc:mariadb://localhost:3306/lagou
    #log4j.appender.database.user=root
    #log4j.appender.database.password=Qi1007..
    #log4j.appender.database.sql=insert into log (class,method,createtime,loglevel,msg) VALUES ('%C','%M','%d{yyyy-MM-dd hh:mm:ss}','%p','%m')

    5、编写controller类

    EmployeeController类代码如下:

    package com.xiaobai.controller;
    
    import com.google.gson.Gson;
    import com.xiaobai.dao.EmployeeMapper;
    import com.xiaobai.entity.Employee;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.List;
    
    @Controller
    //初次访问的路径
    @RequestMapping("/")
    public class EmployeeController {
        @Autowired
        private EmployeeMapper employeeMapper;
    
        //映射路径
        @RequestMapping(method = RequestMethod.GET)
        public String home (Model model) {
            return "home";
        }
    
        //@ResponseBody 返回json对象
        @ResponseBody
        //produces 设置返回对象的格式
        @RequestMapping(value = "/findAll", method = RequestMethod.GET,produces = "application/json;charset=utf-8")
        public String findAll (Model model) {
            List<Employee> employeeList = employeeMapper.selectAll();
            return new Gson().toJson(employeeList);
        }
    
    
        @RequestMapping("/insert")
        @ResponseBody
        public String insertAll (@RequestBody List<Employee> employeeList) {
            //循环调用插入事件
            for (Employee employee : employeeList) {
                employeeMapper.insert(employee);
            }
            return "{"msg":"成功"}";
        }
    
    }

    6、编写返回的页面home.jsp

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@ page isELIgnored="false" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <style>
        #employeeList th, #employeeList td {
             150px;
        }
    </style>
    <body>
    
    <table border="0" cellspacing="0" cellpadding="8" style="text-align: center" id="table">
        <th>员工编号</th>
        <th>姓名</th>
        <th>性别</th>
        <th>学历</th>
        <th>月薪</th>
        <th>添加</th>
        <th>移除</th>
    
    <tbody id="tbody">
        <tr>
            <td><input type="text" name="employeeId" id="employeeId"></td>
            <td><input type="text" name="employeeName" id="employeeName"></td>
            <td>
                <select name="employeeSex" id="employeeSex">
                    <option value="">请选择</option>
                    <option value="1">男</option>
                    <option value="0">女</option>
                </select>
            </td>
            <td>
                <select name="educationId">
                    <option value="">请选择</option>
                </select>
            </td>
            <td><input type="number" name="employeeMoney" id="employeeMoney"></td>
            <td><input type="button" value="+" class = "addBtn"></td>
            <td><input type="button" value="-" onclick="subButton(this)"></td>
        </tr>
    </tbody>
    
        <tr>
            <td colspan="7"><input type="button" value="批量提交" id="insertAll"></td>
        </tr>
    
    </table>
    <br/><br/><br/><br/>
    
    
    <table border="1" cellspacing="0" cellpadding="1" id="employeeList" style="text-align: center">
        <tr>
            <th>员工编号</th>
            <th>姓名</th>
            <th>性别</th>
            <th>学历</th>
            <th>月薪</th>
        </tr>
    </table>
    
    
    <script src="js/jquery-3.3.1.min.js"></script>
    <script>
    
        // ajax 获取学历列表
        var education = function () {
            $("select[name='educationId'] option").remove();
            $("select[name='educationId']").append("<option value=''>请选择</option>")
            $.ajax({
                url:"/educationFindAll",
                type:"get",
                success:function(data){
                    $.each(data,function(index,val){
                        $("select[name='educationId']").append("<option value="+val.educationId+">"+val.educationName+"</option>")
                    })
                }
            })
        }
    
        //ajax 获取employee所有信息
        var list = function () {
            $.ajax({
                url:"/findAll",
                type:"get",
                success:function(data){
                    $.each(data,function(index,value){
                        if(value.employeeSex == 1)
                            $("#employeeList").append("<tr><td>"+value.employeeId+"</td><td>"+value.employeeName+"</td><td>男</td><td>"+value.educationInfo.educationName+"</td><td>"+value.employeeMoney+"</td></tr>");
                        else
                            $("#employeeList").append("<tr><td>"+value.employeeId+"</td><td>"+value.employeeName+"</td><td>女</td><td>"+value.educationInfo.educationName+"</td><td>"+value.employeeMoney+"</td></tr>");
                    })
                }
            })
            education();
        }
        list();
    
        // 克隆节点
        // function addButton() {
            // $("#tbody").append("<tr>
    " +
            //     "        <td><input type="text" name="employeeId" id="employeeId"></td>
    " +
            //     "        <td><input type="text" name="employeeName" id="employeeName"></td>
    " +
            //     "        <td>
    " +
            //     "            <select name="employeeSex" id="employeeSex">
    " +
            //     "                <option value="">请选择</option>
    " +
            //     "                <option value="1">男</option>
    " +
            //     "                <option value="0">女</option>
    " +
            //     "            </select>
    " +
            //     "        </td>
    " +
            //     "        <td>
    " +
            //     "            <select name="educationId">
    " +
            //     "                <option value="">请选择</option>
    " +
            //     "            </select>
    " +
            //     "        </td>
    " +
            //     "        <td><input type="number" name="employeeMoney" id="employeeMoney"></td>
    " +
            //     "        <td><input type="button" value="+" onclick="addButton(this)"></td>
    " +
            //     "        <td><input type="button" value="-" onclick="subButton(this)"></td>
    " +
            //     "    </tr>")
            // education();
        // }
        $("#tbody").on("click",".addBtn",function(){
            $(this).parents("tr").clone().appendTo($("#tbody"));
        })
    
        //删除节点
        function subButton(sub) {
            var parent = $(sub).parent().parent("tr");
            var length = $("#table tr").length;
            if (length != 3) {
                parent.remove();
            } else {
                alert("就只有一行了,再删你怎么添加")
            }
        }
    
        // 批量添加
        //使用ajax向后台提交对象数组
        $("#insertAll").click(function () {
            // 定义一个数组
            var employeeList = new Array();
            //获取所有tr
            var tr = $("#tbody tr");
            //循环遍历所有tr对象
            $.each(tr,function(index,obj){
                //添加到数组中
                employeeList.push({
                    "employeeId": $("input[name='employeeId']",obj).val(),
                    "employeeName": $("input[name='employeeName']",obj).val(),
                    "employeeSex": $("select[name='employeeSex']",obj).val(),
                    "educationId": $("select[name='educationId']",obj).val(),
                    "employeeMoney": $("input[name='employeeMoney']",obj).val()
                });
            })
    
            $.ajax({
                type: "POST",
                url: "/insert",
                //设置传送后台的数据格式
                contentType:"application/json;charset=utf-8",
                //转json对象
                data: JSON.stringify(employeeList),
                success: function (data) {
                    //刷新页面
                    window.location.reload();
                    list();
                }
            });
        })
    </script>
    </body>
    </html>
  • 相关阅读:
    微软企业库调用Oracle存储过程返回(1个或多个)数据集
    (转)Oracle表空间
    HTML5操作
    完美实现 ASP.NET 2.0 中的URL重写伪静态(映射) &gt;(转载)的简介与内容
    HTML5 audio 详解
    步步为营:Asp.Net使用HttpWebRequest通知,抓取,采集(转)
    js cookie操作
    多线线程
    js with用法
    asp.net AllowSorting="true"仍然不能排序的原因
  • 原文地址:https://www.cnblogs.com/Qi1007/p/9873103.html
Copyright © 2011-2022 走看看