sb1
maven:
1.依赖管理:

下载:
在http://maven.apache.org/download.cgi
点击:Binary zip archive中的apache-maven-3.6.3-bin.zip
解压maven安装包:

bin目录的mvn用来构建项目
环境变量path要有mave安装目录的bin,也要有jdk的bin
检测:

找jar包时先在本地仓库找,找不到再上网去中央仓库或镜像仓库下载到本地,再用。
jar的坐标:

远程仓库修改为阿里云的镜像仓库:


在idea中配置,它会自动下载仓库到:D:\aaa2222339\.m2\repository
利用mvn命令快速创建hello项目:
项目地址在前面的目录:

编译项目(不包括测试类)生成target:

先删除target再编译:

先clean再编译(包括test):

idea:
import Project:导入项目,如将eclipse项目导入进idea里面
open :打开之前已经创建好的idea项目
设置字体:

配置mvn:

利用官方魔板快速创建mvn项目:


配置项目位置:

运行自动引入资源:

编译:

或者:

单独执行某个方法:
main:


新创建一个web项目(不是maven项目)所需要的开发环境:spring initializer,包含对应的一堆jar包都引入进来了:




解压缩到某个目录下:

使用idea打开刚刚下载的项目:


或者直接在idea里面的spring initializr新建项目也行,接下来配置maven:


运行一下,此时项目内嵌的tomcat服务器开始工作:

浏览器查看:

spring boot的作用:
起步依赖:一开始时会依赖一些基本的jar包
自动配置:不用再手动配置很多东西
端点监控
建包,包下建立文件:


注解里的字符串是路径参数

重新启动服务器,重新编译:

访问:

关掉服务:

可以设置服务器端口和一级路径:

启动:

然后重启服务器,此时访问要加上一级路径:
@springBootApplication:所标注的类是配置文件
SpringApplication.run(类名.class,args):启动Tomcat并自动创建Spring容器,该容器能自动扫描配置类所在的包以及子包下的被注解标识的bean
比如@controller标识,它用于处理请求,然后装配到容器中
下图只扫描这个包下的bean

下图测试类中:
@Context....:指定Comu..class是配置类
为了拿到Spring 容器,需要实现一个接口。
ApplicationContext对象就是Spring容器,把它拿过来并保存到成员变量里面
测试方法@Test用于打印出该容器


模拟访问数据库,先创建一个接口,再创建一个实现类:

@Repository表示用于访问数据库,也能标识Bean并被Spring容器扫描:

修改测试方法,将Spring容器所扫描到的DAO Bean取出来,然后调用bean的select方法,在执行测试方法前,首先会执行setApplicationContext拿到Spring容器:
再写个实现类做为另一个Bean,由于实现了相同的接口,Spring容器获取时不知道拿哪个,所以加入@Primary表示优先获得:

然后再回到测试方法里面运行一下看看结果。
面向接口:将接口与底层实现不直接耦合,虽然实现类要变动,但是使用到接口的地方就不用改动代码
给Bean定义名字时,如果啥也没写,则默认是类名首字母小写,下面的括号给Bean一个新的名字:

在测试方法当中,通过名字来获得对应的Bean,由于直接拿过来是Object对象,需要转成AlphaDao类型,然后执行该测试方法:

再新建一个Bean:
@Service表示业务组件,也能修饰Bean
@PostConstrct:指定Spring容器在构造对象后就调用该方法
@PreDestroy:Spring容器在销毁对象前调用该方法:

再写个测试方法,当Spring容器初始化Bean之后就会执行该行代码,完了就即将销毁Bean:

被Spring容器管理的Bean默认是单例,只有1个:

若不想单例,则给Bean增加一个scope注解,默认值是single,然后运行测试方法看看:

为了使用第三方的Bean,定义一个普通配置类(@Configuration),然后@Bean定义Bean,方法名要为第三方Bean的名字,该Bean用于格式化时间:

然后在测试类当中就能直接从Spring容器中拿到该Bean并使用它的方法:

