新增的传递参数方法

本文介绍了在Web开发中,使用jQuery实现表单提交的三种常见方法:序列化传递参数、键值对传递参数和在路径后拼接参数。每种方法都有其适用场景和优缺点,序列化传递适合参数较多的情况,而键值对和拼接参数则适用于参数较少的场合。

视图层代码如下:

注意:为了显示代码,删了部分标签 ,重要的form标签也看不到 (from标签的id为myform)

<meta name="viewport" content="width=device-width" />
<title>form表单的提交方法</title>
<link href="~/Content/bootstrap-3.3.7-dist/css/bootstrap.min.css" rel="stylesheet" />
<script src="~/Content/bootstrap-3.3.7-dist/js/jquery-3.2.1.min.js"></script>
<style>
    .container {
        padding-top: 20px;
    }
</style>
</head>
<body>
<div class="container">
   <form class="form-horizontal" id="myform">     
   
            <div class="form-group">
                <label class="control-label col-md-3">姓名:</label>
                <div class="col-md-4">
                    <input class="form-control" type="text" value="" name="txtName" id="txtName" />
                </div>
            </div>
             <div class="form-group">
                <label class="control-label col-md-3">年龄:</label>
                <div class="col-md-4">
                    <input class="form-control" name="Age" id="Age"></input >
                </div>
            </div>
             <div class="form-group">
                <label class="control-label col-md-3">专业:</label>
                <div class="col-md-4">
                    <input class="form-control" name="Specialty" id="Specialty"></input >
                </div>
            </div>
             <div class="form-group">
                <label class="control-label col-md-3">学历:</label>
                <div class="col-md-4">
                    <input class="form-control" name="Education" id="Education"></input >
                </div>
            </div>
            <div class="form-group">
                <label class="control-label col-md-3">地址:</label>
                <div class="col-md-4">
                    <textarea class="form-control" name="txtAddress" id="txtAddress"></textarea>
                </div>
            </div>
            <div class="form-group">
              <button class="btn btn-primary col-md-offset-4"  id="btnSubmit">表单提交</button>  第一种 
            </div>
        </form>
</div>
    <script>

第一种:序列化传递参数 (相对比较多的参数适合用,但不利于在试图层判断数据是否为空.其实也可以在控制器那边判断)

注:因为form标签默认是用post提交的

