在src/main/<em>java</em>/com/example/demo2_service目录下新建config文件夹,并在config文件夹下新建MyMvcConfig类 MyMvcConfig类 package com.example.demo2_service.config; import org.springframework.context.
2021-05-22 09:30:40
前言:開頭就不多敘述了,接上篇繼續講《SpringBoot簡明教程(下)》。
5、常用註解
RequestMapping
public @interface RequestMapping {
String name() default "";
@AliasFor("path")
String[] value() default {};
@AliasFor("value")
String[] path() default {};
RequestMethod[] method() default {};
String[] params() default {};
String[] headers() default {};
String[] consumes() default {};
String[] produces() default {};
}
value: 指定請求的實際地址,指定的地址可以是具體地址、可以RestFul動態獲取、也可以使用正則設定method: 指定請求的method類型, 分為GET、POST、PUT、DELETE等consumes: 指定處理請求的提交內容類型(Content-Type),例如application/json, text/htmlproduces: 指定返回的內容類型,僅當request請求頭中的(Accept)類型中包含該指定類型才返回params: 指定request中必須包含某些參數值是,才讓該方法處理headers: 指定request中必須包含某些指定的header值,才能讓該方法處理請求主要理解value及method,其餘參數一般不用。
三、Service層(demo2_service項目)
1、新建項目
新建項目過程與demo1_controller項目類似,不再贅述
2、Servie層處理前端請求並返回資料
1.環境準備
pom.xml檔案裡也要新增thymeleaf模組,指定thymeleaf版本,以及新增maven-compiler-plugin插件指定jdk版本,具體方法demo1_controller已經展示過
2.新建StudentController類
在src/main/java/com/example/demo2_service目錄下新建controller資料夾,並在controller資料夾下新建StudentController類,StudentController上註解@RestController
3.新建Service介面及ServiceImpl類
在src/main/java/com/example/demo2_service目錄下新建service資料夾,在service資料夾下新建StudentService介面與impl資料夾,在impl資料夾下再新建StudentServiceImpl類並實現StudentService介面,在StudentServiceImpl類上用@Service註解表明這是一個Service類
4.在Service介面及ServiceImpl類中聲明及實現方法
在StudentService介面中聲明getFibonacciResult(Integer number)方法
/**
* 通過前端傳入資料計算斐波那契數列值
* @param number
* @return
*/
public Integer getFibonacciResult(Integer number);
在StduentServiceImpl類中實現getFibonacciResult(Integer number)方法
/**
* 通過前端傳入資料計算斐波那契數列值
* @param number
* @return
*/
@Override
public Integer getFibonacciResult(Integer number) {
if (number == 1 || number == 2) {
return 1;
} else {
return getFibonacciResult(number - 1) + getFibonacciResult(number - 2);
}
}
5.編寫controller類
使用@Autowired自動注入StudentService,並編寫getFibonacciResult(Integer number)方法
@Autowired
StudentService studentService;
/**
* 前端輸入初始值,返回斐波那契數列值
* @param number
* @return
*/
@RequestMapping("/getFibonacciResult")
public Integer getFibonacciResult(Integer number) {
12 return studentService.getFibonacciResult(number);
13 }
通過@Autowired自動注入StudentService,就可以從controller層使用service層的類物件,並呼叫其方法,物件的創建、銷燬等生命週期由SpringBoot管理,開發者不用考慮
6.配置SpringMVC
(此步驟非必要,一般是在springboot項目中,修改預設啟動頁(預設啟動頁是static/index.html),修改@ResponseBody返回json轉換方式,新增資源過濾,配置跨域,新增攔截器等操作需要配置mvc。)
在src/main/java/com/example/demo2_service目錄下新建config資料夾,並在config資料夾下新建MyMvcConfig類
MyMvcConfig類
package com.example.demo2_service.config;
import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
/**
* 檢視控制器
* @param registry
*/
@Override
public void addViewControllers(ViewControllerRegistry registry) {
//初始頁面設定為"student"
//第一次參數為指定訪問路徑,第二個參數為指定訪問檢視名
registry.addViewController("/").setViewName("student");
}
20 }
7.新建並編寫Student.html檔案
在resources/templates目錄下新建Student.html檔案,並編寫一個input輸入框與button按鈕,用於前端向後端提交資料
1 <!DOCTYPE html>
2 <htmlxmlns:th="http://www.thymeleaf.org">
3 <head>
4 <meta charset="UTF-8">
5 <title>Title</title>
6 </head>
7 <body>
8 <div>
9 <form th:action="@{/getFibonacciResult}" method="post">
10 <input name="number">
11 <button type="submit" th:text="提交"></button>
12 </form>
13 </div>
14 </body>
15 </html>
8.業務流程
3、Service
層將Dao層的資料傳遞給前端
一般dao層是用於讀寫資料庫的層,此處使用程式碼中固定的資料來模擬資料庫讀寫,章節四中會連線資料庫,演示實際讀寫資料庫的操作。
1.新建StudentDao類
在src/main/java/com/example/demo2_service目錄下新建dao資料夾,並在dao資料夾下新建StudentDao類,StudentDao上註解@Repository表明這是一個Dao類
注意:正常SpringBoot項目開發中,Dao層一般設定為介面而非具體類
2.編寫StudentDao類
package com.example.demo2_service.dao;
import org.springframework.stereotype.Repository;
/**
* 資料訪問層
*/
@Repository
public class StudentDao {
String studentDaoString = new String("from StudentDao");
/**
* 得到Dao層資料
* @return
*/
public String getStudentDaoString() {
return studentDaoString;
}
}
此處getStudentDaoString()方法為返回一個字元串
3.編寫StudentService介面與StudentServiceImpl類
StduentService介面
package com.example.demo2_service.service;
/**
* 業務層
*/
public interface StudentService {
/**
* 通過前端傳入資料計算斐波那契數列值
* @param number
* @return
*/
public Integer getFibonacciResult(Integer number);
/**
* 得到Dao層資料
* @return
*/
public String getStudentDaoString();
}
StudentServiceImpl類
4.編寫StduentController類
5.業務流程
前端訪問http://localhost:8080/getStudentDaoString地址
四、Dao層(demo3_dao項目)
1、新建項目
新建項目過程與demo1_controller項目類似,不再贅述
2、環境準備
需要安裝
MySQL(建議安裝MySQL8版本)
Navicat for MySQL
1.pom.xml
jdbc模組、druid模組、log4j2模組、mysql驅動模組、mybatis模組
同樣使用maven-compiler-plugin插件指定項目源碼及編譯後的Jdk版本
1 <!-- maven-compiler-plugin插件 指定項目源碼及編譯後的Jdk版本 -->
2 <plugin>
3 <groupId>org.apache.maven.plugins</groupId>
4 <artifactId>maven-compiler-plugin</artifactId>
5 <version>3.8.1</version>
6 <configuration>
7 <source>1.8</source>
8 <target>1.8</target>
9 </configuration>
10 </plugin>
2.application.yaml
預設配置檔案為application.properties,我們採用yaml格式的配置檔案,在resources資料夾下新建application.yaml檔案,原有的application.properties可以刪除
配置檔案此處不進行詳細說明
3.Druid配置類
在src/main/java/com/example/demo3_dao目錄下新建config資料夾,並在config資料夾下新建DruidConfig類。
4.log4j日誌
在resources目錄下新建log4j.properties檔案。
1 log4j.rootLogger=DEBUG, stdout
2 log4j.appender.stdout=org.apache.log4j.ConsoleAppender
3 log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
4 log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
5.student.sql建表語句
在resources目錄下新建sql資料夾,將student.sql檔案匯入sql資料夾
SET NAMES utf8;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for student
-- ----------------------------
CREATE TABLE IF NOT EXISTS `student` (
`id` int NOT NULL COMMENT '學號',
`name` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '姓名',
`score` int NOT NULL COMMENT '成績',
`birthplace` varchar(16) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '籍貫',
`birthday` date NOT NULL COMMENT '生日',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
6.Student實體類
在src/main/java/com/example/demo3_dao目錄下新建domain資料夾,並在domain下新建Student類
3、連線資料庫
此時可以在測試類中檢視資料來源
src/test/java/com/example/demo3_dao/Demo3DaoApplicationTests
package com.example.demo3_dao;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
@SpringBootTest
class Demo3DaoApplicationTests {
@Autowired
DataSource dataSource;
/**
* 測試檢視資料來源
* @throws SQLException
*/
@Test
void contextLoads() throws SQLException {
System.out.println(dataSource.getClass());
Connection connection = dataSource.getConnection();
System.out.println("資料來源:"+connection);
connection.close();
}
}
運行測試類的contextLoads()方法,可在控制檯看到druid資料來源
運行程式,控制檯可以發現數據庫建表語句
通過Navicat可以發現springboot下已經成功新建資料表
4、註解法進行CRUD
StduentDao
package com.example.demo3_dao.dao;
import com.example.demo3_dao.domain.Student;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface StudentDao {
/**
* 新增學生資訊
* @param student
*/
@Insert("INSERT INTO student(id,name,score,birthplace,birthday) VALUES (#{id},#{name},#{score},#{birthplace},#{birthday})")
public void AddStudent(Student student);
/**
* 刪除學生資訊
* @param id
*/
@Delete("DELETE FROM student WHERE id=#{id}")
public void DeleteStudentById(Integer id);
/**
* 修改學生資訊
* @param student
*/
@Update("UPDATE student SET name=#{name},score=#{score},birthplace=#{birthplace},birthday=#{birthday} WHERE id=#{id}")
public void UpdateStudent(Student student);
/**
* 查詢某個學生資訊
* @param id
* @return
*/
@Select("SELECT * FROM student WHERE id=#{id}")
public Student FindStudentById(Integer id);
/**
* 查詢所有學生資訊
* @return
*/
@Select("SELECT * FROM student")
public List<Student> FindAllStudent();
}
本項目未編寫controller層、service層等,就不具體實現其功能,可以通過使用測試類(Demo3DaoApplicationTests)檢視是否成功進行資料互動
1.測試新增學生功能
新增學生測試方法
/**
* 測試新增學生
*/
@Test
public void AddStudent() {
//預設一個學生資訊
Student student = new Student();
student.setId(1);
student.setName("張三");
student.setScore(100);
student.setBirthplace("四川");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
try {
date = simpleDateFormat.parse("2020-02-02");
} catch (ParseException e) {
e.printStackTrace();
}
student.setBirthday(date);
//在控制檯輸出學生資訊
System.out.println("學生資訊:"+student);
//將學生資訊存入資料庫
studentDao.AddStudent(student);
}
運行測試方法
控制檯可以看到學生資訊
通過Navicat可以看到資料被寫入資料庫
2.測試查詢學生功能
通過Navicat在資料庫寫入幾條資料
查詢學生測試方法
/**
* 測試查詢學生
* @return
*/
@Test
public void FindStudentById() {
//從資料庫查詢學生
Student student = studentDao.FindStudentById(2);
//在控制檯輸出學生資訊
System.out.println("查詢的學生資訊:"+student);
}
運行測試方法
可在控制檯看到查詢學生的資訊
3.測試修改學生功能
修改學生測試方法
/**
* 測試修改學生
*/
@Test
public void UpdateStudent() {
//預設一個學生資訊
Student student = new Student();
//待修改學生的學號
student.setId(1);
//修改其他資訊
student.setName("張三");
student.setScore(60);
student.setBirthplace("新疆");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = new Date();
try {
date = simpleDateFormat.parse("2020-01-01");
} catch (ParseException e) {
e.printStackTrace();
}
student.setBirthday(date);
//在控制檯輸出學生資訊
System.out.println("修改後的學生資訊:"+student);
//修改學生資訊
studentDao.UpdateStudent(student);
}
運行測試方法
可在控制檯看到修改後的學生的資訊
通過Navicat可以看到資料庫中的內容已經被修改
4.測試刪除學生功能
刪除學生測試方法
1 /**
2 * 測試刪除學生 */
3 @Test
4 public void DeleteStudentById() {
5 //刪除學號為2的學生
6 studentDao.DeleteStudentById(2);
7 }
運行測試方法
通過Navicat可以看到資料庫中的內容已經被修改
5、配置檔案法進行CRUD
1.新建並編寫StduentMapper.xml檔案
在resources目錄下新建mybatis資料夾,在mybatis資料夾下新建mapper資料夾,在mapper資料夾下新建StudentMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.demo3_dao.dao.StudentDao">
<!-- 新增學生 -->
<insert id="AddStudent">
INSERT INTO student(id,name,score,birthplace,birthday) VALUES (#{id},#{name},#{score},#{birthplace},#{birthday})
</insert>
<!-- 刪除學生 -->
<delete id="DeleteStudentById">
DELETE FROM student WHERE id=#{id}
</delete>
<!-- 更新學生 -->
<update id="UpdateStudent">
UPDATE student SET name=#{name},score=#{score},birthplace=#{birthplace},birthday=#{birthday} WHERE id=#{id}
</update>
<!-- 查詢某個學生 -->
<select id="FindStudentById" resultType="com.example.demo.domain.Student">
SELECT * FROM student WHERE id=#{id}
</select>
<!-- 查詢所有學生 -->
<select id="FindAllStudent" resultType="com.example.demo.domain.Student">
SELECT * FROM student
</select>
</mapper>
2.在application.yaml檔案中配置mybatis資訊
1 #mybatis配置
2 mybatis:
3 #指定sql對映檔案路徑
4 mapper-locations: classpath:mybatis/mapper/*.xml
3.StudentDao.interface方法名與StduentMapper.xml中的id名要一一對應
如StduentDao.interface中新增學生
1 public void AddStudent(Student student);
StudentMapper.xml中新增學生
1 <!-- 新增學生 -->
2 <insert id="AddStudent">
3 INSERT INTO student(id,name,score,birthplace,birthday) VALUES (#{id},#{name},#{score},#{birthplace},#{birthday})
4 </insert>
此時StudentDao.interfeace內容為
package com.example.demo3_dao.dao;
import com.example.demo3_dao.domain.Student;
import org.apache.ibatis.annotations.*;
import org.springframework.stereotype.Repository;
import java.util.List;
@Mapper
@Repository
public interface StudentDao {
/**
* 新增學生資訊
* @param student
*/
public void AddStudent(Student student);
/**
* 刪除學生資訊
* @param id
*/
public void DeleteStudentById(Integer id);
/**
* 修改學生資訊
* @param student
*/
public void UpdateStudent(Student student);
/**
* 查詢某個學生資訊
* @param id
* @return
*/
public Student FindStudentById(Integer id);
/**
* 查詢所有學生資訊
* @return
*/
public List<Student> FindAllStudent();
}
本項目未編寫controller層、service層等,就不具體實現其功能
可以從測試類中驗證CRUD操作,與註解法類似,此處不再演示
五、Demo項目(整合了前面全部功能的一個演示項目)
1、目錄結構
見 一、SpringBoot簡介->4、SpringBoot項目->1.SpringBoot項目常見目錄結構
2、層級簡介
src/main/java/com/example/demo目錄下
config是配置資料夾
controller是控制層資料夾
dao是資料訪問層資料夾
domain是資料表物件層資料夾
service是業務層資料夾
src/main/resources資料夾下
mybatis是mybatis相關資料夾
sql是Mysql語句資料夾
static是靜態資原始檔夾
templates是模板資料夾
src/test目錄下與測試相關
pom.xml與配置依賴相關
3、CRUD演示
1.新增學生
初始頁面
進入新增頁面並填寫資訊
點選新增按鈕回到學生列表頁面
2.查詢學生
此項目僅做了查詢所有學生資訊,點選「查詢所有學生資訊」按鈕即可在學生列表頁面看到所有學生資訊
3.修改學生
點選需要修改的學生資訊右側的修改按鈕,此處選擇修改2號學生,進入修改頁面
點選修改按鈕返回至學生列表頁面
4.刪除學生
點選需要刪除的學生資訊右側的刪除按鈕,此處選擇刪除4號學生,重新整理學生列表頁面
以上就是《《SpringBoot簡明教程(下)》》的分享。也歡迎大家交流探討,該文章若有不正確的地方,希望大家多多包涵。創作不易,你們的支援就是我最大的動力,如果對大家有幫忙給個贊哦~~~
相關文章
在src/main/<em>java</em>/com/example/demo2_service目录下新建config文件夹,并在config文件夹下新建MyMvcConfig类 MyMvcConfig类 package com.example.demo2_service.config; import org.springframework.context.
2021-05-22 09:30:40
类型三 PDF转<em>WORD</em>问题 1、为什么使用PDF转<em>WORD</em>后会乱码?“爲亻十ლ(′◉❥◉`ლ)嚒 硪 の紋件會亂石马锕?”好一个火星文!火星!我带着我的文档也来了!由于部分PDF文档内部内容加密、文字编码方式不兼容
2021-05-22 09:30:03
同事作为“果粉”(也可能是假“果粉”),用<em>苹果手机</em>好多年了,我自己也有一部,由于购买时经费不是很充足选择了8Plus的64GB版本,所以基本上压箱底了。不过同事还是扎扎实实的在用,不过他很煎熬,<em>iPhone</em>XR用原
2021-05-22 09:00:26
海外爆料者Peng Phones在社交平台公布了一组<em>iPhone</em> 13系列的渲染图,其中显示该系列将会配备一款名为“Rose Pink”(玫瑰粉)的配色,通体采用粉色打造,想必该配色一旦上市将受到不少女性用户的追捧。<em>iPhone</em
2021-05-22 09:00:11
在资讯科技(IT)领域,12年有如光年那么久,加密币若是实用,早该像苹果2010年推出的<em>iPad</em>平板电脑、或2012年开始被采用的Zoom视讯会议软体、或2009年推出的Venmo行动支付服务那般,如今已融入民众日常生活;否则,
2021-05-22 08:30:30
就在前不久,苹果发布了史上最强 <em>iPad</em> Pro:因为它用上了桌面端芯片 M1,还有一块非常强大的 mini-LED 显示屏。正当大家都在期待 6 月份的 WWDC 大会能让 <em>iPad</em> 支持 macOS,成为真正的生产力设备时。<em>i
2021-05-22 08:30:11