前言
??博主介紹:?CSDN特邀作者、985計(jì)算機(jī)專業(yè)畢業(yè)、某互聯(lián)網(wǎng)大廠高級(jí)全棧開發(fā)程序員、碼云/掘金/華為云/阿里云/InfoQ/StackOverflow/github等平臺(tái)優(yōu)質(zhì)作者、專注于Java、小程序、前端、python等技術(shù)領(lǐng)域和畢業(yè)項(xiàng)目實(shí)戰(zhàn),以及程序定制化開發(fā)、全棧講解、就業(yè)輔導(dǎo)、面試輔導(dǎo)、簡歷修改。???
???? 精彩專欄 推薦訂閱????
2023-2024年最值得選的微信小程序畢業(yè)設(shè)計(jì)選題大全:100個(gè)熱門選題推薦?2023-2024年最值得選的Java畢業(yè)設(shè)計(jì)選題大全:500個(gè)熱門選題推薦?
Java精品實(shí)戰(zhàn)案例《500套》文章來源:http://www.zghlxwxcb.cn/news/detail-833780.html
微信小程序項(xiàng)目精品案例《500套》
Java核心技術(shù)精選
Java框架精選
??文末獲取源碼+數(shù)據(jù)庫??
感興趣的可以先收藏起來,還有大家在畢設(shè)選題,項(xiàng)目以及論文編寫等相關(guān)問題都可以給我留言咨詢,希望幫助更多的人
詳細(xì)視頻演示
請聯(lián)系我獲取更詳細(xì)的演示視頻
具體實(shí)現(xiàn)截圖
技術(shù)棧
后端框架SpringBoot
Spring Boot是基于Spring Framework的開發(fā)框架,具有許多優(yōu)勢。它內(nèi)置了Tomcat、Jetty和Undertow等服務(wù)器,可以直接使用而無需額外安裝和配置。最重要的是,Spring Boot具有強(qiáng)大的自動(dòng)配置功能,能根據(jù)項(xiàng)目依賴自動(dòng)配置應(yīng)用程序,大大簡化了開發(fā)過程。此外,Spring Boot還提供了豐富的開箱即用功能和插件,如Spring Data、Spring Security和Spring Cloud等,使得開發(fā)者能夠更快速地構(gòu)建應(yīng)用程序,并輕松擴(kuò)展和集成其他技術(shù)。除此之外,Spring Boot還具有靈活的配置管理、快速開發(fā)和部署、優(yōu)秀的社區(qū)支持、監(jiān)控和診斷工具以及可靠的測試支持等功能。這些優(yōu)勢使得Spring Boot成為流行的框架,能夠幫助開發(fā)者更快、更輕松地構(gòu)建高質(zhì)量的應(yīng)用程序,并提供良好的可配置性、可擴(kuò)展性和可維護(hù)性。
下面是核心代碼的示例:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class HelloWorldApplication {
public static void main(String[] args) {
SpringApplication.run(HelloWorldApplication.class, args);
}
@GetMapping("/hello")
public String helloWorld() {
return "Hello, World!";
}
}
這段代碼定義了一個(gè)Spring Boot應(yīng)用程序的入口類HelloWorldApplication
,使用@SpringBootApplication
注解標(biāo)記為一個(gè)Spring Boot應(yīng)用程序,并使用@RestController
注解將該類標(biāo)記為一個(gè)RESTful控制器。
在控制器中,我們定義了一個(gè)helloWorld
方法,并使用@GetMapping
注解將該方法映射到"/hello"路徑,當(dāng)訪問該路徑時(shí),該方法會(huì)返回一個(gè)簡單的字符串"Hello, World!"作為響應(yīng)。
通過SpringApplication.run
方法啟動(dòng)應(yīng)用程序后,Spring Boot會(huì)自動(dòng)配置并啟動(dòng)內(nèi)嵌的服務(wù)器,我們可以通過訪問"http://localhost:8080/hello"來調(diào)用helloWorld
方法,并得到"Hello, World!"作為響應(yīng)。
這個(gè)示例展示了一個(gè)最簡單的Spring Boot應(yīng)用程序,你可以根據(jù)自己的需求進(jìn)一步擴(kuò)展和定制代碼。希望這個(gè)示例能幫助你更好地理解Spring Boot的核心代碼。
前端框架Vue
Vue.js是一種流行的JavaScript框架,它具有許多優(yōu)勢。其中,Vue.js的核心優(yōu)勢之一是虛擬DOM技術(shù)。虛擬DOM是一個(gè)內(nèi)存中的數(shù)據(jù)結(jié)構(gòu),它在實(shí)現(xiàn)高效的DOM操作方面發(fā)揮了重要作用。
Vue.js采用了響應(yīng)式數(shù)據(jù)綁定、虛擬DOM、組件化等現(xiàn)代化技術(shù),為開發(fā)者提供了一種靈活、高效、易于維護(hù)的開發(fā)模式。當(dāng)數(shù)據(jù)發(fā)生變化時(shí),Vue.js能夠自動(dòng)更新UI,開發(fā)者無需手動(dòng)更新UI,從而能夠更加專注于數(shù)據(jù)處理。
下面是一個(gè)示例代碼,演示了Vue.js的核心功能:
<!DOCTYPE html>
<html>
<head>
<title>Vue.js Demo</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<div id="app">
<h2>{{ message }}</h2>
<button @click="changeMessage">Change Message</button>
</div>
<script>
var app = new Vue({
el: '#app',
data: {
message: 'Hello, Vue.js!'
},
methods: {
changeMessage: function() {
this.message = 'Vue.js is awesome!';
}
}
});
</script>
</body>
</html>
在這個(gè)示例中,我們創(chuàng)建了一個(gè)Vue實(shí)例,并將其綁定到頁面上的一個(gè)元素(id為"app")。通過data
屬性,我們定義了一個(gè)名為message
的變量,并將其初始值設(shè)為"Hello, Vue.js!"。在頁面上,我們使用雙花括號(hào)語法({{ message }}
)將message
的值顯示出來。通過methods
屬性,我們定義了一個(gè)名為changeMessage
的方法,當(dāng)點(diǎn)擊按鈕時(shí),該方法會(huì)修改message
的值。由于Vue.js的響應(yīng)式數(shù)據(jù)綁定機(jī)制,一旦message
的值發(fā)生變化,頁面上顯示的內(nèi)容也會(huì)自動(dòng)更新。
通過這個(gè)示例,我們可以看到Vue.js的簡潔、靈活和高效的特點(diǎn)。它使得開發(fā)者能夠更加輕松地處理數(shù)據(jù)和UI之間的關(guān)系,提高開發(fā)效率。無論是構(gòu)建小型應(yīng)用還是大型復(fù)雜的單頁應(yīng)用,Vue.js都是一個(gè)值得考慮的選擇。
持久層框架MyBaits
MyBatis是一個(gè)開源的持久層框架,它可以幫助開發(fā)者簡化數(shù)據(jù)庫操作的編寫和管理。MyBatis的核心思想是將SQL語句和Java代碼分離,通過XML或注解的方式來描述數(shù)據(jù)庫操作,從而實(shí)現(xiàn)了數(shù)據(jù)訪問層的解耦和靈活性。
MyBatis的優(yōu)勢主要包括以下幾點(diǎn):
-
簡化數(shù)據(jù)庫操作:MyBatis通過提供強(qiáng)大的SQL映射功能,可以將Java對象與數(shù)據(jù)庫表進(jìn)行映射,開發(fā)者無需手動(dòng)編寫繁瑣的SQL語句,大大簡化了數(shù)據(jù)庫操作的編寫和維護(hù)。
-
靈活的SQL控制:MyBatis支持動(dòng)態(tài)SQL,可以根據(jù)不同的條件和邏輯來動(dòng)態(tài)生成SQL語句,使得查詢、更新等操作更加靈活和可控。
-
緩存支持:MyBatis提供了一級(jí)緩存和二級(jí)緩存的支持,可以有效減少數(shù)據(jù)庫的訪問次數(shù),提高系統(tǒng)性能。
-
可擴(kuò)展性強(qiáng):MyBatis采用插件機(jī)制,可以方便地?cái)U(kuò)展和定制自己的功能,滿足各種不同的業(yè)務(wù)需求。
系統(tǒng)測試
為了確保我們的系統(tǒng)達(dá)到最高的質(zhì)量標(biāo)準(zhǔn),本系統(tǒng)進(jìn)行了全方位的測試。我們的目標(biāo)是從多個(gè)角度發(fā)現(xiàn)系統(tǒng)中存在的問題,并及時(shí)進(jìn)行改進(jìn),以確保系統(tǒng)的完整性和可靠性。
通過功能測試,能夠找出系統(tǒng)中的潛在缺陷,并對其進(jìn)行修復(fù)。這樣可以確保我們的系統(tǒng)能夠無缺陷地運(yùn)行,滿足客戶的需求。我們積極尋找問題和不足之處,并及時(shí)采取措施進(jìn)行改進(jìn)。
在測試過程中,我們不僅僅關(guān)注系統(tǒng)的功能性,還注重系統(tǒng)是否滿足用戶的需求。通過這些測試,我們能夠準(zhǔn)確地評(píng)估系統(tǒng)的性能,并得出測試結(jié)論。我們的目標(biāo)是確保系統(tǒng)的質(zhì)量和穩(wěn)定性,為用戶提供優(yōu)質(zhì)的體驗(yàn)。
我們不斷努力,持續(xù)優(yōu)化我們的系統(tǒng),以滿足用戶的期望和需求。我們將繼續(xù)進(jìn)行測試和改進(jìn),以確保我們的系統(tǒng)始終處于最佳狀態(tài)。
系統(tǒng)測試目的
在管理系統(tǒng)的開發(fā)周期中,系統(tǒng)測試是至關(guān)重要的環(huán)節(jié)。它是確保系統(tǒng)質(zhì)量和可靠性的最后一道關(guān)卡,也是整個(gè)開發(fā)過程的最后一次檢查。
系統(tǒng)測試的主要目的是避免用戶在使用過程中遇到問題,提升用戶體驗(yàn)。我們需要從多個(gè)角度和思路出發(fā),考慮系統(tǒng)可能遇到的問題,并通過模擬不同的場景來發(fā)現(xiàn)缺陷并解決問題。測試過程中,我們也可以評(píng)估系統(tǒng)的質(zhì)量情況,檢查系統(tǒng)功能是否完備,邏輯是否順暢。一次成功的系統(tǒng)測試將極大地提升系統(tǒng)的質(zhì)量和用戶體驗(yàn)。
測試的目標(biāo)是驗(yàn)證系統(tǒng)是否符合需求規(guī)格說明書的定義,并找出與需求規(guī)格說明書不符或沖突的內(nèi)容。在測試過程中,我們始終站在用戶的角度考慮問題,避免浪費(fèi)時(shí)間在一些不切實(shí)際的場景上,以確保預(yù)期結(jié)果與實(shí)際結(jié)果一致。
本系統(tǒng)致力于保障系統(tǒng)的質(zhì)量和穩(wěn)定性,優(yōu)化用戶的使用體驗(yàn)。通過系統(tǒng)測試,能夠及時(shí)發(fā)現(xiàn)并解決問題,確保系統(tǒng)符合用戶需求,并提供最佳的服務(wù)。我們將持續(xù)努力,提高系統(tǒng)的可靠性和用戶滿意度。
系統(tǒng)功能測試
系統(tǒng)功能測試是對系統(tǒng)功能模塊進(jìn)行的測試過程。通過點(diǎn)擊、輸入邊界值、驗(yàn)證必填項(xiàng)和非必填項(xiàng)等方法進(jìn)行黑盒測試。編寫測試用例,根據(jù)測試用例執(zhí)行測試,并得出測試結(jié)論。
以登錄功能為例,本系統(tǒng)進(jìn)行登錄功能測試。當(dāng)用戶需要登錄系統(tǒng)時(shí),本系統(tǒng)通過賬戶密碼等功能點(diǎn)進(jìn)行驗(yàn)證。用戶在輸入時(shí)需要與數(shù)據(jù)庫存儲(chǔ)的數(shù)據(jù)匹配。如果其中某項(xiàng)輸入錯(cuò)誤,系統(tǒng)將提示輸入錯(cuò)誤。該界面還對角色權(quán)限進(jìn)行校驗(yàn),當(dāng)用戶選擇管理員角色登錄時(shí),系統(tǒng)會(huì)報(bào)錯(cuò)。下表是登錄功能的測試用例示例:
輸入數(shù)據(jù) | 預(yù)期結(jié)果 | 實(shí)際結(jié)果 | 結(jié)果分析 |
---|---|---|---|
用戶名:guanliyuan 密碼:123456 驗(yàn)證碼:正確輸入 | 登錄系統(tǒng) | 成功登錄系統(tǒng) | 結(jié)果一致 |
用戶名:guanliyuan 密碼:111111 驗(yàn)證碼:正確輸入 | 密碼錯(cuò)誤 | 密碼錯(cuò)誤,請重新輸入密碼 | 結(jié)果一致 |
用戶名:guanliyuan 密碼:123456 驗(yàn)證碼:錯(cuò)誤輸入 | 驗(yàn)證碼錯(cuò)誤 | 驗(yàn)證碼信息錯(cuò)誤 | 結(jié)果一致 |
用戶名:空 密碼:123456 驗(yàn)證碼:正確輸入 | 用戶名必填 | 請輸入用戶名 | 結(jié)果一致 |
用戶名:guanliyuan 密碼:空 驗(yàn)證碼:正確輸入 | 密碼錯(cuò)誤 | 密碼錯(cuò)誤,請重新輸入密碼 | 結(jié)果一致 |
另外,本系統(tǒng)還進(jìn)行了用戶管理功能的測試。用戶管理包括添加、編輯、刪除和查找用戶等功能。本系統(tǒng)測試了以下各項(xiàng)功能的測試用例:
- 添加用戶功能測試用例:
輸入數(shù)據(jù) | 預(yù)期結(jié)果 | 實(shí)際結(jié)果 | 結(jié)果分析 |
---|---|---|---|
用戶名:user1 密碼:123456 角色:普通用戶 | 添加成功,并在用戶列表中顯示 | 用戶列表中出現(xiàn)用戶1 | 結(jié)果一致 |
用戶名:user2 密碼:111111 角色:普通用戶 | 添加成功,并在用戶列表中顯示 | 用戶列表中出現(xiàn)用戶2 | 結(jié)果一致 |
用戶名:user1 密碼:123456 角色:普通用戶 | 添加失敗,提示用戶名已存在 | 添加失敗,提示用戶名已存在 | 結(jié)果一致 |
用戶名:空 密碼:123456 角色:普通用戶 | 添加失敗,提示用戶名不能為空 | 添加失敗,提示用戶名不能為空 | 結(jié)果一致 |
- 編輯用戶功能測試用例:
輸入數(shù)據(jù) | 預(yù)期結(jié)果 | 實(shí)際結(jié)果 | 結(jié)果分析 |
---|---|---|---|
選擇用戶1,修改密碼為654321 | 編輯成功,密碼修改成功 | 用戶1密碼已修改為654321 | 結(jié)果一致 |
選擇用戶2,修改角色為管理員 | 編輯成功,角色修改成功 | 用戶2角色已修改為管理員 | 結(jié)果一致 |
選擇用戶1,清空用戶名 | 編輯失敗,提示用戶名不能為空 | 編輯失敗,提示用戶名不能為空 | 結(jié)果一致 |
- 刪除用戶功能測試用例:
輸入數(shù)據(jù) | 預(yù)期結(jié)果 | 實(shí)際結(jié)果 | 結(jié)果分析 |
---|---|---|---|
選擇用戶1進(jìn)行刪除操作 | 系統(tǒng)詢問是否刪除用戶,確認(rèn)后用戶被刪除 | 用戶1已成功刪除 | 結(jié)果一致 |
選擇用戶2進(jìn)行刪除操作 | 系統(tǒng)詢問是否刪除用戶,取消刪除操作 | 用戶2未被刪除 | 結(jié)果一致 |
通過系統(tǒng)功能測試,確保系統(tǒng)的功能完備性,系統(tǒng)能夠按照需求規(guī)格說明書的定義正常運(yùn)行。我們將繼續(xù)進(jìn)行測試工作,發(fā)現(xiàn)并修復(fù)潛在問題,為用戶提供功能完善的系統(tǒng)體驗(yàn)。
系統(tǒng)測試結(jié)論
本系統(tǒng)主要使用黑盒測試,通過模擬用戶使用系統(tǒng)實(shí)現(xiàn)各個(gè)功能編寫測試用例,并進(jìn)行測試。以確保系統(tǒng)流程的正確性。系統(tǒng)測試必不可少,可以使系統(tǒng)更加完善,該系統(tǒng)的可使用性也會(huì)更高。
測試該系統(tǒng)主要為了驗(yàn)證系統(tǒng)的功能模塊是否滿足我們最初的設(shè)計(jì)理念,驗(yàn)證各個(gè)功能模塊邏輯是否正確,此系統(tǒng)不需要過于復(fù)雜的邏輯處理,以便于使用者操作。測試的最終目的也是圍繞著用戶使用展開。測試過程中所有場景都應(yīng)符合用戶需求,不可偏離需求目標(biāo),遇到問題時(shí)要站在用戶的角度進(jìn)行思考。經(jīng)過一系列的測試過程后得到最終的測試結(jié)果,從測試結(jié)果可以看出,實(shí)現(xiàn)的系統(tǒng)在功能和性能方面滿足設(shè)計(jì)要求。
為什么選擇我
博主提供的項(xiàng)目均為博主自己收集和開發(fā)的!所有的源碼都經(jīng)由博主檢驗(yàn)過,能過正常啟動(dòng)并且功能都沒有問題!同學(xué)們拿到后就能使用!
多個(gè)成功系統(tǒng)案例:
代碼參考
// 忽略權(quán)限驗(yàn)證的注解
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
// 查詢用戶信息
UsersEntity user = userService.selectOne(new EntityWrapper<UsersEntity>().eq("username", username));
// 判斷用戶是否存在或密碼是否正確
if(user==null || !user.getPassword().equals(password)) {
return R.error("賬號(hào)或密碼不正確");
}
// 生成token
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
return R.ok().put("token", token);
}
// 生成token
@Override
public String generateToken(Long userid,String username, String tableName, String role) {
// 查詢是否存在已有token
TokenEntity tokenEntity = this.selectOne(new EntityWrapper<TokenEntity>().eq("userid", userid).eq("role", role));
// 生成隨機(jī)token字符串
String token = CommonUtil.getRandomString(32);
// 設(shè)置token過期時(shí)間為1小時(shí)后
Calendar cal = Calendar.getInstance();
cal.setTime(new Date());
cal.add(Calendar.HOUR_OF_DAY, 1);
if(tokenEntity!=null) {
// 更新token信息
tokenEntity.setToken(token);
tokenEntity.setExpiratedtime(cal.getTime());
this.updateById(tokenEntity);
} else {
// 新建token記錄
this.insert(new TokenEntity(userid,username, tableName, role, token, cal.getTime()));
}
return token;
}
/**
* 權(quán)限(Token)驗(yàn)證攔截器
*/
@Component
public class AuthorizationInterceptor implements HandlerInterceptor {
// 定義Token在請求Header中的鍵名
public static final String LOGIN_TOKEN_KEY = "Token";
@Autowired
private TokenService tokenService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 支持跨域請求
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with,request-source,Token, Origin,imgType, Content-Type, cache-control,postman-token,Cookie, Accept,authorization");
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
// 跨域時(shí)會(huì)首先發(fā)送一個(gè)OPTIONS請求,這里我們給OPTIONS請求直接返回正常狀態(tài)
if (request.getMethod().equals(RequestMethod.OPTIONS.name())) {
response.setStatus(HttpStatus.OK.value());
return false;
}
// 獲取HandlerMethod注解
IgnoreAuth annotation;
if (handler instanceof HandlerMethod) {
annotation = ((HandlerMethod) handler).getMethodAnnotation(IgnoreAuth.class);
} else {
return true;
}
// 從header中獲取token
String token = request.getHeader(LOGIN_TOKEN_KEY);
/**
* 不需要驗(yàn)證權(quán)限的方法直接放過
*/
if(annotation!=null) {
return true;
}
// 根據(jù)token獲取token實(shí)體
TokenEntity tokenEntity = null;
if(StringUtils.isNotBlank(token)) {
tokenEntity = tokenService.getTokenEntity(token);
}
if(tokenEntity != null) {
// 將用戶信息存入session
request.getSession().setAttribute("userId", tokenEntity.getUserid());
request.getSession().setAttribute("role", tokenEntity.getRole());
request.getSession().setAttribute("tableName", tokenEntity.getTablename());
request.getSession().setAttribute("username", tokenEntity.getUsername());
return true;
}
// 驗(yàn)證失敗,返回401錯(cuò)誤和提示信息
PrintWriter writer = null;
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json; charset=utf-8");
try {
writer = response.getWriter();
writer.print(JSONObject.toJSONString(R.error(401, "請先登錄")));
} finally {
if(writer != null){
writer.close();
}
}
return false;
}
}
這段Java代碼主要是一個(gè)登錄功能的實(shí)現(xiàn),涉及到生成Token和權(quán)限驗(yàn)證的攔截器。
-
@IgnoreAuth
注解:這是一個(gè)自定義的注解,用于標(biāo)識(shí)不需要進(jìn)行權(quán)限驗(yàn)證的方法。 -
@PostMapping(value = "/login")
:這是一個(gè)使用POST請求方式的登錄接口。 -
login
方法:該方法接收用戶名、密碼和驗(yàn)證碼作為參數(shù),并返回一個(gè)包含生成的Token的響應(yīng)對象。首先通過用戶名查詢用戶信息,然后判斷用戶是否存在并驗(yàn)證密碼是否正確。如果驗(yàn)證失敗,則返回錯(cuò)誤提示;如果驗(yàn)證成功,則調(diào)用generateToken
方法生成Token,并將其添加到響應(yīng)對象中返回。 -
generateToken
方法:該方法用于生成Token。首先查詢是否存在已有的Token實(shí)體,然后生成一個(gè)隨機(jī)的Token字符串。接下來,設(shè)置Token的過期時(shí)間為當(dāng)前時(shí)間加上1小時(shí),并根據(jù)情況進(jìn)行更新或插入Token記錄。最后返回生成的Token字符串。 -
AuthorizationInterceptor
類:這是一個(gè)權(quán)限驗(yàn)證攔截器實(shí)現(xiàn)類。它實(shí)現(xiàn)了HandlerInterceptor
接口,用于在請求處理之前進(jìn)行權(quán)限驗(yàn)證。在preHandle
方法中,首先設(shè)置支持跨域請求的相關(guān)頭信息,并處理跨域時(shí)的 OPTIONS 請求。然后,通過反射獲取請求處理方法上的@IgnoreAuth
注解,如果存在該注解,則直接放過。接著,從請求頭中獲取 Token,并根據(jù) Token 獲取對應(yīng)的 Token 實(shí)體。如果 Token 實(shí)體存在,則將用戶信息存入 session,并放行請求。如果驗(yàn)證失敗,則返回401錯(cuò)誤和相應(yīng)的提示信息。
總結(jié),這段代碼實(shí)現(xiàn)了一個(gè)基本的登錄功能,并加入了對權(quán)限的驗(yàn)證攔截,確保只有擁有有效 Token 的用戶才能訪問受限資源。
數(shù)據(jù)庫參考
根據(jù)給出的數(shù)據(jù)庫SQL語句,設(shè)計(jì)一個(gè)商品表的示例:
-- ----------------------------
-- Table structure for product
-- ----------------------------
DROP TABLE IF EXISTS `product`;
CREATE TABLE `product` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主鍵',
`name` varchar(100) NOT NULL COMMENT '商品名稱',
`price` decimal(10, 2) NOT NULL COMMENT '商品價(jià)格',
`description` varchar(200) DEFAULT NULL COMMENT '商品描述',
`stock` int(11) NOT NULL COMMENT '商品庫存',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時(shí)間',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='商品表';
該商品表包括以下字段:
-
id
:商品的主鍵,自增長。 -
name
:商品的名稱,不能為空。 -
price
:商品的價(jià)格,采用10位整數(shù)和2位小數(shù)的形式存儲(chǔ)。 -
description
:商品的描述,最多200個(gè)字符。 -
stock
:商品的庫存數(shù)量。 -
create_time
:商品的創(chuàng)建時(shí)間,記錄商品被添加的時(shí)間。 -
update_time
:商品的更新時(shí)間,記錄商品信息最近一次被修改的時(shí)間。
– 向商品表插入數(shù)據(jù)示例
INSERT INTO `product` (`name`, `price`, `description`, `stock`)
VALUES ('iPhone 13', 999.99, 'A powerful and advanced smartphone', 100);
INSERT INTO `product` (`name`, `price`, `description`, `stock`)
VALUES ('Samsung Galaxy S21', 899.99, 'A flagship Android smartphone', 150);
INSERT INTO `product` (`name`, `price`, `description`, `stock`)
VALUES ('Sony PlayStation 5', 499.99, 'Next-gen gaming console', 50);
源碼獲取
私信聯(lián)系我即可~
大家點(diǎn)贊、收藏、關(guān)注、評(píng)論啦 、查看????獲取聯(lián)系方式????
精彩專欄推薦訂閱:在下方專欄????
Java精品實(shí)戰(zhàn)案例《500套》
微信小程序項(xiàng)目精品案例《500套》
Java核心技術(shù)精選
Java框架精選文章來源地址http://www.zghlxwxcb.cn/news/detail-833780.html
到了這里,關(guān)于基于小程序的汽車預(yù)約維修系統(tǒng)+springboot+vue.js附帶文章和源代碼設(shè)計(jì)說明文檔ppt的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!