$("#btnSubmit").click(function () {
var formDate = $("#myform").serializeArray();
      $.post("/ByCheManagement/QiCheDingHuo/InsertVehicle", formDate, function (data) {
               if (data == "success") {
                   alert("添加成功!"} else {
                 alert("添加失败!");
               }
           })

第二种:键值对传递参数(相对比较少的参数适合用)

 $("#btnSubmit").click(function () {
        var txtName= $('#myform input[name="txtName"]').val(); 
        var Age= $('#myform input[name="Age"]').val(); 
        var Specialty= $('#myform input[name="Specialty"]').val();
        var Education= $('#myform input[name="Education"]').val(); 
        var txtAddress= $('#myform input[name="txtAddress"]').val(); 
        if(txtName!= "" && Age!= "" && Specialty!= "" && Education!= "" && txtAddress!= ""{
       $.post("/ByCheManagement/QiCheDingHuo/InsertVehicle",{
       txtName:txtName,
       Age:Age,
       Specialty:Specialty,
       Education:Education,
       txtAddress:txtAddress
       } function (data) {
                if (data == "success") {
                    alert("添加成功!"} else {
                  alert("添加失败!");
                }
                }else{
                alert("请填写完整数据,再新增!");
                }
            })

第三种:在路径的后面拼接参数(相对比较少的参数适合用)

$("#btnSubmit").click(function () {
      var txtName= $('#myform input[name="txtName"]').val(); 
      var Age= $('#myform input[name="Age"]').val(); 
      var Specialty= $('#myform input[name="Specialty"]').val();
      var Education= $('#myform input[name="Education"]').val(); 
      var txtAddress= $('#myform input[name="txtAddress"]').val(); 
          if(txtName!= "" && Age!= "" && Specialty!= "" && Education!= "" && txtAddress!= ""{
     $.post("/ByCheManagement/QiCheDingHuo/InsertVehicle?txtName=" + txtName + "&Age="+Age+ "&Specialty="+Specialty+ "&Specialty="+Specialty+ "&txtAddress="+txtAddress,function (data) {
              if (data == "success") {
                  alert("添加成功!"} else {
                alert("添加失败!");
              }
                }else{
              alert("请填写完整数据,再新增!");
              }
          })
<think>嗯,用户问的是在Java的MyBatis Plus中使用Page进行分页查询时,如何新增自定义参数。首先,我需要回忆一下MyBatis Plus的分页机制。MyBatis Plus的分页通常是通过Page对象来实现的,这个对象包含了当前页、每页大小、总记录数等信息。但是用户可能需要在分页查询的同时传递一些额外的参数,比如过滤条件或者其他业务相关的参数。 首先,我应该考虑Page类的结构。默认情况下,Page可能没有直接提供添加自定义参数的字段或方法。那用户可能需要扩展这个Page类,添加自己需要的参数。比如创建一个子类,继承Page,并在其中添加额外的字段,然后提供getter和setter方法。 接下来,用户在使用这个自定义的Page类时,可以在创建实例后设置这些参数。然后在编写MyBatis的Mapper接口或者XML映射文件时,可以通过IPage对象来获取这些参数。例如,在XML中,使用${page.paramName}或者#{page.paramName}来引用这些自定义参数。需要注意的是,这里可能需要使用${}而不是#{},如果参数是用于动态SQL的部分,比如表名或者列名,不过要小心SQL注入的问题。 另外,用户可能还会想到另一种方法,就是直接在Page对象之外传递参数,比如将参数放在查询条件中,或者使用Map来传递。但这样的话可能不够直观,或者需要修改方法参数列表。而扩展Page类的方法可以让参数和分页信息一起封装,更加清晰。 不过,需要确认的是,MyBatis Plus的Page对象是否允许子类化,并且在执行分页查询时,是否能正确传递这些自定义参数到XML中。可能需要测试一下,确保在XML中可以访问到这些新增的字段。 还有一种情况,用户可能没有使用XML,而是使用MyBatis Plus的Wrapper来构建查询条件。这时候,自定义参数可能需要通过其他方式传递,比如在Wrapper中添加条件,或者使用线程局部变量等。但这种方法可能不够优雅,或者引入其他问题。 总结起来,最直接的方法应该是继承Page类,添加自定义字段,然后在Mapper的XML文件中通过IPage引用这些字段。同时,需要确保在Service层或Controller层创建自定义Page对象时,正确设置这些参数,并在查询方法传递这个自定义的Page实例。 此外,可能还需要注意,当执行分页查询后,返回的Page对象是否仍然是自定义类型,或者会被框架处理成基类Page,导致自定义字段丢失。需要确保Mapper方法返回的是正确的类型,或者在查询后重新赋值参数,但这可能比较复杂。 最后,应该提醒用户在实际编码中进行测试,确保自定义参数能够正确传递并在SQL中被使用,同时注意参数的安全性和正确性,避免SQL注入等问题。可能还需要检查MyBatis Plus的版本,不同版本可能有不同的实现细节,但大部分情况下,继承Page类的方法应该是可行的。</think>在 MyBatis Plus 中,使用 `Page` 分页查询时新增自定义参数,可以通过以下两种方式实现: --- ### **方法一:继承 `Page` 类,扩展自定义参数** 1. **创建自定义 `Page` 子类** 继承 `Page<T>` 并添加自定义字段,例如 `param1`、`param2`: ```java public class CustomPage<T> extends Page<T> { // 自定义参数 private String param1; private Integer param2; // 构造方法 public CustomPage(long current, long size) { super(current, size); } // Getter/Setter public String getParam1() { return param1; } public void setParam1(String param1) { this.param1 = param1; } public Integer getParam2() { return param2; } public void setParam2(Integer param2) { this.param2 = param2; } } ``` 2. **在查询中使用自定义 `Page`** 创建 `CustomPage` 实例并设置参数传递给 Mapper 方法: ```java CustomPage<User> page = new CustomPage<>(1, 10); page.setParam1("searchKey"); page.setParam2(100); IPage<User> result = userMapper.selectPage(page, null); ``` 3. **在 XML 或注解 SQL 中获取参数** 通过 `page.param1` 或 `page.param2` 访问自定义参数: ```xml <select id="selectPage" resultType="User"> SELECT * FROM user WHERE name LIKE CONCAT('%', #{page.param1}, '%') AND age > #{page.param2} LIMIT #{page.offset}, #{page.size} </select> ``` --- ### **方法二:使用 `Map` 传递额外参数** 如果不想扩展 `Page` 类,可以直接将 `Map` 作为参数传递: 1. **Mapper 接口方法** ```java IPage<User> selectPageWithParams(Page<User> page, @Param("params") Map<String, Object> params); ``` 2. **调用时传递参数** ```java Page<User> page = new Page<>(1, 10); Map<String, Object> params = new HashMap<>(); params.put("param1", "searchKey"); params.put("param2", 100); IPage<User> result = userMapper.selectPageWithParams(page, params); ``` 3. **在 SQL 中获取参数** ```xml <select id="selectPageWithParams" resultType="User"> SELECT * FROM user WHERE name LIKE CONCAT('%', #{params.param1}, '%') AND age > #{params.param2} LIMIT #{page.offset}, #{page.size} </select> ``` --- ### **注意事项** 1. **XML 中参数引用** - 如果使用 `#{}`,参数会被预编译(防 SQL 注入);若需动态 SQL(如表名、列名),需用 `${}`,但需自行确保安全性。 2. **Wrapper 条件构造器** 如果使用 `QueryWrapper`,可以通过 `wrapper.lambda()` 直接添加条件,无需通过 `Page` 传参: ```java QueryWrapper<User> wrapper = new QueryWrapper<>(); wrapper.like("name", "searchKey").gt("age", 100); Page<User> page = new Page<>(1, 10); userMapper.selectPage(page, wrapper); ``` --- 选择方法一或二取决于是否需要将参数与分页逻辑强绑定。通常推荐方法一,代码更清晰易维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值