勋章系统去

本文详细介绍了Spring Boot如何使用@RequestBody接收前端POST请求的JSON数据,包括GET请求的限制。同时,文章探讨了Java的foreach循环用法,解释了其在遍历数组和集合时的优势。接着,展示了layer.open在JavaScript中的应用,用于弹窗交互。此外,文章还讲解了jQuery的removeAttr方法用于移除元素属性,以及TKMapper在MyBatis中的使用,包括查询、插入、更新和删除操作的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.@RequestBody

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);

GET方式无请求体,所以使用@RequestBody接收数据时,前端不能使用GET方式提交数据,而是用POST方式进行提交。(get方式不能使用Requestbody)

在后端的同一个接收方法里,@RequestBody 与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。

注:一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam

总结:@requestbody的含义是在当前对象获取整个http请求的body里面的所有数据,因此spring就不可能将这个数据强制包装成Course或者List类型,并且从@requestbody设计上来说,只获取一次就可以拿到请求body里面的所有数据,就没必要出现有多个@requestbody出现在controller的函数的形参列表当中

2.java foreach循环用法_浅析java的foreach循环

使用foreach循环遍历数组和集合时,无需获得数组和集合的长度,无须根据索引来访问数组元素和集合元素,foreach循环自动遍历数组和集合的每一个元素。

foreach的语句格式:

for(type variableName : array|connection){
//variable自动迭代访问每一个元素

}

例子:

public class ForEachTest

{
public static void main(String[] args)

{
String[] books = {"java","c","c++","c#","asp"};

for(String book : books)//将Books数组中的每一个元素每次都给book变量,有多少元素给多少次

{
System.out.println(book);

}

}

}

输出:

java

c

c++

c#

asp

public class ForEachTest

{
public static void main(String[] args)

{
String[] books = {"java","c","c++","c#","asp"};

for(String book : books)

{
book = "hello world!";

System.out.println(book);

}

System.out.println(books[0]);

}

}

输出:

hello world!

hello world!

hello world!

hello world!

hello world!

所以foreach这种循环一般只适合做数组的遍历,提取数据显示等,不适合用于增加删除和使用下标等复杂的操作。

foreach语句是for语句特殊情况下的增强版本,简化了编程,提高了代码的可读性和安全性(不用怕数组越界)。相对老的for语句来说是个很好的补充。

提倡能用foreach的地方就不要再用for了。在用到对集合或者数组索引的情况下,foreach显得力不从心,这个时候是用for语句的时候了。foreach一般结合泛型使用
 

3.layer.open

<script type="text/javascript">
        $("#open_btn_default").on("click", function(){
            var index = layer.open({
               
type: 0,  //可传入的值有:0(信息框,默认)1(页面层)2(iframe层)3(加载层)4(tips层)
               
title: ['我是标题', 'font-size:18px; color:orange;'],//数组第二项可以写任意css样式;如果你不想显示标题栏,你可以title: false
               
content: 'test',//选择要弹出的页面
                btn: ['确定', '取消'],

                success:...
                yes: function(index, layero){
                    //do something
                    alert("点击了确定");
                    layer.close(index); //如果设定了yes回调,需进行手工关闭
                  },
                  btn2: function(index, layero){ 
                      alert("点击了取消");
                      layer.close(index)
                    }
                });
        })
   </script>

4.jQuery 属性操作 - removeAttr() 方法

实例

从任何 p 元素中移除 id 属性:

$("button").click(function(){
  $("p").removeAttr("id");
});

亲自试一试

定义和用法

removeAttr() 方法从被选元素中移除属性。

语法

$(selector).removeAttr(attribute)
参数描述
attribute必需。规定从指定元素中移除的属性。

5.TKmapper Example

一、example实例
mybatis的逆向工程中会生成实例及实例对应的example,example用于添加条件,相当where后面的部分 (这一段是抄的,感觉跟我的理解不符,但是又不敢确定….) 
在我的理解里,Example为我们创建的实例 Example.createCriteria()为我们创建了条件容器,然后将我们的筛选条件一一添加到里面,最后用这个实例去查询(这是我的理解,可能有错!) 
Example example = new xxxExample(entity.class); 
Criteria criteria = new Example().createCriteria();

