/**
* 利用MP的方式实现分页查询
* API说明: selectPage(arg1,arg2)
* arg1: MP中的分页对象 固定的
* arg2: MP分页中的条件构造器
* @param pageResult
* @return
* 动态Sql: select * from user where username like "%admin%"
* 条件: 如果用户传递query则拼接where条件 否则不拼接where条件
*/
@Override
public PageResult getUserList(PageResult pageResult) {//原始3个参数
//1.定义MP的分页对象 arg1:页面 arg2:行数
IPage iPage = new Page(pageResult.getPageNum(), pageResult.getPageSize());
//2.构建查询条件构造器
QueryWrapper queryWrapper = new QueryWrapper();
//判断用户数据是否有效 有效 true 无效 false
boolean flag = StringUtils.hasLength(pageResult.getQuery());
queryWrapper.like(flag, "username", pageResult.getQuery());
//经过MP分页查询将所有的分页(total/结果/页面/条数/xxx)数据封装到iPage对象
iPage = userMapper.selectPage(iPage,queryWrapper);
//从分页对象中获取总记录数
long total = iPage.getTotal();
//从分页对象中获取分页后的结果
List<User> rows = iPage.getRecords();
return pageResult.setTotal(total).setRows(rows); //需要返回的是5个参数
}
//命名规则: 类似于配置文件 则把这个类称之为"配置类"一般Config结尾
@Configuration //标识我是一个配置类(代替之前的xml文件)
public class MybatisPlusConfig {
//铺垫: xml中通过标签管理对象,将对象交给Spring容器管理.
//配置类: 将方法的返回值交给Spring容器管理 @Bean注解.
/**
* 关于MP分页规则说明
* 规则: 需要设定一个拦截器.将分页的Sql进行动态的拼接.
* Sql: 规则现在的Sql都支持Sql92标准!!!! 设计理念不同
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MARIADB));
return interceptor;
}
}
说明: 当修改状态信息时,应该修改status属性, 启用-true/停用-false
修改条件: userId/当前的状态信息.
正则表达式,又称规则表达式。(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。
const phoneRege = /^1[23456789][0-9]{9}$/
const emailRege = /^[a-zA-Z0-9-_]+@[a-zA-Z0-9-_]+\.[a-zA-Z0-9-_]+$/
通过数据库进行 “更新” 操作,会修改数据库中的创建时间/修改时间. 每张表都有类似的操作. 所以应该抽取为一个公共API进行业务调用.
说明: MP对外暴露了一个自动填充的接口MetaObjectHandler ,用户只需要实现该接口,并且重写其中的方法.即可以实现自动填充的功能.
@Component //将对象交给Spring容器管理 不属于C/S/M
public class MyMetaObjectHandler implements MetaObjectHandler {
//入库操作时调用 created/updated
//setFieldValByName(arg1,arg2,arg3)
//arg1: 自动填充的字段名称 arg2: 自动填充的值 arg3: metaObject 固定写法
@Override
public void insertFill(MetaObject metaObject) {
//设定时间变量
Date date = new Date();
this.setFieldValByName("created",date,metaObject);
this.setFieldValByName("updated",date,metaObject);
}
//更新操作时调用 updated
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updated",new Date(),metaObject);
}
}