规则:
SpringMVC 可以利用对象的方式接收
* 底层实现: 参数name="xxx" 拼接set形成setName,之后检查对象中
* 是否有对应的setName(), 如果匹配该方法,则为对象赋值.
* 注意事项: 参数名称最好以属性名称一致
* URL地址: http://localhost:8080/findUserLike_1?name=小乔&sex=女
* 参数: name=xxx&sex=xx
* 返回值:List<User>
MP可以将对象中不为null的属性当做where条件
编辑UserController文件
//改进:
//规则: springMVC 可以利用对象的方式实现
@GetMapping("/findUserList_1")
public List <User> findUserList_1(User user1){
return userService.findUserList_1(user1);
}
编辑UserServiceImpl文件
@Override
//MP可以将对象中不为null的属性当做where条件
public List<User> findUserList_1(User user1) {
QueryWrapper <User>queryWrapper = new QueryWrapper<>(user1);
return userMapper.selectList(queryWrapper);
}
当然也可以少量参数进行传递。
RestFul参数接收
RestFul介绍
REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。
定义: RESTFul 是一种请求的规则(语法/定义)
RESTFul说明
Get请求: http://localhost:8090/findUserByNS?name=王昭君&sex=女
信息:
1.查询请求
2.参数直观 name=xxx
3.请求的结构冗余. 不合适多个参数的写法.
请求优化:
http://localhost:8080/user/小乔/18
优势:
1. 用户不能了解请求的意图 规定:请求方法名称不能出现 “动词”,只能写名词.
2. 参数保密, 只有后端服务器清楚参数的意义.
3. 请求字节传输量少 简洁.
注意事项:
1. URL地址中参数与参数之间使用 /分隔.
2. 请求的参数的位置一旦固定,不可轻易修改.
3. 用户发请求时,就应该按照restFul的结构执行.
4. restFul请求一般以get请求为主. put/delete/post
后端服务器接收规则:
参数列表加 @PathVariable
* 1.参数与参数之后使用 /分隔
* 2.参数的位置一旦确定,一般不变.
* 3.接收的参数使用 {形参变量}
* 4.使用@PathVariable 接收
* 注意事项: 如果名称不统一,则需要转化 具体如下:
* @PathVariable("name") String username
* url: http://localhost:8080/user/小乔/18
* 参数: name/age
* 返回值: List<User>
案例:
userController
/**
* 后端服务器接收规则:
* 1.参数与参数之后使用 /分隔
* 2.参数的位置一旦确定,一般不变.
* 3.接收的参数使用 {形参变量}
* 4.使用@PathVariable 接收
* 注意事项: 如果名称不统一,则需要转化 具体如下:
* @PathVariable("name") String username
*
* url: http://localhost:8080/user/小乔/18
* 参数: name/age
* 返回值: List<User>
*/
@GetMapping("user/{name}/{age}")
public List<User> findUserByNA(@PathVariable String name,
@PathVariable Integer age){
System.out.println(name);
System.out.println(age);
return null;
}
UserServiceImpl
MP可以将对象中不为null的属性当做where条件
查询:name= 小乔 age = 18可直接封装为对象
@Override
//MP可以将对象中不为null的属性当做where条件
public List<User> findUserList_1(User user1) {
QueryWrapper <User>queryWrapper = new QueryWrapper<>(user1);
return userMapper.selectList(queryWrapper);
问题:若有多个参数,则不是很方便
改进:有多个参数使用对象接收,参数必须与对象的属性一样。
改进案例:
userController
@GetMapping("user/{name}/{age}")
public List<User> findUserByNA(User user2){
return userService.findUserByNA(user2);
}
UserServiceImpl
查询:name=小乔 且age>12的数据
规则: 字段与属性的逻辑运算符为 = 号时可以 使用实体对象(user)封装否则手动添加
需要手写
注意使用get属性的方法,不要写的固定。从浏览器上接收。
//规则: 字段与属性的逻辑运算符为 = 号时 使用实体对象(user)封装
//需要手写
@Override
public List<User> findUserByNA(User user2) {
QueryWrapper<User> queryWrapper = new QueryWrapper();
queryWrapper.eq("name",user2.getName())
.gt("age",user2.getAge());
return userMapper.selectList(queryWrapper);
}
查询多个相同属性名的数据
查询id= 1,2,3,4
规则: 如果参数使用 "," 号分隔,则SpringMVC可以自动的转化为数组.
* URL: http://localhost:8090/getUserByIds?ids=1,3,4,5
* 参数: ids = 1,3,4,5
* 返回值: List<User>
UserConroller
@GetMapping("getIds")
public List<User> getIds(Integer [] ids) {
return userService.getIds(ids);
}
UserServiceImpl
@Override
public List<User> getIds(Integer[] ids) {
List<Integer> listIds = Arrays.asList(ids);
return userMapper.selectBatchIds(listIds);
}