方法    说明
example.setOrderByClause(“字段名 ASC”)    添加升序排列条件,DESC为降序
example.setDistinct(false)    去除重复,boolean型,true为选择不重复的记录。
criteria.andXxxIsNull    添加字段xxx为null的条件
criteria.andXxxIsNotNull    添加字段xxx不为null的条件
criteria.andXxxEqualTo(value)    添加xxx字段等于value条件
criteria.andXxxNotEqualTo(value)    添加xxx字段不等于value条件
criteria.andXxxGreaterThan(value)    添加xxx字段大于value条件
criteria.andXxxGreaterThanOrEqualTo(value)    添加xxx字段大于等于value条件
criteria.andXxxLessThan(value)    添加xxx字段小于value条件
criteria.andXxxLessThanOrEqualTo(value)    添加xxx字段小于等于value条件
criteria.andXxxIn(List<?>)    添加xxx字段值在List<?>条件
criteria.andXxxNotIn(List<?>)    添加xxx字段值不在List<?>条件
criteria.andXxxLike(“%”+value+”%”)    添加xxx字段值为value的模糊查询条件
criteria.andXxxNotLike(“%”+value+”%”)    添加xxx字段值不为value的模糊查询条件
二、转载应用举例
1.查询
① selectByPrimaryKey()

User user = XxxMapper.selectByPrimaryKey(100); //相当于select * from user where id = 100
1
② selectByExample() 和 selectByExampleWithBLOGs()

Example example = new Example(entity.class);
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("wyw");
criteria.andUsernameIsNull();
example.setOrderByClause("username asc,email desc");
List<?>list = XxxMapper.selectByExample(example);
//相当于:select * from user where username = 'wyw' and  username is null order by username asc,email desc

注:在iBator逆向工程生成的文件XxxExample.java中包含一个static的内部类Criteria,Criteria中的方法是定义SQL 语句where后的查询条件。

2.插入数据
①insert()

User user = new User();
user.setId("dsfgsdfgdsfgds");
user.setUsername("admin");
user.setPassword("admin")
user.setEmail("wyw@163.com");
XxxMapper.insert(user);
//相当于:insert into user(ID,username,password,email) values ('dsfgsdfgdsfgds','admin','admin','wyw@126.com');

3.更新数据
①updateByPrimaryKey()

User user =new User();
user.setId("dsfgsdfgdsfgds");
user.setUsername("wyw");
user.setPassword("wyw");
user.setEmail("wyw@163.com");
XxxMapper.updateByPrimaryKey(user);
//相当于:update user set username='wyw', password='wyw', email='wyw@163.com' where id='dsfgsdfgdsfgds'

②updateByPrimaryKeySelective()

User user = new User();
user.setId("dsfgsdfgdsfgds");
user.setPassword("wyw");
XxxMapper.updateByPrimaryKey(user);
//相当于:update user set password='wyw' where id='dsfgsdfgdsfgds'

③ updateByExample() 和 updateByExampleSelective()

Example example = new Example(entity.class);
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("admin");
User user = new User();
user.setPassword("wyw");
XxxMapper.updateByPrimaryKeySelective(user,example);
//相当于:update user set password='wyw' where username='admin'
updateByExample()更新所有的字段,包括字段为null的也更新,建议使用 updateByExampleSelective()更新想更新的字段

4.删除数据
①deleteByPrimaryKey()

XxxMapper.deleteByPrimaryKey(1);  //相当于:delete from user where id=1
②deleteByExample()

Example example = new Example(entity.class);
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("admin");
XxxMapper.deleteByExample(example);
//相当于:delete from user where username='admin'
5.查询数据数量
①countByExample()

Example example = new Example(entity.class);
Criteria criteria = example.createCriteria();
criteria.andUsernameEqualTo("wyw");
int count = XxxMapper.countByExample(example);
//相当于:select count(*) from user where username='wyw'

