SpringBoot第二谈SpringBoot的web开发(集成MyBtis、SpringBoot 下的SpringMVC、SpringBoot开发RESTFul风格、集成Redis)

在这里插入图片描述

本人是一名物联网工程专业的学生,即将进入大三,写博客即是为了记录自己的学习历程,又希望能够帮助到很多和自己一样处于起步阶段的萌新。临渊羡鱼,不如退而结网。一起加油!
博客主页:https://blog.csdn.net/qq_44895397

SpringBoot 集成 MyBatis

1、添加依赖

  • 添加MyBtis整合SpringBoot的起步依赖
<!--MyBatis 整合 SpringBoot 的起步依赖-->
<dependency>
 <groupId>org.mybatis.spring.boot</groupId>
 <artifactId>mybatis-spring-boot-starter</artifactId>
 <version>2.0.0</version>
</dependency>
  • MySQL驱动
<!--MySQL 的驱动依赖-->
<dependency>
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
</dependency>

在这里插入图片描述

  • 版本号继承父项目的版本号
  • 怎么指定mysql驱动的版本呢
  1. properties 中间添加版本号->修改父项目指定的版本号
 <mysql.version>8.0.19</mysql.version>

在这里插入图片描述
2. 指定驱动时就添加版本号

 <!--mysql,mybatis-->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.19</version>
    </dependency>

在这里插入图片描述

2、使用逆向工程生成对应的mapper文件(dao接口、xml映射文件)以及实体类

具体操作参考《SpringBoot 工程下使用 Mybatis “偷懒”工程(反向工程)》

  1. 拷贝 Mybatis 反向工程配置文件到项目的根目录下
  2. 修改 GeneratorMapper.xml 配置
  3. 在 pom.xml文件中添加 mysql 反向工程依赖
  4. 双击运行
    在这里插入图片描述
    在这里插入图片描述

3、在 Springboot 的核心配置文件 application.properties 中配置数据源

注意:mysql版本问题:低版本的driver、url配置和8的不一样

#tomcat
server.port=80
server.servlet.context-path=/

#mysql数据源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/springboot?serverTimezone=UTC&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=yky

4、编写代码(控制层,service层,mapper层添加注解)

在这里插入图片描述

创建web 包并创建 StudentController

在这里插入图片描述

@Controller
//@RestController
public class StudentController {

    @Autowired
    private StudentService studentService;

    @RequestMapping("/student.do")
    @ResponseBody
    public Student selectStudent(Integer id){
        Student student = studentService.queryStudentById(id);
        return student;
    }
}

在 service 包下创建 service 接口并编写代码

service接口:

在这里插入图片描述

public interface StudentService {

    Student queryStudentById(Integer id);
}

service的实现:

@Service
public class StudentServiceImpl implements StudentService {

    @Autowired
    private StudentMapper studentMapper;

    @Override
    public Student queryStudentById(Integer id) {
        Student student = studentMapper.selectByPrimaryKey(id);
        return student;
    }
}

在 Mybatis 反向工程生成的StudentMapper 接口上加一个 @Mapper 注解

@Mapper 作用mybatis 自动扫描数据持久层的映射文件及 DAO 接口的关系

注意:默认情况下,Mybatis 的 xml 映射文件不会编译到 target 的 class 目录下,所以我们需要在 pom.xml 文件中配置 resource

