一、前端无法识别返回参数
原因:controller层没有用@RestController注解,并且方法没有用@RequestMapper注解
二、localdatetime参数的匹配问题
原因:
参数为string转date类型,所以需要注解并配置格式
处理:
接受前端参数:使用@DateTimeFormat(pattern = “yyyy-MM-dd HH:mm:ss”)
属于:import org.springframework.format.annotation.DateTimeFormat;
接受数据库参数:@JsonFormat(shape = JsonFormat.Shape.STRING, pattern=“yyyy-MM-dd HH:mm:ss”)
属于:import com.fasterxml.jackson.annotation.JsonFormat;
三、MyBatis-plus 自动填充功能
MyBatis-plus自动填充功能会检测你插入和更新操作,并且去找到标注了相关注解的字段进行自动赋值,十分方便
步骤
1.写一个配置类返回一个自动填充bean
@Configuration
public class MybatisPlusConfig {
@Bean
public MetaObjectHandler metaObjectHandler() {
return new MyMetaObjectHandler();
}
2.写一个自定义填充handler,调用插入参数的方法,这里用的精准插入,参数为(对象,属性,属性类型,属性值)
public class MyMetaObjectHandler implements MetaObjectHandler {
//插入时候触发
@Override
public void insertFill(MetaObject metaObject) {
// User sysUser = ShiroUtil.getUserInfo();
// 起始版本 3.3.0(推荐使用)
// this.setFieldValByName("createdDt", LocalDateTime.now(), metaObject);
// this.setFieldValByName("deviceName", "都给你改咯", metaObject);
this.strictInsertFill(metaObject, "createdDt", LocalDateTime.class, LocalDateTime.now());
// this.strictInsertFill(metaObject, "createBy", String.class, sysUser.getLoginName());
this.strictInsertFill(metaObject, "status", Integer.class, 1);
}
//更新时候触发
@Override
public void updateFill(MetaObject metaObject) {
// User sysUser = ShiroUtil.getUserInfo();
// 起始版本 3.3.0(推荐使用)
this.strictUpdateFill(metaObject, "updateDt", LocalDateTime.class, LocalDateTime.now());
// this.strictInsertFill(metaObject, "updateBy", String.class, sysUser.getLoginName());
}
}
3.到实体类上标上注解,设置FieldFill值,会在对应操作时候触发
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createdDt;
附上FieldFill枚举类代码
package com.baomidou.mybatisplus.annotation;
public enum FieldFill {
DEFAULT,
INSERT,
UPDATE,
INSERT_UPDATE;
private FieldFill() {
}
}
四、MyBatis-plus分页功能
MyBatis-plus封装了自动分页功能,配置相关属性即可方便调用其提供的分页查询方法
步骤
1、在MyBatis-plus配置类增加分页bean
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求 默认false
// paginationInterceptor.setOverflow(false);
// 设置最大单页限制数量,默认 500 条,-1 不受限制
// paginationInterceptor.setLimit(500);
// 开启 count 的 join 优化,只针对部分 left join
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
return paginationInterceptor;
}
// /**
// * 3.4.1 分页
// */
// @Bean
// public MybatisPlusInterceptor mybatisPlusInterceptor() {
// MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
// return interceptor;
// }
2、controller接受页数,行数参数,构建一个Page参数,dto根据业务需求构建QueryWrapper,得到的Page<查询类>为封装好的分页数据
@ApiOperation("分页查询设置")
@PostMapping("/list")
public NormalResult list(@RequestParam(required = false, defaultValue = "1") Integer pageNum,
@RequestParam(required = false, defaultValue = "10") Integer pageSize,
@RequestBody 查询条件Dto dto){
Page<查询类> page = new Page<>(pageNum, pageSize);
Page<查询类> list = service.listConfig(page,dto);
//在service中使用dto构建查询条件,构建page也可以在seveice中做,调用以下方法即可
//baseMapper.selectPage(page, queryWrapper);
return ResultUtil.success(list);
}
附上结果示例:
},
{
"id": "1",
"name": "人造人18号",
"email": "weilai@",
"phone": "202888",
"sex": "无",
"role": "人造人",
"status": 1,
"exceptionFlag": 1
}
],
"total": 7,
"size": 10,
"current": 1,
"optimizeCountSql": true,
"hitCount": false,
"searchCount": true,
"pages": 1
}
}