创建springboot报错
Initialization failed for 'https://start.spring.io' Please check URL, network and proxy settings. Error message: connect timed out
解决方法
https://blog.csdn.net/qq_42815122/article/details/85551956
我的电脑输入: http://start.spring.io 是可以的
或者都设置成http://start.springboot.io/也不行
于是用下面的方法,是可以的
问题2:idea右击新建文件找不到java class
解决:https://blog.csdn.net/qq_28289405/article/details/80760223
问题3.如法导入@RestController, 因为maven没有安装好,安装好就可以了,这个过程很漫长,建议先配置好maven,改成在阿里云下载
maven原本下载位置
输入代码测试是否可以运行
package com.qf.firstspringboot.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@GetMapping("/test")
public String test(){
return "Hello SpringBoot!";
}
}
找到默认创建的启动类文件,运行main方法,然后到浏览器输入http://localhost:8080/test
成功显示在浏览器
SpringBoot目录结构
SpringBoot三种启动方式
1.运行启动类的main方法即可运行SpringBoot工程
2.采用maven的命令去运行SpringBoot工程
前提: 打开terminal, 然后输入mvn -v, 如果配置好maven环境变量,可以看到maven信息就可以运行否则就不能
配置好后直接输入: mvn spring-boot:run
浏览器访问就可以了
ctrl+cc 停掉maven
3.采用jar包的方式运行
将当前项目打包成一个jar文件
mvn clean package
打包出现报错, 原因我改了本地仓库,从原来的的.md的下面考了一部分文件到新的本地仓库,由于jar包冲突或者其他的
把默认中央仓库在C盘.m2中repository文件下的全部都考到新的本地仓库中,然后打包就可以
解决之后如下
target下面出现jar包
通过java-jar jar文件
把jar包拖到桌面, 打开我的电脑粘贴回车 C:\Users\HP\Desktop,然后cmd 回车, 然后输入: java -jar .\first-springboot-0.0.1-SNAPSHOT.jar, 回车
启动成功
springboot内置了Tomcat,不需要容器也可以启动成功
三 SpringBoot常用注解
3.1@Configuration和@Bean
之前使用SSM去开发时, 在xml文件中编写bean标签.
但是SpringBoot不推荐使用xml文件.
@Configuration注解相当于beans标签
@Bean注解相当于bean标签
id="方法名|注解中的name属性(优先级更高)"
class="方法的返回结果"
@Configuration //代表当前类是一个配置类
public class UserConfig {
@Bean(name = "user1") //构建一个实例,放到spring容器中
public User user(){
User user=new User();
user.setId(1);
user.setName("张三");
return user;
}
/*
<beans...> @Configuration
<bean id="user1" class="com.qf.firstspringboot.entity.User"/>
</beans
*/
}
3.2 @SpringBootApplication 启动类中注解
1.@SpringBootConfiguration就是@Configuration注解, 代表启动类就是一个配置类
2.@EnableAutoConfiguration帮你实现自动装配的, SpringBoot工程启动时, 运行一个SpringFactoriesLoader的类, 加载META-INF/spring.factories配置类(已经开启的), 通过SpringFactoriesLoader方法, 一for循环的方式, 一个一个加载
好处: 无序编写大量的整合配置信息, 只需要安装SpringBoot提供好了约定去整合即可.
坏处: 如果说你导入了一个starter依赖, 那么你就需要填写他必要的配置信息.
手动关闭自动装配指定内容: @SpringBootApplication(exclude=QuartzAutoConfiguration.class)
3.@ComponenScan就相当于<context:component-scan basePackage="包名"/>, 帮助扫描注解的. 扫描当前启动类下的,其他包下无法扫描
如果要扫描其他包,需要引入其他包名@ComponentScan(basePackages="com.qf.xxx")
四 SpringBoot常用配置
4.1SpringBoot的配置文件格式
SpringBoot的配置文件支持properties和yml, 甚至他还支持json.
更推荐使用yml文件格式
1.yml文件, 会根据换行和缩进帮助我们管理配置文件所在位置
2.yml文件, 相比proerties更轻量一些
yml文件的劣势:
1.样遵循换行和缩进
2.在填写value时, 一定要在:后面加上空格
4.2多环境配置yml
在application文件中添加一个配置项:
#下面2个都不会去运行,只会运行application.yml的文件, 这个文件可以指定使用下面那一个文件
spring:
profiles:
#使用dev的文件
active: 环境名
在resource目录下, 创建多个application-环境名.yml文件即可
在部署工程时, 通过Java -jar文件 --spring.profiles=环境
配置后不起作用
我一直把active: 后面写成了dev所以不起作用, 报404错误, 加上-dev就可以了, 这个加-dev是不正确的,加了就不是运行application-dev.yml文件了
一直报错是因为, 在地址栏中直接输入了http://localhost:8080/test
应该是http://localhost:8080/boot/test 才可以访问
4.3引入外部配置文件信息
和传统的SSM方式一样,通过@Value的注解去获取properties/yml文件中的内容
如果在yml文件中需要编写大量的自定义配置, 并且具有统一的前缀时, 采用如下方式
@ConfigurationProperties(prefix = "aliyun")
@Component
@Data
public class AliyunProperties {
//属性名映射成配置文件的后缀
//@Data就是为每个属性提供了get和set方法,不用自己写get和set了
private String xxxx;
private String yyyy;
private String zzzz;
private String aaaa;
private String bbbb;
}
yml文件中
#拿到全部以aliyun开头的自定义配置信息, 如果使用之前的@value注解需要些4个, 使用一次性接收多个的方式
#创建一个包properties,创建一个AliyunProperties类, 然后在TestController中获取
aliyun:
xxxx: xxxxxxxxx
yyyy: yyyyyy
zzzz: zzzzzzz
aaaa: aaaaaa
bbbb: bbbbbb
如果爆红pom加下面依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
4.4热加载
避免重启项目, 修改代码直接执行
1. pom.xml加入依赖
<!--热加载,true启动-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
2.修改idea里Settings的设置
然后重启,使依赖生效
3. 修改内容然后通过Build重新构建工程, 然后看下面的控制台是否成功, 然后刷新网页
遇到的问题SpringBoot中用@Value读取yml中的值报错
多模块下yml文件读取问题Could not resolve placeholder xxx value '${xxx}'
问题maven引入配置出现红色
解决方式, 在pom.xml文件中有一个m刷新图标,点一下,等一段时间反应一下就不报红了
五 SpringBoot整合Mybatis
1. 导入依赖, 在pom.xml内加入
1.1mysql驱动
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
1.2druid连接池,到maven中https://mvnrepository.com/搜索
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
1.3mybatis, 到maven中https://mvnrepository.com/搜索, 找依赖次数最多的
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.3.2</version>
</dependency>
2.编写配置文件
2.1.准备实体类
先添加mysql数据库,数据表,数据
idea连接mysql
连接失败, 因为本地的mysql是5.7版本,所以连接的 driver版本需要是 5.x 的版本
换成mysql5.1版本驱动; 测试连接提示缺少驱动, 点击下载即可
下载失败
使用maven手动下载一个mysql包
参考地址: https://blog.csdn.net/fan521dan/article/details/104902294/
https://blog.csdn.net/qq_44813077/article/details/107081001
https://blog.csdn.net/qq_42542609/article/details/105360459
本地maven库就有了
之前是红色的点击, 这个地方可以下载成功
有报错, 5.1不支持5.7.25
换成musql后显示时区报错, 选中utc这一行时区,->apply
提示成功->ok
连接后不显示库和表
解决地址: https://blog.csdn.net/weixin_44195615/article/details/107357143
勾选就可以显示了
选中2张表,右键直接生成实体类, 选中生成到那个目录下->点击ok
修改实体类
2.2准备Mapper接口
package com.qf.firstspringboot.mapper;
import com.qf.firstspringboot.entity.Air;
import java.util.List;
public interface AirMapper {
//返回全部数据, 需要在启动类中加上一个扫描的mybatis的注解,@MapperScan(basePackages = "com.qf.firstspringboot.mapper")
List<Air> findAll();
}
启动类中添加注解, 扫描mapper接口所在的包
@MapperScan(basePackages = "com.qf.firstspringboot.mapper")//扫描mybatis的接口
2.3准备映射文件
准备映射文件AirMapper.xml
<!-- 准备映射文件 -->
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qf.firstspringboot.mapper.AirMapper">
<!-- List<Air> findAll();-->
<select id="findAll" resultType="Air">
select * from air
</select>
</mapper>
需要有东西扫描映射文件
<!-- 添加yml文件配置信息 -->
#mybatis配置
#mapper-locations: 扫描映射文件
#type-aliases-package: 配置别名扫描的包
#map-underscore-to-camel-case: 开启驼峰映射配置
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.qf.firstspringboot.entity
configuration:
map-underscore-to-camel-case: true
百度搜索: mybatis映射文件约束
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
2.3指定连接数据库的信息
# 连接数据库的信息
# driver-class-name: 连接池
# type: 使用德鲁伊数据源
# ?serverTimezone=UTC 指定时区,东八区, 是idea自动使用的mysql8.0
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql:///air?serverTimezone=UTC #或者jdbc:mysql://127.0.0.1:3306/air
username: root
password: 1234
type: com.alibaba.druid.pool.DruidDataSource
3.测试
在mapper接口的位置直接右键->goto-Test
自动创建当前接口的测试类, 在test目录下
让当前测试类, 继承FirstSpringbootApplicationTests测试类.(在class前添加public)
package com.qf.firstspringboot.mapper;
import com.qf.firstspringboot.FirstSpringbootApplicationTests;
import com.qf.firstspringboot.entity.Air;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
class AirMapperTest extends FirstSpringbootApplicationTests {
//自动注入
@Autowired
private AirMapper airMapper;
@Test
void findAll() {
List<Air> list=airMapper.findAll();
for(Air air: list){
System.out.println(air);
}
}
}
5.2注解整合mybatis (简单的sql语句可以,复杂的需要是xml)
1.创建District的Mapper接口
package com.qf.firstspringboot.mapper;
import com.qf.firstspringboot.entity.District;
import java.util.List;
public interface DistirctMapper {
List<District> findAll();
}
2.添加mybatis注解
针对增删改查: @Insert, @Delete, @Update, @Select
还是需要在启动类中添加@MapperScan注解,(用于扫描接口, 不需要管xml,因为这个没有xml)
<!-- 添加yml文件配置信息 -->
#mybatis配置
#map-underscore-to-camel-case: 开启驼峰映射配置
mybatis:
configuration:
map-underscore-to-camel-case: true
package com.qf.firstspringboot.mapper;
import com.qf.firstspringboot.entity.District;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
public interface DistirctMapper {
@Select("select * from district")
List<District> findAll();
@Select("select * from district where id=#{id}")
District findOneById(@Param("id") Integer id);
}
3.测试, 看到执行的sql语句
日志中看不到执行的sql, 在yml中添加配置
# 查看sql语句
# com.qf.firstspringboot.mapper: 哪个包下的
logging:
level:
com.qf.firstspringboot.mapper: debug
package com.qf.firstspringboot.mapper;
import com.qf.firstspringboot.FirstSpringbootApplicationTests;
import com.qf.firstspringboot.entity.District;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import static org.junit.jupiter.api.Assertions.*;
class DistirctMapperTest extends FirstSpringbootApplicationTests {
@Autowired
private DistirctMapper mapper;
@Test
void findAll() {
List<District> list= mapper.findAll();
for (District district:list){
System.out.println(district);
}
}
@Test
void findOneById() {
District district=mapper.findOneById(5);
System.out.println(district);
}
}
5.3 SpringBoot整合分页助手
1.导入依赖
maven中https://mvnrepository.com/搜索 pagehelper依赖
<!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.5</version>
</dependency>
2.测试使用
//测试分页助手
@Test
public void findByPage(){
//1.执行分页
PageHelper.startPage(1,2);//直接输入1,2
//2.执行查询
List<Air> list=airMapper.findAll();
//3.封装PageInfo对象
PageInfo<Air> pageInfo=new PageInfo<>(list);
//4.输出
for(Air air : pageInfo.getList()){
System.out.println(air);
}
}