在实现分页操作的过程中,可以在SQL语句中不写两条SQL来统计总查询数、不限制分页条件,将这些功能在service层用PageHelper实现。
引入依赖
com.github.pagehelper
pagehelper-spring-boot-starter
1.4.7
在service层实现类中重写方法
@Override
public PageResult page(Integer page, Integer pageSize) {
PageHelper.startPage(page, pageSize);
Page p = (Page)empMapper.list();
return new PageResult<>(p.getTotal(), p.getResult());
}
Page
---------------------------------------------------------------------------------------------------------------------------------
在controller层接收前端传来的请求参数时,若没有参数,可使用@RequestParam注解在方法中为参数设置默认值。
例如没有参数时默认请求第一页,每页十条数据
@RequestParam(defaultValue = "1") Integer page,@RequestParam(defaultValue = "10") Integer pageSize
请求参数过多时,方法内形参过多导致代码冗长且可读性差,此时编写一个实体类用一个实体对象来封装。
请求参数为日期,使用@DateTimeFormat注解规定格式。
---------------------------------------------------------------------------------------------------------------------------------
在条件分页查询中,需对姓名模糊查询:name like '%查询的内容%',而为了防止SQL注入,应使用预编译,即name like '%#{name}%'。而在引号中的#{name}无法被识别。
解决方案:
name like concat('%', #{name}, '%')
---------------------------------------------------------------------------------------------------------------------------------
MyBatis中的动态SQL
当条件查询时某个参数没有填写,值为null,普通的SQL语句依然将null作为查询的条件。
解决方案:动态SQL,在Mapper映射文件中使用
此时还有另外一个问题,如果where后的第一个条件语句没有拼接上,后边的语句拼接到where后会出现where and....的情况造成语法错误。
解决方案:使用
要一次插入多条数据,却又不知道具体要插入多少条。
解决方案:使用
insert into emp_expr(emp_id, begin, end, company, job) values
(#{expr.empId}, #{expr.begin}, #{expr.end}, #{expr.company}, #{expr.job})
---------------------------------------------------------------------------------------------------------------------------------
事务中的所有操作必须全部正确运行,才会被提交,否则回滚。
Spring中的事务管理:在需要创建事务的类、方法或者接口上使用@Transactional注解。@Transactional默认遇到RuntimeException(运行时异常)才会回滚,因此要设置注解中的一个属性值:rollbackFor = {Exception.class},这样才会遇到所有异常都回滚。
@Transactional中还有一个属性propagation,默认值为Propagation.REQUIRES,此时这个事务方法被另一个事务方法调用时,会自动加入调用方法的事务中,此时出现问题,当我们想在一个finally中用一个方法来将日志写入数据库中时,如果调用的方法中出现异常,日志方法中向数据库表中插入数据的语句也被回滚,无法记录所有的提交记录。
设置属性propagation = Propagation.REQUIRES_NEW,此时这个事务方法被另一个事务方法调用时,依然会创建新事务,不受调用方法中事务回滚的影响。
---------------------------------------------------------------------------------------------------------------------------------
复习事物的四大特性-ACID
原子性、一致性、隔离性、持久性
---------------------------------------------------------------------------------------------------------------------------------
今日在自己完成条件分页查询的接口功能时,因为不熟练漏掉许多细节,导致出现很多bug,修bug花费了大量时间。但能够通过使用debug断点、阅读控制台中的异常信息日志并利用ai工具找到bug点并修复,我觉得收获很大。