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;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章