测试环境
IDEA2020.1.2
SpringBoot 2.7.17
jdk 8
一. 配置热部署
热部署原理(程序自启动):其实是使用了两个 ClassLoader,一个 ClassLoader 加载哪些不会改变的类,另一个 ClassLoader 加载会更改的类,称为 restart ClassLoader,这样对于代码更改的时候,原来的 restart ClassLoader 会被丢弃,重新创建一个 restart ClassLoader,由于需要加载的类相对比较少,所以实现了快速重启。
1.在pom依赖里加jar包
<!-- 热部署 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
2.配置文件
1.先创建 application.yml 文件
也可以使用 application.properties 两个功能相同
application.properties: 是键值对结构 = 分割 等号前面是键 后面是值
application.yml: 是树形结构
2.两个文件的优先级
application.yml > application.properties
因为在两者同时修改访问端口号是 出现的是 application.properties 所修改的 我的理解是 因为 application.yml 的优先级高 先做出修改 application.properties 后做出修改 先做出的修改被覆盖掉了 所以 application.yml 优先级高
3.配置
#1.是.yml文件的树形结构显示出来的
#2.是.properties 键值对所显示的
两者功能相同都是配置热部署的
# 配置热部署---自动刷新 #1 spring: devtools: restart: enabled: true additional-paths: src/main/java#----------------------------------------------------------
#2
spring.devtools.restart.enabled=true spring.devtools.restart.additional-paths=src/main/java
spring.devtools.restart.enabled=true 等于true代表热部署开启 false 代表关闭热部署
spring.devtools.restart.additional-paths=src/main/java 配置热部署的文件是src/main/java下面所有的包以及文件(java文件)
配置进行到了这里在修改 src/main/java 下方文件内容时应该以及可以进行自动刷新了 如果还不可以 需要将idea软件的自动编译信息开启 步骤如下:
- File -> Setting -> Build, Execution, Deployment -> Compiler:勾选 [Build project automatically]
二. 修改内置Tomcat端口号
SpringBoot 里是自带Tomcat的
默认的端口号为 8080 在这里我们对端口号进行一个修改操作
在 application.yml 文件里添加
server: port: 8848
修改完之后 我们在运行程序 我们的端口号就变成我们修改之后的了
三. 配置跳转操作
1.跳转到html页面
这个配置是支持直接跳转到html页面的 不需要添加任何的jar包 但是有一个硬性要求就是会去static下面找文件所以我们的html页面必须写在static下面 并且static这个文件夹必须写在 resources下面 写在别的地方无法跳转到相对页面
配置:
同样在 application.yml 里边添加
spring: mvc: #配置试图的信息 默认会去static包里面找 view: prefix: / # prefix 拼接的前缀 suffix: .html # suffix 拼接的后缀
上面html页面已经创建好了 配置也配置完了 下面进行跳转操作
****注意 这里使用的是 @Controller 这个注解 而不是 @RestController这个注解
@Controller 使用 return 时进行跳转页面操作
@RestController 使用 return 时进行的是打印 "" 里面的内容
访问 http://localhost:8848/second
成功跳转到 aaa.html页面
2.跳转jsp页面
跳转jsp页面就不能单纯的只在.yml里面进行配置了 需要在pom文件里添加两个jar包
<!-- 支持跳转jsp页面的jar包 --> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <version>9.0.82</version> </dependency> <dependency> <groupId>org.glassfish.web</groupId> <artifactId>javax.servlet.jsp.jstl</artifactId> <version>1.2.2</version> </dependency>
添加完jar包之后记得查看是否添加成功了
添加过jar包之后的操作就跟跳转html页面没什么区别了
不同的是 html 是去static下面找文件而 jsp 是去wabapp下面找
进行跳转
四. 整合 MyBatis--连接数据库
1.statters 组件都有哪些
官方:
spring-boot-starter-xxx
如:
spring-boot-starter-web
还有第三方的:
xxx-spring-boot-starter
如:
mybatis-spring-boot-starter
2. 配置mybais
添加pom依赖
<!-- mybatis包 --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.3.3</version> </dependency> <!-- mysql包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.44</version> </dependency>
3.编写配置文件
配置连接数据库的文件 四大要素 也称之为四大金刚 驱动 url路径 用户名 密码
*** 我的pom文件 mysql 驱动是5.1.44版本的 如果你的是 8.几版本的 需要将下方这一行做出修改
driver-class-name: com.mysql.jdbc.Driver
改为 需要在中间加一个cj
driver-class-name: com.mysql.cj.jdbc.Driver
spring: datasource: url:jdbc:mysql://localhost:3306/springboottestcharacterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true password: 123456 username: root driver-class-name: com.mysql.jdbc.Driver
4.开始编写简单增删改查
这一章不使用web编写 做一个简单的增删改查
1.创建一个实体类 entity
将实体类的类与数据库一 一对应 创建有参构造和无参构造 以及get set方法
2.创建mapper(dao) 层
mapper层比较特殊 程序执行需要对mapper层进行扫描 在之前学习SSM时进行了配置对这一层进行扫描 在这里当然也需要 扫描mapper层有两种方式
1.在每个mapper接口里单独声明
缺点 :
每个接口里面都需要单独写@Mapper
2.说完上面的缺点当然有更好的了(我懒)
第二种方法 只需要写一次就OK
在启动类里面写一个扫描注解 直接扫描整个Mapper包 这样之后包里面所有的接口都被扫描到了 就不用再单独写了
注意 : 扫描包的路径不要写错
3.创建service层(服务层)
4.创建controller层
整体代码
实体类
public class Student {
private int id;
private String stuname;
private String sex;
private String idcard;
private Date birthday;
public Student() {
}
// 用于根据id修改名字
public Student(int id, String stuname) {
this.id = id;
this.stuname = stuname;
}
// 用于新增
public Student(String stuname, String sex, String idcard, Date birthday) {
this.stuname = stuname;
this.sex = sex;
this.idcard = idcard;
this.birthday = birthday;
}
public Student(int id, String stuname, String sex, String idcard, Date birthday) {
this.id = id;
this.stuname = stuname;
this.sex = sex;
this.idcard = idcard;
this.birthday = birthday;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getStuname() {
return stuname;
}
public void setStuname(String stuname) {
this.stuname = stuname;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getIdcard() {
return idcard;
}
public void setIdcard(String idcard) {
this.idcard = idcard;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
}
mapper层
public interface StudentMapper {
@Select("select * from student")
List<Student> findAll();
@Insert("insert student(stuname,sex,idcard,birthday) value(#{stuname},#{sex},#{idcard},#{birthday})")
int StuAdd(@Param("stuname") String stuname,@Param("sex") String sex,@Param("idcard") String idcard,@Param("birthday") Date birthday);
@Update("update student set stuname='测试N' where id=#{id}")
int StuUpd(int id);
@Delete("delete from student where id=#{id}")
int StuDel(int id);
}
service
public interface StudentService {
List<Student> findAll();
int StuAdd(String name, String sex, String idcard, Date birthday);
int StuUpd(int id);
int StuDel(int id);
}
serviceimpl 实现接口
@Service
public class StudentServiceImpl implements StudentService {
@Resource
private StudentMapper studentMapper;
@Override
public List<Student> findAll() {
return studentMapper.findAll();
}
@Override
public int StuAdd(String name, String sex, String idcard, Date birthday) {
return studentMapper.StuAdd(name,sex,idcard,birthday);
}
@Override
public int StuUpd(int id) {
return studentMapper.StuUpd(id);
}
@Override
public int StuDel(int id) {
return studentMapper.StuDel(id);
}
}
controller层
@RestController
@RequestMapping("stu")
public class StudentController {
@Resource
private StudentService studentService;
@GetMapping("select")
public List<Student> findAll(){
return studentService.findAll();
}
@GetMapping("add")
public int StuAdd(String name, String sex, String idcard, Date birthday) throws ParseException {
SimpleDateFormat ft = new SimpleDateFormat("yyyy-MM-dd");
String time = "2029-2-19";
Date date = ft.parse(time);
int i = studentService.StuAdd("测试","测试","测试",date);
return i;
}
@GetMapping("upd")
public int StuUpd(){
int i = studentService.StuUpd(2);
return i;
}
@GetMapping("del")
private int StuDel(){
int i = studentService.StuDel(3);
return i;
}
}