8月22日
DTO
https://www.cnblogs.com/Gyoung/archive/2013/03/23/2977233.html
DTO Data Transfer Object,应用于表现层和应用层之间的数据交互,是为了前端UI的需要,而不是领域对象,比如Customer 中有FirstName,LastName,Address,假如果前端不需要显示Address,那么CustomerDTO也不需要包含Address。
PageHelper 实现分页
- 首先引入PageHelper的Maven依赖
- SpringBoot配置文件中声明插件
- service实现类
@Service
public class QueryUser2 implements Query2 {
@Autowired
UserMapper userMapper;
@Override
public List<User> selectAll(int pageNum,int pageSize) {
PageHelper.startPage(pageNum,pageSize);
List<User> users = userMapper.selectAll();
PageInfo<User> pageInfo = new PageInfo<>(users);
return pageInfo.getList();
}
}
只有紧跟PageHelper.startPage()的Sql语句才会执行分页。
PageHelper分页实现原理
1、PageHelper首先将前端传递的参数保存到page这个对象中
2、接着将page的副本存放入ThreadLoacl中,ThreadLocal很多地方叫做线程本地变量,为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。这样可以保证分页的时候,参数互不影响
3、PageHelper实现了mybatis提供的拦截器interceptor接口,调用其中的intercept方法,取得ThreadLocal的值
PageHelper在我们执行SQL语句之前动态的将SQL语句拼接了分页的语句,从而实现了从数据库中分页获取的过程。
数据库
数据库三范式
第一范式:确保每列保持原子性,所有字段都是不可拆分的原子值。
假如果一个系统需要经常使用地址中的省份,那么就需要把省份从地址中拆分出来。
第二范式:确保每列都和主键相关,一个数据库表中只能保存一种数据。
设计一个订单信息表,因为订单中可能会有多种商品,所以将订单号与商品号作为联合主键。
对表进行拆分:
第三范式:确定表中的每列与主键直接相关
比如设计一个订单数据表时候,可以用一个外键和订单表建立相应的关系,而不可以在订单表中添加关于客户的其他信息。
虽然说外键可以保证数据的有效性,但是在进行数据的CURD时,都会降低外键的性能,所以不推荐使用,数据的有效性应该在逻辑层进行控制。
数据库SQL语句
条件查询
where语句,对表中数据进行筛选。
模糊查询:查询姓黄的学生
select * from students where name like '黄%'
% 表示0个或多个
_ 表示任意单个字符
[]表示括号内所列字符的一个
[^]表示不在括号内的一个
范围查询
in 表示在一个非连续的范围内
between ... and ... 表示在一个连续的范围内
优先级
小括号、not、比较运算符、逻辑运算符
and比or先运算
排序
select * from info order by id asc|desc [,score asc]
聚合函数
总数 count(*)
最大值 max(id)
最小值 min(id)
平均值 avg(id)
求和 sum(id)
分组
group by:将查询结果按照一个或多个字段进行分组,字段相同的为一组。
group by x,y 是将x相同y相同的数据放进一个分组。
group by + group_concat():group_concat()放置每一组内容集合。
group by + having :having只能用于group by
获取部分行
select * from 表名 limit start,count
连接查询
内连接:结果为两个表的数据
右连接:右表特有数据,左边不存在则为null
左连接:左表特有数据,右边不存在则为null
select * from 表1 inner\left\right join 表2
子查询
在⼀个 select 语句中,嵌⼊了另外⼀个 select 语句, 那么被嵌⼊的 select 语句称之为⼦ 查询语句。
8月23日
名词介绍
mybatis:持久层框架,封装了jdbc代码
mybatis-plus:愿景是成为 MyBatis 最好的搭档,就像 魂斗罗 中的 1P、2P,基友搭配,效率翻倍,只做增强,不做改变。
分页插件PageHelper
- pom文件
2.配置application.yaml
3.编写代码,在service实现类中进行编写代码。
单元测试
单元测试怎么写?
对service、mapper进行单元测试只需要覆盖路径,使用断言。
对controller进行单元测试使用MockMvc
https://www.cnblogs.com/pass-ion/p/14048785.html