@RequestAttribute,@RequestBody 注解,代码实现分页查询
1. @RequestAttribute注解
@RequestAttribute 获取request请求域中的数据
测试如下:
发起post请求
2、@RequestBody 注解
@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的);而最常用的使用请求体传参的无疑是POST请求了,所以使用@RequestBody接收数据时,一般都用POST方式进行提交。在后端的同一个接收方法里,@RequestBody与@RequestParam()可以同时使用,@RequestBody最多只能有一个,而@RequestParam()可以有多个。
注:一个请求,只有一个RequestBody;一个请求,可以有多个RequestParam。
注:当同时使用@RequestParam()和@RequestBody时,@RequestParam()指定的参数可以是普通元素、
数组、集合、对象等等(即:当,@RequestBody 与@RequestParam()可以同时使用时,原SpringMVC接收
参数的机制不变,只不过RequestBody 接收的是请求体里面的数据;而RequestParam接收的是key-value
里面的参数,所以它会被切面进行处理从而可以用普通元素、数组、集合、对象等接收)。
即:如果参数时放在请求体中,application/json传入后台的话,那么后台要用@RequestBody才能接收到;
如果不是放在请求体中的话,那么后台接收前台传过来的参数时,要用@RequestParam来接收,或
则形参前 什么也不写也能接收。
注:如果参数前写了@RequestParam(xxx),那么前端必须有对应的xxx名字才行(不管其是否有值,当然可以通
过设置该注解的required属性来调节是否必须传),如果没有xxx名的话,那么请求会出错,报400。
注:如果参数前不写@RequestParam(xxx)的话,那么就前端可以有可以没有对应的xxx名字才行,如果有xxx名
的话,那么就会自动匹配;没有的话,请求也能正确发送。
追注:这里与feign消费服务时不同;feign消费服务时,如果参数前什么也不写,那么会被默认是
@RequestBody的。
后端@RequestBody注解对应的类在将HTTP的输入流(含请求体)装配到目标类(即:@RequestBody后面的类)时,会根据json字符串中的key来匹配对应实体类的属性,如果匹配一致且json中的该key对应的值符合(或可转换为),这一条我会在下面详细分析,其他的都可简单略过,但是本文末的核心逻辑代码以及几个结论一定要看! 实体类的对应属性的类型要求时,会调用实体类的setter方法将值赋给该属性。
json字符串中,如果value为""的话,后端对应属性如果是String类型的,那么接受到的就是"",如果是后端属性的类型是Integer、Double等类型,那么接收到的就是null。
json字符串中,如果value为null的话,后端对应收到的就是null。
如果某个参数没有value的话,在传json字符串给后端时,要么干脆就不把该字段写到json字符串中;要么写value时, 必须有值,null 或""都行。千万不能有类似"stature":,这样的写法,如:
测试如下:
查看后端:
3.mybatis 中的注解的常用方法
mapper层
package com.bcht.api.mapper;
import org.apache.ibatis.annotations.*;
import org.apache.ibatis.type.JdbcType;
import java.util.List;
import java.util.Map;
/**
* 接口注册
*/
@Mapper
public interface TMsOuterInterfaceMapper {
@SelectProvider(type = TMsOuterInterfaceMapperProvider.class, method = "listSystem")
List<Map> listSystem(@Param("registerId") Integer registerId);
@SelectProvider(type = TMsOuterInterfaceMapperProvider.class, method = "listIntefaceByRegisterId")
List<Map> listIntefaceByRegisterId(@Param("registerId") Integer registerId);
@SelectProvider(type = TMsOuterInterfaceMapperProvider.class, method = "listParamsByInterfaceId")
List<Map> listParamsByInterfaceId(@Param("interfaceId") Integer interfaceId);
@SelectProvider(type = TMsOuterInterfaceMapperProvider.class, method = "getParamNumById")
int getParamNumById(@Param("dirId") Integer dirId);
@SelectProvider(type = TMsOuterInterfaceMapperProvider.class, method = "getDetailById")
List<Map> getDetailById(@Param("dirId") Integer dirId);
@Results(value = {@Result(property = "interface_id", column = "interface_id", id = true, javaType = Integer.class, jdbcType = JdbcType.INTEGER)
})
@SelectProvider(type = TMsOuterInterfaceMapperProvider.class, method = "getIdByCode")
int getIdByCode(@Param("interfaceCode") String interfaceCode);
@InsertProvider(type = TMsOuterInterfaceMapperProvider.class, method = "createInterface")
int createInterface(@Param("interface_name") String interface_name,
@Param("interface_code") String interface_code,
@Param("register_id") Integer register_id,
@Param("run_status") String run_status,
@Param("raw_url") String raw_url,
@Param("req_method") String req_method,
@Param("desc") String desc,
@Param("create_user") String create_user,
@Param("now") String now);
@UpdateProvider(type = TMsOuterInterfaceMapperProvider.class, method = "updateInterface")
int updateInterface(@Param("interface_id") Integer interface_id,
@Param("interface_name") String interface_name,
@Param("interface_code") String interface_code,
@Param("register_id") Integer register_id,
@Param("run_status") String run_status,
@Param("raw_url") String raw_url,
@Param("req_method") String req_method,
@Param("desc") String desc,
@Param("update_user") String update_user,
@Param("now") String now);
@UpdateProvider(type = TMsOuterInterfaceMapperProvider.class, method = "updateInterfaceStatus")
int updateInterfaceStatus(@Param("update_user") String update_user,
@Param("run_status") String run_status,
@Param("now") String now,
@Param("interfaceId") Integer interfaceId);
@UpdateProvider(type = TMsOuterInterfaceMapperProvider.class, method = "deleteInterface")
int deleteInterface(@Param("dirId") Integer dirId);
@DeleteProvider(type = TMsOuterInterfaceMapperProvider.class, method = "deleteParams")
int deleteParams(@Param("interfaceId") Integer interfaceId);
@Results(value = {@Result(property = "run_status", column = "run_status", javaType = String.class, jdbcType = JdbcType.VARCHAR)
})
@SelectProvider(type = TMsOuterInterfaceMapperProvider.class, method = "checkSystemStatus")
String checkSystemStatus(@Param("interfaceId") Integer interfaceId);
@Results(value = {@Result(property = "interface_code", column = "interface_code", javaType = String.class, jdbcType = JdbcType.VARCHAR),
@Result(property = "interface_name", column = "interface_name", javaType = String.class, jdbcType = JdbcType.VARCHAR)
})
@SelectProvider(type = TMsOuterInterfaceMapperProvider.class, method = "checkRepeat")
List<Map> checkRepeat(@Param("interfaceId") Integer interfaceId);
@SelectProvider(type = TMsOuterInterfaceMapperProvider.class, method = "queryPageResultList")
List<Map> queryPageResultList(@Param("searchVal") String searchVal,
@Param("offset") Integer offset,
@Param("pageSize") Integer pageSize);
@SelectProvider(type = TMsOuterInterfaceMapperProvider.class, method = "countResultList")
Integer countResultList(@Param("searchVal") String searchVal,
@Param("offset") Integer offset,
@Param("pageSize") Integer pageSize);
}
对用的实现类
package com.bcht.api.mapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.jdbc.SQL;
import java.text.MessageFormat;
import java.util.List;
import java.util.Map;
public class TMsOuterInterfaceMapperProvider {
private static final String TABLE_SYSTEM = "t_ms_outer_register";
private static final String TABLE_INTERFACE = "t_ms_outer_interface";
private static final String TABLE_PARAMS = "t_ms_outer_interface_params";
public String listSystem(Map<String, Object> parameter) {
return new SQL() {{
SELECT(" * ");
FROM(TABLE_SYSTEM);
Object registerId = parameter.get("registerId");
if (registerId != null && StringUtils.isNotEmpty(registerId.toString())) {
WHERE("register_id=#{registerId}");
}
WHERE(" run_status <> '0' ");
}}.toString();
}
public String listIntefaceByRegisterId(Map<String, Object> parameter) {
return new SQL() {{
SELECT(" * ");
FROM(TABLE_INTERFACE);
Object registerId = parameter.get("registerId");
if (registerId != null && StringUtils.isNotEmpty(registerId.toString())) {
WHERE("register_id=#{registerId}");
}
WHERE(" run_status <> '0' ");
ORDER_BY(" update_time desc ");
}}.toString();
}
public String listParamsByInterfaceId(Map<String, Object> parameter) {
return new SQL() {{
SELECT(" * ");
FROM(TABLE_PARAMS);
Object interfaceId = parameter.get("interfaceId");
if (interfaceId != null && StringUtils.isNotEmpty(interfaceId.toString())) {
WHERE("interface_id=#{interfaceId}");
}
}}.toString();
}
public String getParamNumById(Map<String, Object> parameter) {
return new SQL() {{
SELECT(" count(1) cnt ");
FROM(TABLE_PARAMS);
WHERE("interface_id=#{dirId}");
}}.toString();
}
public String getDetailById(Map<String, Object> parameter) {
return new SQL() {{
SELECT(" * ");
FROM(TABLE_INTERFACE);
WHERE("interface_id=#{dirId}");
WHERE(" run_status <> '0' ");
}}.toString();
}
public String getIdByCode(Map<String, Object> parameter) {
return new SQL() {
{
SELECT(" interface_id ");
FROM(TABLE_INTERFACE);
WHERE("`interface_code`=#{interfaceCode}");
WHERE(" run_status <> '0' ");
}
}.toString();
}
public String createInterface(Map<String, Object> parameter) {
return new SQL() {{
INSERT_INTO(TABLE_INTERFACE);
VALUES("`interface_name`", "#{interface_name}");
VALUES("`interface_code`", "#{interface_code}");
VALUES("`register_id`", "#{register_id}");
VALUES("`run_status`", "#{run_status}");
VALUES("`raw_url`", "#{raw_url}");
VALUES("`req_method`", "#{req_method}");
VALUES("`desc`", "#{desc}");
VALUES("`create_user`", "#{create_user}");
VALUES("`create_time`", "#{now}");
}}.toString();
}
public String updateInterface(Map<String, Object> parameter) {
return new SQL() {{
UPDATE(TABLE_INTERFACE);
SET("`interface_name` = #{interface_name}");
SET("`interface_code` = #{interface_code}");
SET("`register_id` = #{register_id}");
SET("`run_status` = #{run_status}");
SET("`raw_url` = #{raw_url}");
SET("`req_method` = #{req_method}");
SET("`desc` = #{desc}");
SET("`update_user` = #{update_user}");
SET("`update_time` = #{now}");
WHERE("`interface_id` = #{interface_id}");
}}.toString();
}
public String updateInterfaceStatus(Map<String, Object> parameter) {
return new SQL() {{
UPDATE(TABLE_INTERFACE);
SET("`run_status` = #{run_status}");
SET("`update_user` = #{update_user}");
SET("`update_time` = #{now}");
WHERE("`interface_id` = #{interfaceId}");
}}.toString();
}
public String deleteInterface(Map<String, Object> parameter) {
return new SQL() {{
UPDATE(TABLE_INTERFACE);
SET("`run_status` = '0' ");
WHERE("`interface_id`=#{dirId}");
}}.toString();
}
public String deleteParams(Map<String, Object> parameter) {
return new SQL() {{
DELETE_FROM(TABLE_PARAMS);
Object interfaceId = parameter.get("interfaceId");
if (interfaceId != null && StringUtils.isNotEmpty(interfaceId.toString())) {
WHERE(" interface_id = #{interfaceId} ");
}
}}.toString();
}
public String checkSystemStatus(Map<String, Object> parameter) {
return new SQL() {{
SELECT(" b.run_status ");
FROM(TABLE_INTERFACE + " a ");
LEFT_OUTER_JOIN(TABLE_SYSTEM + " b on a.register_id = b.register_id ");
Object interfaceId = parameter.get("interfaceId");
if (interfaceId != null && StringUtils.isNotEmpty(interfaceId.toString())) {
WHERE(" a.interface_id = #{interfaceId} ");
}
}}.toString();
}
public String checkRepeat(Map<String, Object> parameter) {
return new SQL() {{
SELECT(" interface_code,interface_name ");
FROM(TABLE_INTERFACE);
Object interfaceId = parameter.get("interfaceId");
if (interfaceId != null && StringUtils.isNotEmpty(interfaceId.toString())) {
WHERE(" interface_id <> #{interfaceId} ");
}
WHERE(" run_status <> '0' ");
GROUP_BY(" interface_code,interface_name ");
}}.toString();
}
public String queryPageResultList(Map<String, Object> parameter) {
return new SQL() {{
SELECT(" a.*,b.register_name ");
FROM(TABLE_INTERFACE + " a ");
LEFT_OUTER_JOIN(TABLE_SYSTEM + " b on a.register_id = b.register_id ");
Object searchVal = parameter.get("searchVal");
if (searchVal != null && StringUtils.isNotEmpty(searchVal.toString())) {
WHERE(" a.interface_name like concat('%', '" + parameter.get("searchVal").toString() + "', '%')");
}
WHERE(" a.run_status <> '0' ");
ORDER_BY(" a.update_time desc limit #{offset},#{pageSize} ");
}}.toString();
}
public String countResultList(Map<String, Object> parameter) {
return new SQL() {{
SELECT(" count(1) ");
FROM(TABLE_INTERFACE);
Object searchVal = parameter.get("searchVal");
if (searchVal != null && StringUtils.isNotEmpty(searchVal.toString())) {
WHERE("interface_name like concat('%', '" + parameter.get("searchVal").toString() + "', '%')");
}
WHERE(" run_status <> '0' ");
ORDER_BY(" update_time desc limit #{offset},#{pageSize} ");
}}.toString();
}
}
4、通过pageNum和pageSize 实现分页查询
通过页数和每页有多少数据量,求得偏移量,然后通过 limit 偏移量,数量。求得查询的数据,然后做展示就行了、
代码如下:
Controller层:
/**
* 分页查询
*
* @param loginUser
* @param searchVal
* @param pageNo
* @param pageSize
* @return
*/
@GetMapping("/list-paging")
public Result listPaging(@RequestAttribute(value = Constants.SESSION_USER) User loginUser,
@RequestParam(value = "searchVal", required = false) String searchVal,
@RequestParam("pageNo") Integer pageNo,
@RequestParam("pageSize") Integer pageSize) {
return tMsOuterInterfaceService.queryPageList(loginUser.getId(), searchVal, pageNo, pageSize);
}
Service层:
/**
* 分页查询
*
* @param userId
* @param searchVal
* @param pageNo
* @param pageSize
* @return
*/
public Result queryPageList(Integer userId, String searchVal, int pageNo, int pageSize) {
Result result = new Result();
Integer offset = (pageNo - 1) * pageSize;
List<Map> list = tMsOuterInterfaceMapper.queryPageResultList(searchVal, offset, pageSize);
if (list.size() > 0) {
for (Map map : list) {
String run_statusName = "";
String req_method = "";
String position = "";
String type = "";
String is_required = "";
switch (map.get("run_status").toString()) {
case "0":
run_statusName = TABLE_RUN_DELETED.getName();
break;
case "1":
run_statusName = TABLE_RUN_ENABLED.getName();
break;
case "2":
run_statusName = TABLE_RUN_DISABLED.getName();
break;
}
switch (map.get("req_method").toString()) {
case "1":
req_method = HTTP_GET.getName();
break;
case "2":
req_method = HTTP_POST.getName();
break;
}
Integer interfaceId = (Integer) map.get("interface_id");
List<Map> paramList = tMsOuterInterfaceMapper.listParamsByInterfaceId(interfaceId);
for (Map param : paramList) {
switch (param.get("position").toString()) {
case "0":
position = POSITION_HEADER.getName();
break;
case "1":
position = POSITION_QUERY.getName();
break;
case "2":
position = POSITION_BODY.getName();
break;
}
switch (param.get("type").toString()) {
case "1":
type = TYPE_CONST.getName();
break;
case "2":
type = TYPE_DATE.getName();
break;
}
switch (param.get("is_required").toString()) {
case "0":
is_required = IS_REQUIRED_FALSE.getName();
break;
case "1":
is_required = IS_REQUIRED_TRUE.getName();
break;
}
param.put("positionName", position);
param.put("typeName", type);
param.put("is_requiredName", is_required);
}
map.put("param", paramList);
map.put("run_statusName", run_statusName);
map.put("req_methodName", req_method);
}
}
result.setData(list);
Map<String, Object> mapData = new HashMap<>();
Integer total = tMsOuterInterfaceMapper.countResultList(searchVal, offset, pageSize);
mapData.put("total", total);
result.setDataMap(mapData);
putMsg(result, Status.SUCCESS);
return result;
}
Mapper层:
public String countResultList(Map<String, Object> parameter) {
return new SQL() {{
SELECT(" count(1) ");
FROM(TABLE_INTERFACE);
Object searchVal = parameter.get("searchVal");
if (searchVal != null && StringUtils.isNotEmpty(searchVal.toString())) {
WHERE("interface_name like concat('%', '" + parameter.get("searchVal").toString() + "', '%')");
}
WHERE(" run_status <> '0' ");
ORDER_BY(" update_time desc limit #{offset},#{pageSize} ");
}}.toString();
}