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语句,以便调试: