文章目录
实验目标
1. 安装mysql, 建立一张学院表, 主要字段包括学院代码、学院名称、院长姓名、院长工号等。2. 配置spring boot , 连接到mysql
3. 学习JPA(Java Persistence API) , 学会使用jpa查询数据
4. 学习mybatis plus(或者mybatis),学会使用其访问数据库进行查询
5. 编写相关的controller,http://localhost/query 返回学院表中所有的记录,显示在网页上, 可以直接是json数据,(也可以自学模板引擎,一行一行进行显示。)
6. 编写添加、删除、修改的后端代码,学会使用postman 等工具,对数据进行删除、添加、修改(无需编写前端的网页代码, 当然也可以采用模板引擎, 写网页进行删除)
一、环境配置过程
- 安装Mysql、navicat(破解一下)过程出现的错误
如上图所示,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) 重新安装软件
-
安装配置spring boot、maven遇到的坑:
老师教学过程中使用的idea支持自动导入包的功能,而最新的idea(2020版本)已经没有了这个支持,在网上寻找很多方法,但是最终还是卸载了,安装了旧版的,因此maven也需要重新配置。
spring版本也是,先开始使用2.x版本,后来按照老师的教学也出现了报错的情况。
因此,下次安装软件时,要么按照老师的要求安装对应环境,要么上网查询一下哪个版本最好,可以少走弯路。
建议版本:
修改spring版本: -
安装postman
二、配置过程
1.spring boot assistant与lombok
我下载的2017版本的idea中没有springboot initialize很不方便,上网查询,在idea中下载了springboot assistant插件。用这个插件创建项目十分方便,只要勾中对应的依赖就可以自动帮你在pox.xml中引入对应的依赖。
实验过程中,因为有大量的get、set方法,于是下载lombok插件(让idea环境清楚@Data的含义),并引入对应的依赖,只要在对应的类前面加上@Data就可以自动生成 get和set 方法。
2.一些缺包的错误:
大部分可以通过快捷键alt+enter解决:把光标放在代码显红的地方,就可以自动引入需要的包
其余的:
解决方法:
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接口
作用是:利用接口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.启动应用报错
解决方法:在url后面添加一串代码
2.端口被占用
3.功能出错
查询没有返回值:
问题在于:我们定义的类college,对应于数据库中同名的表,而我在数据库中创建的表叫:学院,所以冲突了。
问题在于:表中的属性对应college中的属性值,所以删除《学院》表,保留《college》表,并在其中添加数据
4.@PathVariable和@RequestParam注解的混淆
修改如下图: