确保数据库已经安上,javajdk是1.8版本
首先https://start.spring.io/下载框架
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UeB6NkMj-1645584534448)(C:\Users\ZSL\AppData\Roaming\Typora\typora-user-images\1645435709328.png)]
这是依赖图
整体的样子:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UE8nHFsz-1645584534455)(C:\Users\ZSL\AppData\Roaming\Typora\typora-user-images\1645435766159.png)]
下载好了后解压,用idea打开,
将左边的文件夹搞好
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qu2Pm4YT-1645584534458)(C:\Users\ZSL\AppData\Roaming\Typora\typora-user-images\1645493750202.png)]
介绍一下文件夹的作用
- controller文件夹
- controller文件夹内的java类这是控制器,传参,调用方法的类,确定在url上的路径。
- controller层即控制层。
controller层的功能为请求和响应控制。
controller层负责前后端交互,接受前端请求,调用service层,接收service层返回的数据,最后返回具体的页面和数据到客户端。
- entity文件夹
- Form01类是实体类,意思是跟我的数据库里面的文件的属性一一对应
- model层(数据库表字段映射到实体类)
数据库实体层,也被称为entity层,pojo层。
一般数据库一张表对应一个实体类,类属性同表字段一一对应。
- mapper文件夹(Dao文件夹)
- mapper类是映射器,数据持久层,访问数据库
- dao层即数据持久层,也被称为mapper层。
dao层的作用为访问数据库,向数据库发送sql语句,完成数据的增删改查任务。
- service文件夹
- 一个接口,一个类,接口也是存放增删改查四个抽象方法
- 类是实现了service接口,并且在类里调用了mapper接口new了一个对象,这个对象我们就调用mapper
- service层即业务逻辑层。
service层的作用为完成功能设计。
service层调用dao层接口,接收dao层返回的数据,完成项目的基本功能设计 接口里面的方法
package com.example.demo.controller;
//也写了方法,跟serivice中的一样,不过是传参用的
//这个类调用serivice的方法
import com.example.demo.entity.Form01;
import com.example.demo.mapper.Form01Mapper;
import com.example.demo.service.Form01Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController//返回json,规范接口@controller与@RestController有区别
@RequestMapping("/Form01")//url映射,在url上的路径
public class Form01Controller {
//引入Service层
@Autowired//对成员变量、方法和构造函数进行标注,来完成自动装配的工作
Form01Service form01Service;
//IoC@GetMapping("/all")//@GetMapping = @RequestMapping(method=RequestMethod.GET)
public List getFrom(){//设置返回List,grtFrom方法
return form01Service.findAll();
}@GetMapping("/findById")//查一会问阳哥查的数据怎么输入
public Form01 findById(@RequestParam(name = "id",required =true) Integer id){//传入数据
return form01Service.findByID(id);
}@PostMapping ("/savedata")//增ok
public String savedata(@RequestBody Form01 form01){//把你传过来的json数据包装成form01实体
form01Service.save(form01);
return "succes";
}
@PutMapping("/updata")//改ok
public String updata(@RequestBody Form01 form01){
form01Service.updataById(form01);
return "succes";
}
@DeleteMapping("/{id}")//删ok
public String deletById(@PathVariable("id") int id){//@PathVariable允许前台地址传过来带id
form01Service.deleteById(id);
return "succes";
}
@GetMapping("/{id}")//按id查找
public Form01 foundById(@PathVariable("id") int id){//@PathVariable允许前台地址传过来带id
return form01Service.foundById(id);
}
}
//4、controller层(前后端传参)
//controller层即控制层。
//controller层的功能为请求和响应控制。
//controller层负责前后端交互,接受前端请求,调用service层,接收service层返回的数据,最后返回具体的页面和数据到客户端。
//
package com.example.demo.entity;
//实体类与数据库内容一致对应
import lombok.Data;
//entity是实体的意思,实体类,为啥不叫数据库类
@Data
public class Form01 {
private int id;
private String name;
private int age;
private String sex;
private String gradeClass;
}
//1、model层(数据库表字段映射到实体类)
//数据库实体层,也被称为entity层,pojo层。
//一般数据库一张表对应一个实体类,类属性同表字段一一对应。
package com.example.demo.mapper;
//这里接口的方法定义不大懂,这里的接口跟service类有关,生成了form01Mapper抽象类
//向数据库发送执行增删改查的sql语句的代码的类
//mapper文件夹作用是访问数据库原本用@select标签写了select语句,但是阳哥说这样子sql语句简单就可以,但是难了的话是不行的,
//于是用了@Mapper标签,这是个接口
import com.example.demo.entity.Form01;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@Mapper//mybatis的插件,单表查询时很方便//那我没写sql代码是因为啥
public interface Form01Mapper {//List数组,泛型
List findAll();
//String替换成了List,也就是说List是数据类型数据类型 方法名();这个样子Form01 findById(@Param("idx") Integer id);
//@Param当参数为2-5个时候,用@param最佳,其他时候用mapvoid saveData(Form01 form01);
void updataById(Form01 form01);
Form01 deletById(int id);
Form01 foundById(int id);
}
//dao层(CURD方法)
//dao层即数据持久层,也被称为mapper层。
//dao层的作用为访问数据库,向数据库发送sql语句,完成数据的增删改查任务。
package com.example.demo.service.impl;
//所以它实现了service接口,然后IoC了mapper接口,mapper接口的方法通过form01Mapper这个实例对象调用,所以如果我一调用
//service方法
import com.example.demo.entity.Form01;
import com.example.demo.mapper.Form01Mapper;
import com.example.demo.service.Form01Service;
import org.springframework.stereotype.Service;
//service包实现业务逻辑import javax.annotation.Resource;
import java.util.List;
@Service
public class Form01ServiceImpl implements Form01Service {//表01服务 实现表接口
@Resource
Form01Mapper form01Mapper;
//IoC如果没采用它,应该怎么写@Override
public List findAll() {
return form01Mapper.findAll();
}@Override
public Form01 findByID(Integer id) {
return form01Mapper.findById(id);
}@Override
public void save(Form01 form01) {
form01Mapper.saveData(form01);
}
@Override
public void updataById(Form01 form01){
form01Mapper.updataById(form01);
}
@Override
public void deleteById(int id){
form01Mapper.deletById( id);
}
@Override
public Form01 foundById(int id){
return form01Mapper.foundById(id);
}
}
package com.example.demo.service;
//定义增删改查抽象
import com.example.demo.entity.Form01;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface Form01Service {
List findAll();
Form01 findByID(Integer id);
void save(Form01 form01);
void updataById(Form01 form01);
void deleteById(int id);
Form01 foundById(int id);
}
//3、service层 (功能设计)
//service层即业务逻辑层。
//service层的作用为完成功能设计。
//service层调用dao层接口,接收dao层返回的数据,完成项目的基本功能设计。
package com.example.demo;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.example.demo.mapper")
public class Demo02Application { public static void main(String[] args) {
SpringApplication.run(Demo02Application.class, args);
}}
//个人总结,一般先写实体类就是entity文件,找数据库表写个类一一对应
//然后mapper写接口,但是我现在搞不懂为啥两个接口,同时都实现了
="findAll" resultType="com.example.demo.entity.Form01">
select * from form01
="findById" parameterType="int" resultType="com.example.demo.entity.Form01">
select *,grade_class as gradeClass from form01 where id= #{idx}
="saveData" parameterType="com.example.demo.entity.Form01" >INSERT INTO form01 (id, name, age, sex, grade_class) VALUES (#{id}, #{name}, #{age}, #{sex}, #{gradeClass})
="updataById" parameterType="com.example.demo.entity.Form01" >UPDATE form01 SET id=#{id}, name=#{name}, age=#{age}, sex=#{sex}, grade_class=#{gradeClass} where id= #{id}
="deletById" parameterType="com.example.demo.entity.Form01">
DELETE FROM form01 WHERE id = #{id};
="foundById" parameterType="com.example.demo.entity.Form01" resultType="com.example.demo.entity.Form01">
select * from form01 where id= #{id}
server.port=8080
#这里配置数据库文件localhost:3306/表的名字?serverTimezone=GMT%2B8&charac...
spring.datasource.url=jdbc:mysql://localhost:3306/database01?serverTimezone=GMT%2B8&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Drivermybatis.mapper-locations: classpath:mapper/*.xml
#导入mapper包中的xml文件
Postman操作 增
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S30IPkNa-1645584534460)(C:\Users\ZSL\AppData\Roaming\Typora\typora-user-images\1645580527766.png)]
删
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7QPsfePv-1645584534461)(C:\Users\ZSL\AppData\Roaming\Typora\typora-user-images\1645580669475.png)]
改
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-k3J3vQn9-1645584534463)(C:\Users\ZSL\AppData\Roaming\Typora\typora-user-images\1645580708196.png)]
查
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iAAzt8FM-1645584534465)(C:\Users\ZSL\AppData\Roaming\Typora\typora-user-images\1645580786534.png)]
【spring|springboot增删改查案例】完成。
推荐阅读
- Flink 基础知识 - 时间、窗口、水位线
- java|Java 定义线段Line类,用两个端点坐标表示线段位置,定义计算线段长度的方法,以及线段平移的方法
- #|SpringCloud Alibaba 之Seata(总体第三篇)
- Rest-assured|Rest-assured1- 测试框架
- SpringQueryMap 这个注解一不小心就采坑了
- java|Nginx,一看就会
- spring|项目总结 -谷粒学院
- 一文看懂Spring Bean注解!莫要再被各种“注解”搞晕了!
- Java Map接口详解