企业智能软件开发(六)—分页与数据校验

分页

分页原理

分页是将数据库中的数据进行分页展示,例如每一页只展示10几个记录。
分页展示
分页一般有两种实现方式

1.逻辑方式:
从数据库获取数据,编写程序根据页面对应的页面码进行展示数据
适合小规模的分类
2.物理方式:
只从数据库取出这一页的数据(物理分页)
使用最多的方式

两种分页方法

  1. SQL分页法
  • 语法

limit offset, size
其中offset是偏移量(不写默认是0),size是取出的条数
假定用户列表每页显示5条记录,则
第1页对应的SQL:
select * from t_user limit 5 或 select * from t_user limit 0,5
第2页对应的SQL:
select * from t_user limit 5,5
第3页对应的SQL:
select * from t_user limit 10,5
偏移量 = 页大小 (当前页码-1) ———>offset = size(page-1)

给UserDao类的查询操作绑定SQl语句

	@Select("select * from t_user where status !=2 limit #{offset},5")
	public List<User> getUserBypage(Integer offset);

创建UserController方法

	@ResponseBody
	@RequestMapping("/page")
	public List<User> getUserBypage(Integer page) {
		int size =5;
		int offset = size*(page-1);
		 //去数据中根据id查询用户信息
		List<User> userlist = userDao.getUserBypage(offset); 
		return userlist;
	}

运行截图:
运行截图1
为防止用户不输入参数出现指针错误
可以加入@RequestParam(defaultValue=“1”) 给查询页设置默认值1。
1

  1. PageHelper分页

PageHelper是针对Mybatis分页的第三方插件
支持任何复杂的单表、多表分页
紧跟在 PageHelper.startPage 方法后的第一个 Mybatis 的查询(Select)方法会被分页

在pom.xml中加入pagehelper启动器依赖

<!--pagehelper分页插件 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.5</version>
        </dependency>

给UserDao类的查询操作绑定SQl语句

	@Select("select * from t_user where status !=2)
	public List<User> getUserBypage();

创建UserController方法

	@ResponseBody
	@RequestMapping("/page")
	public List<User> getUserBypage(@RequestParam(defaultValue="1")Integer page,
			@RequestParam(defaultValue="4")Integer size) {
		PageHelper.startPage(page,size);
		 //去数据中根据id查询用户信息
		List<User> userlist = userDao.getUserBypage(); 
		return userlist;
	}

每页获取4个数据

使用Page方法接收返回值

	@ResponseBody
	@RequestMapping("/page")
	public Object getUserBypage(@RequestParam(defaultValue="1")Integer page,
			@RequestParam(defaultValue="4")Integer size) {
		Page<User> pa = PageHelper.startPage(page,size);
		 //去数据中根据id查询用户信息
		List<User> userlist = userDao.getUserBypage(); 
		return pa.toPageInfo();
	}

结果返回结果包含返回数据条数统计以及数据库数据条数统计等:

{
“total”: 10,
“list”: [
{
“id”: 9,
“username”: “zhonglele”,
“password”: “123”,
“realName”: “zhong”,
“phone”: “13433334433”,
“email”: “zhong@qq.com”,
“status”: 1,
“tx”: “tx4.jpg”,
“birthday”: “2002-03-01 21:56:59.0”
},
{
“id”: 10,
“username”: “zhonglele”,
“password”: “123”,
“realName”: “zhong”,
“phone”: “13433334433”,
“email”: “zhong@qq.com”,
“status”: 1,
“tx”: “tx4.jpg”,
“birthday”: “2002-03-01 21:56:59.0”
}
],
“pageNum”: 3,
“pageSize”: 4,
“size”: 2,
“startRow”: 9,
“endRow”: 10,
“pages”: 3,
“prePage”: 2,
“nextPage”: 0,
“isFirstPage”: false,
“isLastPage”: true,
“hasPreviousPage”: true,
“hasNextPage”: false,
“navigatePages”: 8,
“navigatepageNums”: [
1,
2,
3
],
“navigateFirstPage”: 1,
“navigateLastPage”: 3,
“lastPage”: 3,
“firstPage”: 1
}

校验

  • 在信息输入过程中,我们需要对信息的内容进行相关的约束,例如电话号码必须是11位,限制用户名长度为6到10等。

校验分为前端校验和后端校验

  1. 前端校验
    前端校验利用HTML或JavaScript的功能在参数提交之前进行校验
    前端校验没有和服务器交互,速度快,用户体验好
    前端校验是不安全的,可以被绕过,容易被小人利用
  2. 后端校验
    后端校验是在与数据库交互前完成校验,安全性高

数据校验类型

根据不同的要求将数据校验类型分为两大类

  1. 数据格式校验
    例如: 非空校验,长度校验,手机格式
  2. 数据逻辑校验
    例如:用户名重复,余额不足,日期超时,账户不存在

后端校验两种方法

  1. 使用if~else语句进行校验
    在UserController方法内部添加条件约束
	@ResponseBody
	@PostMapping("/add")  //必须用post方式提交
	public Result addUser( User user) {
		//添加条件
		if(user.getUsername().trim().length()<6 
				||user.getUsername().trim().length()>10) {
			Result r = new Result();
			r.setCode(4002);
			r.setMsg("用户名不符合规则!");
			return r;
		}
		
		userDao.insertUser(user);  //插入数据库
		Result r = new Result();
		r.setCode(2000);
		r.setMsg("新增用户成功!");
		return r;
	}

显然这种方法会使得我们的UserController变得不美观,代码量也非常大。
2. JSR-303校验

JSR-303 是JAVA EE 6 中的一项子规范,叫做Bean Validation,里面规定了使用注解进行校验的方式

引入依赖

<!-- JSR303校验-->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
  • 在接收参数的JavaBean的字段上使用@NotNull、@NotBlank、@Size等注解设置校验规则
	@NotBlank(message ="用户不能为空")
	@Size(min = 6, max =11, message = "用户名在6~11个字符之间")
	private String username;
  • 在Controller的方法上,声明形参时加上@Valid开启校验
	@ResponseBody
	@PostMapping("/add")  //必须用post方式提交
	public Result addUser(@Valid User user) {
//		//添加条件
//		if(user.getUsername().trim().length()<6 
//				||user.getUsername().trim().length()>10) {
//			Result r = new Result();
//			r.setCode(4002);
//			r.setMsg("用户名不符合规则!");
//			return r;
//		}
		
		userDao.insertUser(user);  //插入数据库
		Result r = new Result();
		r.setCode(2000);
		r.setMsg("新增用户成功!");
		return r;
	}
  • 当参数不符合规则时,会抛出异常,Controller的方法不会执行

验证手机位数等,我们需要用到正则表达式
绑定@Pattern注解
在这里插入图片描述
@Pattern(regexp = “^1(?:3\d 4[4-9]|5[0-35-9]|6[67]|7[013-8]|8\d|9\d)\d{8}$”,message = “手机号码不正确”)

校验规格表:

1
2

  1. 我们还可以使用数据库校验的方法
    在数据库中设置约束条件,如:
    主键约束Primay Key Coustraint,
    唯一约束Unique Counstraint,
    非空约束Not Null Counstraint,
    外键约束Foreign Key Counstraint,
    默认约束Default Value Counstraint

统一异常处理

@ExceptionHandler(MethodArgumentNotValidException.class)
public Object methodArgumentNotValidException(MethodArgumentNotValidException e){
    return Result.failure(e.getMessage());
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liaoMITC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值