其他分享
首页 > 其他分享> > 2022年8-22到8-26

2022年8-22到8-26

作者:互联网

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 实现分页

参考文章:https://zhuanlan.zhihu.com/p/344982068

  1. 首先引入PageHelper的Maven依赖
  2. SpringBoot配置文件中声明插件
  3. 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语句拼接了分页的语句,从而实现了从数据库中分页获取的过程。

数据库

数据库三范式

参考文章:数据库设计三大范式(简单易懂)-阿里云开发者社区 (aliyun.com)

第一范式:确保每列保持原子性,所有字段都是不可拆分的原子值。
假如果一个系统需要经常使用地址中的省份,那么就需要把省份从地址中拆分出来。

第二范式:确保每列都和主键相关,一个数据库表中只能保存一种数据。
设计一个订单信息表,因为订单中可能会有多种商品,所以将订单号与商品号作为联合主键。

对表进行拆分:

第三范式:确定表中的每列与主键直接相关
比如设计一个订单数据表时候,可以用一个外键和订单表建立相应的关系,而不可以在订单表中添加关于客户的其他信息。

虽然说外键可以保证数据的有效性,但是在进行数据的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

  1. pom文件

2.配置application.yaml

3.编写代码,在service实现类中进行编写代码。

单元测试

单元测试怎么写?

对service、mapper进行单元测试只需要覆盖路径,使用断言。
对controller进行单元测试使用MockMvc
https://www.cnblogs.com/pass-ion/p/14048785.html

8月24日

标签:语句,26,group,22,PageHelper,2022,查询,id,select
来源: https://www.cnblogs.com/handsometaoa/p/16617350.html