<resources>
	 <resource>
		 <directory>src/main/java</directory>
		<includes>
		 <include>**/*.xml</include>
		</includes>
	 </resource>
</resources>

DAO 其它开发方式

@MapperScan

在 运 行 的 主 类 上 添 加

Mybatis 提供的注解:扫描数据持久层的 mapper 映谢配置文件,DAO 接口上就不用加@Mapper

basePackages 通常指定到数据持久层包即可

在这里插入图片描述

@SpringBootApplication
@MapperScan("com.yky.springboot.mapper")
public class Springbootdemo07Application {

	public static void main(String[] args) {
		SpringApplication.run(Springbootdemo07Application.class, args);
	}
}

将接口和映射文件分开

  • 在resources目录下新建目录mapper存放映射文件,将StudentMapper.xml文件移到resources/mapper目录下

  • 在 application.properties 配置文件中指定映射文件的位置,这个配置只有接口和映射文件不在同一个包的情况下,才需要指定

# 指定 Mybatis 映射文件的路径
mybatis.mapper-locations=classpath:mapper/*.xml

在这里插入图片描述

SpringBoot 事务支持

  • 在入口类中使用注解 @EnableTransactionManagement 开启事务支持(springboot是默认开启的,可以不用加此注解)
  • 在访问数据库的 Service 方法上添加注解 @Transactional 即可

在这里插入图片描述

SpringBoot 下的 SpringMVC

@Controller

Spring MVC 的注解,处理 http 请求

@RestController

Spring 4 后新增注解,是@Controller 注解功能的增强@Controller@ResponseBody 的组合注解

  • 如果一个 Controller 类添加了@RestController,那么该 Controller 类下的所有方法都相当于添加了@ResponseBody 注解

  • 用于返回字符串或 json 数据
    在这里插入图片描述
    在这里插入图片描述

对请求方式限制的注解

@RequestMapping

  • 支持 Get 请求,也支持 Post 请求

@GetMapping

  • RequestMapping 和 Get 请求方法的组合
    只支持 Get 请求 Get 请求主要用于查询操作

@PostMapping

  • RequestMapping 和 Post 请求方法的组合
    只支持 Post 请求 Post 请求主要用户新增数据

@PutMapping

  • RequestMapping 和 Put 请求方法的组合
    只支持 Put 请求 Put 通常用于修改数据

@DeleteMapping

  • RequestMapping 和 Delete 请求方法的组合
    只支持 Delete 请求通常用于删除数据
//RestController 注解相当于加了给方法加了@ResponseBody 注解,所以是不能跳转页面的,
只能返回字符串或者 json 数据
@RestController
public class MVCController {
 @GetMapping(value = "/query")
 public String get() {
	 return "@GetMapping 注解,通常查询时使用";
 }
 @PostMapping(value = "/add")
 public String add() {
 	return "@PostMapping 注解,通常新增时使用";
 }
 @PutMapping(value = "/modify")
 public String modify() {
 	return "@PutMapping 注解,通常更新数据时使用";
 }
 @DeleteMapping(value = "/remove")
 public String remove() {
	 return "@DeleteMapping 注解,通常删除数据时使用";
 	}
 }

SpringBoot 实现 RESTful

什么是RESTFul ?

RESTFUL是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义。RESTFUL适用于移动互联网厂商作为业务使能接口的场景,实现第三方OTT调用移动网络资源的功能,动作类型为新增、变更、删除所调用资源。

比如我们要访问一个 http 接口:http://localhost:8080/springboot?id=1021&name=yky
采用 RESTFul 风格则 http 地址为:http://localhost:8080/springboot/1001/yky

Spring Boot 开发 RESTFul

@PathVariable:获取 url 中的数据

该注解是实现 RESTFul 最主要的一个注解

在这里插入图片描述

 @RequestMapping("/student/{stuid}/{stuname}")
    public Student selectStudentrestful(@PathVariable("stuid") Integer id,
                                        @PathVariable("stuname") String name){
        Student student = studentService.queryStudentById(id);
        return student;
    }

请求冲突的问题

在这里插入图片描述
在这里插入图片描述

解决请求冲突

1、改路径

在这里插入图片描述
在这里插入图片描述

  @GetMapping("/student/{stuid}/class/{stuname}")
    public Student selectStudentrestful(@PathVariable("stuid") Integer id,
                                        @PathVariable("stuname") String name){
        Student student = studentService.queryStudentById(id);
        return student;
    }

    @GetMapping("/student/class/{stuid}/{stuname}")
    public Student selectStudentrestful2(@PathVariable("stuid") Integer id,
                                        @PathVariable("stuname") String name){
        Student student = studentService.queryStudentById(id);
        return student;
    }
2、改请求方式
  1. @PostMapping
    接收和处理 Post 方式的请求

  2. @DeleteMapping
    接收 delete 方式的请求,可以使用 GetMapping 代替

  3. @PutMapping
    接收 put 方式的请求,可以用 PostMapping 代替

  4. @GetMapping
    接收 get 方式的请求

在这里插入图片描述
在这里插入图片描述

@GetMapping("/student/{stuid}/{stuname}")
public Student selectStudentrestful(@PathVariable("stuid") Integer id,
                                    @PathVariable("stuname") String name){
    Student student = studentService.queryStudentById(id);
    return student;
}

@PostMapping("/student/{bookid}/{bookname}")
public Student selectBookrestful(@PathVariable("bookid") Integer id,
                                    @PathVariable("bookname") String name){
    Student student = studentService.queryStudentById(id);
    return student;
}

RESTful 原则

增 post 请求、删 delete 请求、改 put 请求、查 get 请求

  • 请求路径不要出现动词

  • 分页、排序等操作,不需要使用斜杠传参数
    例如:

/boot/orders?page=1&sort=desc

一般传的参数不是数据库表的字段,可以不采用斜杠

SpringBoot 集成 Redis

1、添加redis的起步依赖

 <!-- 加载 spring boot redis 包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>

2、配置核心配置文件

#redis的配置
spring.redis.port=6379
spring.redis.host=localhost
#密码:
#spring.redis.password=yky

3、使用springboot提供的操作redis的模板类

@Autowired
private RedisTemplate<Object,Object> redisTemplate;

4、实体类序列化

实现Serializable接口

public class Student implements Serializable

在这里插入图片描述

启动redis服务

在这里插入图片描述

 /**
     * 通过id查询学生,先在redis内部找,
     * 如果redis内没有就在数据库查,
     * 查找完成后返回并放入redis
     * @param id
     * @return
     */
    @Override
    @Transactional
    public Student queryStudentById(Integer id) {
        Object stu = redisTemplate.opsForValue().get(id);
        if(stu != null){
            return (Student)stu;
        }
        Student student = studentMapper.selectByPrimaryKey(id);
        redisTemplate.opsForValue().set(id,student);
        return student;
    }

猜你喜欢

转载自blog.csdn.net/qq_44895397/article/details/106963125
今日推荐