Spring Ioc:控制反转,依赖注入是实现它的一种方式
@Autowired实现依赖注入:spring容器根据类自动把自己的Bean注入到属性里面,然后就能直接使用该属性了:

依赖注入指定名字的Bean:

在项目中,controller调用service,service调用dao
在service当中注入dao:


在controller里面把service注入,编写getData方法,由于浏览器会访问到该方法,则加上2个注解:

运行起来访问浏览器:

服务端有三层:
浏览器访问服务器时,先到表现层,表现层与业务层相交互,业务层与数据层相交互
mvc位于表现层,其中的Controller处理请求,model是桥梁,View用于显示

在mvc中,DispatcherServlet是前端控制器,它接受请求,根据注解信息找到对应的controller
得到回复后再把数据交给模板引擎,模板引擎生成html文件返回给DispatcherServlet,DispatcherServlet最后给客户端返回结果

模板引擎用于根据model传来的数据和.html后缀的模板生成HTML文件
此处为了使得改变代码后能及时反应出来需要关闭模板缓存:

底层接受和相应浏览器
request拿到浏览器的请求,然后打印请求中的信息,response用于给浏览器答复
先打印请求方式,请求路径,请求头,请求参数:

启动后浏览器访问:


处理请求新方式:
第一个注解表浏览器访问路径以及必须是GET请求,GET请求用于浏览器从服务器请求数据(参数会显示到url中),POST请求用于浏览器向服务器提交数据
第二个注解表名返回的是个字符串
Spring容器会根据请求参数自动复制到形参当中,也能显式用@RequestParam,要把请求中的current参数复制进来,false:如果请求中没有该参数也行,那就用默认值defaultValue
该方法把请求中的参数做打印(不要前面的@RequestParam注解也能自动放到形参里面)


如果把参数直接写到请求当中,则以此方式拿参数:


在static目录下新增一个文件夹,里面再放一个静态网页:

编写处理表单请求的方法,只要形参和表单中的名字一致就行了:

运行起来,然后访问浏览器:

异步请求:向服务器发送了请求但不必刷新整个网页
相应json字符串:

浏览器显示:

若返回一个集合:


安装MySQL:
https://www.cnblogs.com/winton-nfs/p/11524007.html
进入mysql会读取my.init进行配置,其中:

创建库并使用:

执行已有的脚本来建表:

导入数据:

安装sqlyog:
https://blog.csdn.net/lihua5419/article/details/73881837/
Mybatis作用类似于hibernate:

user表中:
salt字段:一个随机数,拼到密码后再加密,这样能防止破解;
type中,0:普通用户,1:管理员,2:版主
status:用户状态,0:未激活,1:激活
header_url:用户头像路径
create_time:用户创建时间
添加MySQL包:


复制代码并粘贴到pom.xml:


添加Mybatis包:


复制代码并粘贴到pom.xml
配置连接池和mybatis:
idle-timeout:当连接空闲后30000ms内还空闲的话就关闭掉;
package是告诉实体类的位置
倒数第二行:主键自增长
最后一行是将数据表中的字段与类里面的属性做匹配(驼峰匹配:数据库中的header_url能匹配类中的headerUrl):

新建对应的实体类和mapper:

编写实体类,按住alt+insert生成get和set方法,以及toString方法:

在DAO下新建一个接口(数据访问组件),Mybatis注解是@Mapper:

创建配置文件,复制代码并改动一下来为每个方法配置对应的sql
其中namespace为对应Mapper类名,表示为它服务,select中的id为方法名,resultType:返回对象所属的类
#{id}:对应方法的参数名

sql标签的id自定义,下面的sql在引用该标签的所有字段


由于复杂类型识别不了,所以得多定义parameterType,还要指定主键(id),这样数据库里的User就自动有了id,插入数据的时候就不用管id了,此处直接写拿到对象的属性#{}:



开始测试与数据库打交道,新建一个测试类:




设置日志级别,这样就能查看输出的sql语句,以便调试:


浙公网安备 33010602011771号