三、自我实操实例
1.多条件排序
根据多条件排序直接就在后续添加排序字段(Entity是我的DO实体类)

Example example = new Example(Affiche.class);
Example.Criteria criteria = example.createCriteria();
example.orderBy(DataConstants.SHOW_TIME).desc();
example.orderBy(DataConstants.ID).desc();

2.or条件
or条件的查询,必须建立两个criteria对象,然后出了or条件字段,其他查询条件字段必须相同,这里是我的实例就不改了,DataConstants类存放的是我的常用常量字段,DbConstants和NumConstans是存放用的String类型和Integer类型的常用值。

Example example = new Example(Affiche.class);
    Example.Criteria criteria = example.createCriteria();
    criteria.andEqualTo(DataConstants.AFFICHE_TYPE,type)
            .andEqualTo(DataConstants.INSTITUTION_ID,institutionId)
            .andEqualTo(DataConstants.DELETE_TIME,DbConstants.NO_DEL_VAL)
            .andEqualTo(DataConstants.IF_DISPLAY,NumConstants.IS_DISPLAY)
            .andEqualTo(DataConstants.SHOW_STATUS,NumConstants.IS_PUBLISHED)
            .andLessThanOrEqualTo(DataConstants.SHOW_TIME,new Date());
    if(StringUtils.isNotBlank(keyWord)){
        criteria.andLike(DataConstants.AFFICHE_TITLE,keyWord);
    }

    Example.Criteria criteria1 = example.createCriteria();
    criteria1.andEqualTo(DataConstants.AFFICHE_TYPE,type)
            .andEqualTo(DataConstants.INSTITUTION_ID,institutionId)
            .andEqualTo(DataConstants.DELETE_TIME,DbConstants.NO_DEL_VAL)
            .andEqualTo(DataConstants.IF_DISPLAY,NumConstants.IS_DISPLAY)
            .andEqualTo(DataConstants.SHOW_STATUS,NumConstants.IS_PUBLISHED)
            .andLessThanOrEqualTo(DataConstants.SHOW_TIME,new Date());
    if(StringUtils.isNotBlank(keyWord)){
        criteria1.andLike(DataConstants.AFFICHE_CONTENT,keyWord);
    }
    example.or(criteria1);
    List<Affiche> afficheList = afficheMapper.selectByExample(example);
3.IN条件
in条件入参可以是集合形式,如下的List<Integer> ids具体的实现方法,目前只会用分析不了原理

    Example example = new Example(Affiche.class);
    example.createCriteria().andEqualTo(DbConstants.DELETE_TIME, DbConstants.NO_DEL_VAL)
            .andEqualTo(DataConstants.INSTITUTION_ID, institutionId)
            .andIn(DataConstants.ID, ids);
Condition方法和Example方法作用完全一样,只是为了避免Example带来的歧义,提供的的Condition方法

MeStoreService中实例:

Integer sortnow = spurMedalCfgs.getSort();//获取当前的sort值,比如为2
Condition condition = new Condition(SpurProductCfg.class);
//createCriteria():创建一个选择的容器
condition.createCriteria().andLessThan("sort",sortnow).andEqualTo("status", 1);
//andLessThan("sort",sortnow):从sort列中选择出比2(sortnow)小的数据
//andEqualTo("status", 1):并且status属性为1
condition.setOrderByClause("sort DESC");//添加降序排列条件(desc降序)(asc升序)
List<SpurMedalCfg> upList = spurMedalCfgMapper.selectByCondition(condition);//新建一个list,根据condition条件在数据库进行查询并将数据以列表形式存放在list中

6.jQuery ajax() 方法

实例

使用 AJAX 请求改变 <div> 元素的文本:

$("button").click(function(){ $.ajax({url:"demo_test.txt",success:function(result){ $("#div1").html(result); }}); });


定义和用法

ajax() 方法用于执行 AJAX(异步 HTTP)请求。

所有的 jQuery AJAX 方法都使用 ajax() 方法。该方法通常用于其他方法不能完成的请求。


