SpringBoot_02

测试环境

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软件的自动编译信息开启 步骤如下:

  1. 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;
    }
}

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值