本人是一名物聯網工程專業的學生,即將進入大三,寫博客即是爲了記錄自己的學習歷程,又希望能夠幫助到很多和自己一樣處於起步階段的萌新。臨淵羨魚,不如退而結網。一起加油!
博客主頁: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驅動的版本呢
- 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 “偷懶”工程(反向工程)》
- 拷貝 Mybatis 反向工程配置文件到項目的根目錄下
- 修改 GeneratorMapper.xml 配置
- 在 pom.xml文件中添加 mysql 反向工程依賴
- 雙擊運行
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、改請求方式
-
@PostMapping
接收和處理 Post 方式的請求 -
@DeleteMapping
接收 delete 方式的請求,可以使用 GetMapping 代替 -
@PutMapping
接收 put 方式的請求,可以用 PostMapping 代替 -
@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;
}