web基础
# web基础
# 前置
比起认知来说,认知效率更为重要。
- 行动很重要, 千里之行始于足下。
- 有人指路和没人指路差别很大。
- 阶段性目标。
- 获得正反馈。
- 圈子很重要。
- 战术上重视,战略上藐视。这绝对不是一句空话。
# 基础知识
基础知识——后端: 这本跟开涛学spring mvc,我计划用一两个小时就要去看看,然后去掌握一下里面的重点。 《Spring boot实战》 对于数据库这块,每天练习五道题。 基础知识——前端: 对于前端三件套,HTML,css,js一般人都会比较熟练了。 记住JQuery是一项比较老的技术,不建议再学。 一些比较老的前端会用bootstrap的布局,但是现在主流的还是VUE2或者VUE3,但目前VUE3是新的主流。 前端可以看看慕课网这个课程:vue2.5入门 https://www.imooc.com/learn/980 (3个小时左右) VueJS 官网 https://cn.vuejs.org/v2/guide/
大多数情况下,你不会是真正的0基础的;在入门的时候,效率是极其重要的; 一定要给自己设置Deadline,因为无数次的经验证明Deadline是最好的效率推手; 即便你花的时间远大于我给的设定,没关系,尽你最大能力去完成,你的认知效率已经高于其它人了。
# 零碎概念
学习什么是JPA、H2 用来干啥?参考:https://www.pdai.tech/md/project/project-a-2-1.html
JDBC(JavaDataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句的一个驱动。
ORM 对象关系映射(Object Relational Mapping,简称ORM), 简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。
MyBatis是对JDBC的封装, 是常用的ORM框架之一。MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
# PageHelper是如何实现分页的?
理解它的原理,有两个点:第一,相对对于JDBC这种嵌入式的分页而言,PageHelper分页是独立的,能做到独立分页查询,那它必然是通过某个拦截点进行了拦截,这样它才能够进行解耦分离出分页。第二,我们通过PageHelper.startPage(pageNum, pageSize, orderBy)方法后的第一个select是具备分页能力的,那它必然缓存了分页信息,同时结合线程知识,这里必然使用的是本地栈ThreadLocal,即每个线程有一个本地缓存。所以结合这两点,聪明的你就会想到它大概是如何实现的,关键就是两点(拦截,ThreadLocal), 我们看下源码:
所以这里提示下想进阶的开发者,源码的阅读是伴随着思路现行的(有了思路,简单看源码),而不是直接源码。
就使用PageHelper本身而言,第二种和第三种方式较为中规中矩,它是早前绝大多数的使用方式。并不是说中规中矩就是不好的,很多场景下保守能让团队的绝大多数人接受便是好的方式。当更多的人接受Java8 lambda方式后,Page<User> page = PageHelper.startPage(1, 10).doSelectPage(()-> userMapper.selectGroupBy());
这种方式显然对于他们来说更为优雅。
但是这种方法也不是长久之计,真正长远的趋势应该是被ORM融合,并且考虑更多的适用场景提供各种常见实现方式的封装功能(即约定大于实现中的约定),同时结合builder参数构建和lambda方式写法等语言特性写法上做到优雅。所以你可以看到JPA,MyBatis-plus等中相关的封装和实现就是这种趋势。