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 |
|
三、如何从JSONArray中获得JSONObject对象
大家可以把JSONArray当成一般的数组来对待,只是获取的数据内数据的方法不一样
1 |
|
四、获取JSON内的数据
1 2 |
|