软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》

文章目录


实验目标

1. 安装mysql, 建立一张学院表, 主要字段包括学院代码、学院名称、院长姓名、院长工号等。
2. 配置spring boot , 连接到mysql
3. 学习JPA(Java Persistence API) , 学会使用jpa查询数据
4. 学习mybatis plus(或者mybatis),学会使用其访问数据库进行查询
5. 编写相关的controller,http://localhost/query 返回学院表中所有的记录,显示在网页上, 可以直接是json数据,(也可以自学模板引擎,一行一行进行显示。)
6. 编写添加、删除、修改的后端代码,学会使用postman 等工具,对数据进行删除、添加、修改(无需编写前端的网页代码, 当然也可以采用模板引擎, 写网页进行删除)

一、环境配置过程

  1. 安装Mysql、navicat(破解一下)过程出现的错误
    软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》
    如上图所示,starting the server失败,通常是因为上次安装的该软件未清除干净,其次要注意看log的内容,解决方法如下:
    (1) 卸载mySQL软件,检查安装目录是否已卸载删除干净
    (2) 开始-运行-输入regedit打开注册表编辑器,找到HKEY_LOCAL_MACHINE,选中HKEY_LOCAL_MACHINE,点击右键查找,在项上打上勾,其他的都不选,然后输入mysql,然后将HKEY_LOCAL_MACHINE中找到的关于mysql的文件夹删掉(多查找几次,有多个,都删掉)。
    (3)删除隐藏目录,首先在文件夹选项中勾选
    “显示隐藏文件、文件夹河驱动器",然后在C盘找到文件夹C:\ProgramData,删除里面的MySQL文件夹。
    (4) 重新安装软件

  1. 安装配置spring boot、maven遇到的坑:
    老师教学过程中使用的idea支持自动导入包的功能,而最新的idea(2020版本)已经没有了这个支持,在网上寻找很多方法,但是最终还是卸载了,安装了旧版的,因此maven也需要重新配置。
    spring版本也是,先开始使用2.x版本,后来按照老师的教学也出现了报错的情况。
    因此,下次安装软件时,要么按照老师的要求安装对应环境,要么上网查询一下哪个版本最好,可以少走弯路。
    建议版本:
    软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》
    软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》
    软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》
    修改spring版本:
    软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》

  2. 安装postman

二、配置过程

1.spring boot assistant与lombok

我下载的2017版本的idea中没有springboot initialize很不方便,上网查询,在idea中下载了springboot assistant插件。用这个插件创建项目十分方便,只要勾中对应的依赖就可以自动帮你在pox.xml中引入对应的依赖。
软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》

实验过程中,因为有大量的get、set方法,于是下载lombok插件(让idea环境清楚@Data的含义),并引入对应的依赖,只要在对应的类前面加上@Data就可以自动生成 get和set 方法。

软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》

2.一些缺包的错误:

大部分可以通过快捷键alt+enter解决:把光标放在代码显红的地方,就可以自动引入需要的包
其余的:
软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》
解决方法:
import org.junit.jupiter.api.Test修改成 import org.junit.Test

三、代码部分

1.配置application.yml

server:
  port: 11111
spring:
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/chen yun?autoReconnect=true&useSSL=false
    username: root
    password: 1632367883
  jpa:
    hibernate:
      ddl-auto: update
      show-sql: true

解释:

  • server端口号,需要找空闲的,用命令stat -a|findstr 11111发现,11111号端口是空闲的。(如果运行程序时发生端口被占用,可以Kill那个进程,具体命令上网搜一搜)
  • show-sql:true 表示通过server查询时,在console中会显示出生成的sql语句

2.编写实体类College:

@Entity
@Data
public class College {
    @Id
    private String collegeCode;

    private String collegeName;

    private String masterName;

    private String masterNum;
}

3.QueryRepository接口

软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》
作用是:利用接口jpaRepository中默认的方法,避免写方法了,所有的数据库语句,都可以用jpa的接口写出来。即使连接不同的数据库,运用jpa的接口写出来的方法依然可以移植过去。为程序员省去了学习不同数据库语言的麻烦!

4.编写QueryController

其中@RestController=@Controller+@ResponseBody
@Autowired自动导入,避免了new一个对象

@RestController
public class QueryController {
    @Autowired
    private CollegeRepository collegeRepository;

    @GetMapping(value="/query")
    public List<College> collegeList(){
        //返回所有学院记录
        return collegeRepository.findAll();
    }

    @PostMapping(value="/query")
    public College collegeAdd(@RequestParam("collegeCode") String collegeCode,
                              @RequestParam("collegeName") String collegeName,
                              @RequestParam("masterName") String masterName,
                              @RequestParam("masterNum") String masterNum){
        //增加学院记录
        College college = new College();
        college.setCollegeCode(collegeCode);
        college.setCollegeName(collegeName);
        college.setMasterName(masterName);
        college.setMasterNum(masterNum);

        return  collegeRepository.save(college);
    }

    @GetMapping(value="/query/{collegeCode}")
    public College collegeFindOne(@PathVariable("collegeCode") String collegeCode)
    {
        //查询某学院信息
        return collegeRepository.findOne(collegeCode);
    }

    @PutMapping(value = "/query/{collegeCode}")
    public College collegeUpdate(@PathVariable("collegeCode") String collegeCode,
                                 @RequestParam("collegeName") String collegeName,
                                 @RequestParam("masterName") String masterName,
                                 @RequestParam("masterNum") String masterNum){
        //修改学院记录
        College college = new College();
        college.setCollegeCode(collegeCode);
        college.setCollegeName(collegeName);
        college.setMasterName(masterName);
        college.setMasterNum(masterNum);

        return collegeRepository.save(college);
    }

    @DeleteMapping(value = "/query/{collegeCode}")
    public void collegeDelete(@PathVariable("collegeCode") String collegeCode){
        collegeRepository.delete(collegeCode);
        //删除某个学院记录
    }
}

四、Debug部分

1.启动应用报错

软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》
解决方法:在url后面添加一串代码
软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》

2.端口被占用

3.功能出错

查询没有返回值:
软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》
问题在于:我们定义的类college,对应于数据库中同名的表,而我在数据库中创建的表叫:学院,所以冲突了。
软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》
软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》
问题在于:表中的属性对应college中的属性值,所以删除《学院》表,保留《college》表,并在其中添加数据

4.@PathVariable和@RequestParam注解的混淆

软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》
修改如下图:
软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》
软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》
软件工程第二节课 《springboot 连接 sql数据库,实现 增删改查功能》

总结

1.代码之后会进行重构,因为为了保障以后扩展和修改的可能性,需要定义比如Service的接口等等。

2.经过验证,项目的基本功能是正确地实现的。

上一篇:Pandas中loc,iloc函数的用法


下一篇:AT279 题解