语法

$.ajax({name:value, name:value, ... })

该参数规定 AJAX 请求的一个或多个名称/值对。

下面的表格中列出了可能的名称/值:

名称值/描述
async布尔值,表示请求是否异步处理。默认是 true。
beforeSend(xhr)发送请求前运行的函数。
cache布尔值,表示浏览器是否缓存被请求页面。默认是 true。
complete(xhr,status)请求完成时运行的函数(在请求成功或失败之后均调用,即在 success 和 error 函数之后)。
contentType发送数据到服务器时所使用的内容类型。默认是:"application/x-www-form-urlencoded"。
context为所有 AJAX 相关的回调函数规定 "this" 值。
data规定要发送到服务器的数据。
dataFilter(data,type)用于处理 XMLHttpRequest 原始响应数据的函数。
dataType预期的服务器响应的数据类型。
error(xhr,status,error)如果请求失败要运行的函数。
global布尔值,规定是否为请求触发全局 AJAX 事件处理程序。默认是 true。
ifModified布尔值,规定是否仅在最后一次请求以来响应发生改变时才请求成功。默认是 false。
jsonp在一个 jsonp 中重写回调函数的字符串。
jsonpCallback在一个 jsonp 中规定回调函数的名称。
password规定在 HTTP 访问认证请求中使用的密码。
processData布尔值,规定通过请求发送的数据是否转换为查询字符串。默认是 true。
scriptCharset规定请求的字符集。
success(result,status,xhr)当请求成功时运行的函数。
timeout设置本地的请求超时时间(以毫秒计)。
traditional布尔值,规定是否使用参数序列化的传统样式。
type规定请求的类型(GET 或 POST)。
url规定发送请求的 URL。默认是当前页面。
username规定在 HTTP 访问认证请求中使用的用户名。
xhr用于创建 XMLHttpRequest 对象的函数。

 7.Layui表单验证lay-verify属性

Layui表单验证lay-verify属性
Layui框架有自带的表单验证功能,在input标签中加入lay-verify属性,通过给定不同属性值,来对表单输入框进行不同的验证
layui官网自定义验证: https://www.layui.com/doc/modules/form.html#verify(自定义验证)

layui 表单自带校验:
lay-verify:是表单验证的关键字
其中对其指定不同值可实现简单验证
required (该输入框必填项)
phone(手机号)
email(邮箱)
url(网址)
number(数字)
date(日期)
identity(身份证)

同时Layui支持多条规则的验证:
格式:lay-verify=”验证A|验证B”
例如:lay-verify=”require|phone|number”
这表示此处填入为 手机号,必须为数字,且为必填项。

8.JSONObject和JSONArray的数据表示形式

JSONObject的数据是用 {  } 来表示的,

        例如:   { "id" : "123", "courseID" : "huangt-test", "title" : "提交作业", "content" : null  } 

而JSONArray,顾名思义是由JSONObject构成的数组,用  [ { } , { } , ......  , { } ]  来表示

       例如:   [ {  "id" : "123", "courseID" : "huangt-test", "title" : "提交作业" }  ,  {  "content" : null, "beginTime" : 1398873600000  "endTime" } ] ;

        表示了包含2个JSONObject的JSONArray。

可以看到一个很明显的区别,一个最外面用的是 {  }  ,一个最外面用的是 [  ]  ;

二、如何从字符串String获得JSONObject对象和JSONArray对象         

1

2

JSONObject jsonObject = new JSONObject ( String str);

     JSONArray jsonArray = new JSONArray(String  str ) ;

三、如何从JSONArray中获得JSONObject对象

       大家可以把JSONArray当成一般的数组来对待,只是获取的数据内数据的方法不一样               

1

JSONObject  jsonObject = jsonArray.getJSONObject(i) ;

四、获取JSON内的数据 

1

2

int  mid= jsonObject.getInt ( "id" ) ;  // 这里的mid得到的数据就是123.

  String mcourse=jsonObject.getString( " courseID") ;  // 这里的mcourse得到的数据就是huangt-test.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值