作者介紹:??大廠全棧碼農(nóng)|畢設(shè)實(shí)戰(zhàn)開(kāi)發(fā),專注于大學(xué)生項(xiàng)目實(shí)戰(zhàn)開(kāi)發(fā)、講解和畢業(yè)答疑輔導(dǎo)。
??獲取源碼聯(lián)系方式請(qǐng)查看文末??
?推薦訂閱精彩專欄 ???? 避免錯(cuò)過(guò)下次更新
Springboot項(xiàng)目精選實(shí)戰(zhàn)案例
更多項(xiàng)目:CSDN主頁(yè)YAML墨韻
學(xué)如逆水行舟,不進(jìn)則退。學(xué)習(xí)如趕路,不能慢一步。
目錄
一、項(xiàng)目簡(jiǎn)介
二、開(kāi)發(fā)技術(shù)與環(huán)境配置
2.1 SpringBoot框架
2.2 Java語(yǔ)言簡(jiǎn)介
2.3 Vue的介紹
2.4 mysql數(shù)據(jù)庫(kù)介紹
2.5 B/S架構(gòu)
三、系統(tǒng)功能實(shí)現(xiàn)
四、系統(tǒng)項(xiàng)目截圖
前臺(tái)
汽車信息界面
在線論壇界面
公告信息界面
管理員后臺(tái)頁(yè)面
商家管理界面
公告信息管理界面
論壇管理界面
汽車管理界面
汽車留言管理界面
論壇管理界面
五、核心代碼
5.1、文件上傳
5.2、數(shù)據(jù)庫(kù)配置
5.3、登錄功能實(shí)現(xiàn)
5.4、業(yè)務(wù)層(Service)
5.5、數(shù)據(jù)訪問(wèn)層(Dao)
一、項(xiàng)目簡(jiǎn)介
如今社會(huì)上各行各業(yè),都喜歡用自己行業(yè)的專屬軟件工作,互聯(lián)網(wǎng)發(fā)展到這個(gè)時(shí)候,人們已經(jīng)發(fā)現(xiàn)離不開(kāi)了互聯(lián)網(wǎng)。新技術(shù)的產(chǎn)生,往往能解決一些老技術(shù)的弊端問(wèn)題。因?yàn)閭鹘y(tǒng)二手車交易信息管理難度大,容錯(cuò)率低,管理人員處理數(shù)據(jù)費(fèi)工費(fèi)時(shí),所以專門為解決這個(gè)難題開(kāi)發(fā)了一個(gè)二手車交易系統(tǒng),可以解決許多問(wèn)題。
隨著我國(guó)互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,電子商務(wù)受到了廣大年輕人的歡迎。在二手汽車行業(yè)中也是如此,由于疫情防控等原因,線上二手車銷售額逐年增加,但我國(guó)目前還沒(méi)有一套高效、穩(wěn)定的二手汽車交易網(wǎng)站,滿足人民群眾的銷售、過(guò)戶、簽合同需求。本文將針對(duì)二手汽車市場(chǎng)的實(shí)際需求,開(kāi)發(fā)一個(gè)看車、下單、過(guò)戶一體化的二手汽車交易網(wǎng)站,使用SpringBoot和Vue框架分別開(kāi)發(fā)后端和前端,使用MySQL存儲(chǔ)系統(tǒng)數(shù)據(jù),以滿足二手市場(chǎng)線上銷售的需要。
二手車交易系統(tǒng)可以提高二手車交易信息管理問(wèn)題的解決效率,優(yōu)化二手車交易信息處理流程,保證二手車交易信息數(shù)據(jù)的安全,它是一個(gè)非??煽浚浅0踩膽?yīng)用程序。
二、開(kāi)發(fā)技術(shù)與環(huán)境配置
以Java語(yǔ)言為開(kāi)發(fā)工具,利用了當(dāng)前先進(jìn)的springboot框架,以IDEA為系統(tǒng)開(kāi)發(fā)工具,MySQL為后臺(tái)數(shù)據(jù)庫(kù),vue為后臺(tái)管理頁(yè)面開(kāi)發(fā)的一個(gè)二手車交易系統(tǒng)。
2.1 SpringBoot框架
SpringBoot是一個(gè)全新開(kāi)源的輕量級(jí)框架?;赟pring4.0設(shè)計(jì),其不僅繼承了Spring框架原來(lái)有的優(yōu)秀特性,而且還通過(guò)簡(jiǎn)化配置文件來(lái)進(jìn)一步簡(jiǎn)化了Spring應(yīng)用的整個(gè)搭建以及開(kāi)發(fā)過(guò)程。另外在原本的Spring中由于隨著項(xiàng)目的擴(kuò)大導(dǎo)入的jar包數(shù)量越來(lái)越大,隨之出現(xiàn)了jar包版本之間的兼容性問(wèn)題,而此時(shí)SpringBoot通過(guò)集成大量的框架使得依賴包的版本沖突,以及引用的不穩(wěn)定性問(wèn)題得到了很好的解決。
SpringBoot可以看做是Spring的加強(qiáng)版本,但實(shí)質(zhì)上都是Spring的相關(guān)技術(shù),有了這些優(yōu)秀的開(kāi)源框架,程序員在開(kāi)發(fā)過(guò)程中將事半功倍。
2.2 Java語(yǔ)言簡(jiǎn)介
Java是由SUN公司推出,該公司于2010年被oracle公司收購(gòu)。Java本是印度尼西亞的一個(gè)叫做爪洼島的英文名稱,也因此得來(lái)java是一杯正冒著熱氣咖啡的標(biāo)識(shí)。Java語(yǔ)言在移動(dòng)互聯(lián)網(wǎng)的大背景下具備了顯著的優(yōu)勢(shì)和廣闊的前景,它是面向?qū)ο蟮?,分布式的,?dòng)態(tài)的,具有平臺(tái)無(wú)關(guān)性、安全性、健壯性。Java語(yǔ)言的基本語(yǔ)句語(yǔ)法和C++一樣,但是它面向?qū)ο蟮募夹g(shù)更加徹底,因?yàn)镴ava要求將所有的內(nèi)容都必須封裝成類,把類作為程序的基本單位。由于不允許類外有變量、方法。 Java語(yǔ)言的分布式體現(xiàn)在數(shù)據(jù)分布和操作分布,它是面向網(wǎng)絡(luò)的語(yǔ)言,可以處理TCP/IP協(xié)議,它也支持客戶機(jī)/服務(wù)器的計(jì)算模式。Java語(yǔ)言的動(dòng)態(tài)性是指類在運(yùn)行時(shí)是動(dòng)態(tài)安裝的,使得Java可以動(dòng)態(tài)的維護(hù)程序。Java不支持指針,對(duì)內(nèi)存訪問(wèn)的所有操作都是通過(guò)對(duì)象實(shí)例化實(shí)現(xiàn)的,這樣就避免了指針操作中易產(chǎn)生的錯(cuò)誤,同時(shí)也預(yù)防了病毒對(duì)系統(tǒng)的破壞和威脅。
Java語(yǔ)言的編程風(fēng)格與C語(yǔ)言非常接近,它繼承了C++面向?qū)ο蠹夹g(shù)的核心,它面世之后發(fā)展迅速,非常流行,對(duì)高級(jí)C語(yǔ)言形成了很大的沖擊。業(yè)內(nèi)人士稱之為“一次編譯、到處執(zhí)行”。當(dāng)然java也有缺點(diǎn),在每次執(zhí)行編譯后,字節(jié)碼都需要消耗一定的時(shí)間,在某些程度上降低了性能。但是這并不影響java成為此次設(shè)計(jì)語(yǔ)言的選擇。Java語(yǔ)言簡(jiǎn)單易學(xué),使用它的編程時(shí)間短,功能性強(qiáng),開(kāi)發(fā)者學(xué)習(xí)起來(lái)更簡(jiǎn)便、更快。Java的主要特性有以下幾個(gè):
面向?qū)ο?br> 面向?qū)ο笥兴膫€(gè)特點(diǎn):封裝、繼承、多態(tài)、抽象。抽象是指忽略一個(gè)問(wèn)題中的次要部分,關(guān)注主要部分。多態(tài)是指對(duì)同一種消息做出的不同反應(yīng)。繼承是指在原有的父類方法基礎(chǔ)上增加自己獨(dú)有的方法,而不改變?cè)瓉?lái)父類。
平臺(tái)無(wú)關(guān)性、
Java編譯出來(lái)的是字節(jié)碼,直接由虛擬機(jī)執(zhí)行。在任何平臺(tái)上,只要有Java虛擬機(jī),Java代碼都能運(yùn)行。
可靠性和安全性
Java對(duì)內(nèi)存的訪問(wèn)都必須通過(guò)對(duì)象的實(shí)例變量來(lái)實(shí)現(xiàn),避免了指針中出現(xiàn)的錯(cuò)誤。
多線程
Java提供了多線程功能,利用編程實(shí)現(xiàn)同一時(shí)間同時(shí)工作的功能。
2.3 Vue的介紹
Vue.js致力于構(gòu)建數(shù)據(jù)驅(qū)動(dòng)的web應(yīng)用開(kāi)發(fā)框架,以簡(jiǎn)潔化,輕量級(jí),數(shù)據(jù)驅(qū)動(dòng),模塊友好等優(yōu)勢(shì)深受企業(yè)以及前端開(kāi)發(fā)者的喜愛(ài),成為前端開(kāi)發(fā)人員必備的技能。Vue3.0的出現(xiàn),又帶動(dòng)周邊生態(tài)的發(fā)展,奠定了vue在企業(yè)級(jí)開(kāi)發(fā)的重要地位。
Vue是一套用于構(gòu)建用戶界面的漸進(jìn)式框架。與其它大型框架不同的是,Vue 被設(shè)計(jì)為可以自底向上逐層應(yīng)用。Vue 的核心庫(kù)只關(guān)注視圖層,不僅易于上手,還便于與第三方庫(kù)或既有項(xiàng)目整合。另一方面,當(dāng)與現(xiàn)代化的工具鏈以及各種支持類庫(kù)結(jié)合使用時(shí),Vue 也完全能夠?yàn)閺?fù)雜的單頁(yè)應(yīng)用提供驅(qū)動(dòng)。
漸進(jìn)式框架做分層設(shè)計(jì),每層都可選,不同層可以靈活接入其他方案。而當(dāng)你都想用官方的實(shí)現(xiàn)時(shí),會(huì)發(fā)現(xiàn)也早已準(zhǔn)備好,各層之間包括配套工具都能比接入其他方案更便捷地協(xié)同工作。 一個(gè)個(gè)放入,放多少就做多少。
2.4 mysql數(shù)據(jù)庫(kù)介紹
利用MYSQL的數(shù)據(jù)獨(dú)立性、安全性等特點(diǎn),在軟件項(xiàng)目中對(duì)數(shù)據(jù)進(jìn)行操作,可以保證數(shù)據(jù)準(zhǔn)確無(wú)誤,并降低了程序員的應(yīng)用開(kāi)發(fā)時(shí)間。
MYSQL的特點(diǎn)是支持多線程,能方便的對(duì)系統(tǒng)資源充分利用,有效提高速度,還提供多種方式途徑來(lái)對(duì)數(shù)據(jù)庫(kù)進(jìn)行連接;MYSQL的功能相對(duì)弱小、規(guī)模也小,但本系統(tǒng)要求不高,MYSQL完全可以滿足本系統(tǒng)使用。
利用MYSQL建立系統(tǒng)數(shù)據(jù)庫(kù),不僅有利于數(shù)據(jù)處理業(yè)務(wù)的早期整合,還能利于發(fā)展后兩種數(shù)據(jù)擴(kuò)展的操作。
2.5 B/S架構(gòu)
B/S結(jié)構(gòu)是目前使用最多的結(jié)構(gòu)模式,它可以使得系統(tǒng)的開(kāi)發(fā)更加的簡(jiǎn)單,好操作,而且還可以對(duì)其進(jìn)行維護(hù)。使用該結(jié)構(gòu)時(shí)只需要在計(jì)算機(jī)中安裝數(shù)據(jù)庫(kù),和一些很常用的瀏覽器就可以了。瀏覽器就會(huì)與數(shù)據(jù)庫(kù)進(jìn)行信息的連接,可以實(shí)現(xiàn)很多的功能,B/S結(jié)構(gòu)是可以直接進(jìn)行使用的,而且B/S結(jié)構(gòu)在使用中極大的減少了工作的維護(hù)?;贐/S的軟件,所有的數(shù)據(jù)庫(kù)之間都是相互獨(dú)立的,因此是非常安全的。因?yàn)榛贐/S結(jié)構(gòu)可以清楚的看到系統(tǒng)正在處理的業(yè)務(wù),并且能夠及時(shí)的讓管理人員做出決策,這樣就可以避免企業(yè)的損失。B/S結(jié)構(gòu)的基本特點(diǎn)是集中式的管理模式,用戶使用系統(tǒng)生成數(shù)據(jù)后,這些數(shù)據(jù)就可以存儲(chǔ)到系統(tǒng)的數(shù)據(jù)庫(kù)中,方便日后能夠用到,這樣就可以滿足人們的所有的需求。
三、系統(tǒng)功能實(shí)現(xiàn)
四、系統(tǒng)項(xiàng)目截圖
前臺(tái)
汽車信息界面
用戶查看汽車信息界面右側(cè)區(qū)域展示的系統(tǒng)推薦的汽車信息,用戶可以通過(guò)汽車介紹的查看來(lái)了解汽車,用戶可以對(duì)汽車點(diǎn)贊或踩,也能在汽車信息界面下方的留言區(qū)域發(fā)布汽車的留言。
在線論壇界面
用戶通過(guò)在線論壇發(fā)布帖子,查看所有的帖子內(nèi)容,以及用戶把自己查看帖子的個(gè)人看法通過(guò)評(píng)論帖子的功能進(jìn)行發(fā)布
公告信息界面
用戶在查詢框中編輯公告標(biāo)題即可實(shí)現(xiàn)對(duì)公告信息的查詢,用戶可以查看公告信息界面展示的任意一條公告信息
管理員后臺(tái)頁(yè)面
商家管理界面
商家信息包括聯(lián)系方式,郵箱,商家名稱等信息。管理可以使用修改功能對(duì)登記有誤的商家信息進(jìn)行修改,可以刪除需要?jiǎng)h除的商家信息等
公告信息管理界面
公告信息包括公告內(nèi)容,圖片等信息。管理可以使用修改功能對(duì)登記有誤的公告信息進(jìn)行修改,可以刪除需要?jiǎng)h除的公告信息等
論壇管理界面
論壇信息包括帖子標(biāo)題,內(nèi)容,發(fā)帖時(shí)間等信息,管理員可以刪除需要?jiǎng)h除的帖子信息,可以查看帖子的回復(fù)信息,可以修改帖子等
汽車管理界面
汽車信息包括價(jià)格,汽車照片等信息,商家可以新增汽車信息,可以下架汽車,上架汽車以及刪除需要?jiǎng)h除的汽車信息等
汽車留言管理界面
汽車留言內(nèi)容是用戶發(fā)布的信息,而汽車的回復(fù)內(nèi)容是商家的回復(fù)信息
論壇管理界面
商家也能通過(guò)論壇管理功能新增帖子,跟蹤發(fā)布的帖子,比如隨時(shí)查看帖子的評(píng)論,以及查看帖子的詳情等文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-860449.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-860449.html
五、核心代碼
5.1、文件上傳
/**
* 上傳文件映射表
*/
@RestController
@RequestMapping("file")
@SuppressWarnings({"unchecked","rawtypes"})
public class FileController{
@Autowired
private ConfigService configService;
/**
* 上傳文件
*/
@RequestMapping("/upload")
public R upload(@RequestParam("file") MultipartFile file,String type) throws Exception {
if (file.isEmpty()) {
throw new EIException("上傳文件不能為空");
}
String fileExt = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".")+1);
File path = new File(ResourceUtils.getURL("classpath:static").getPath());
if(!path.exists()) {
path = new File("");
}
File upload = new File(path.getAbsolutePath(),"/upload/");
if(!upload.exists()) {
upload.mkdirs();
}
String fileName = new Date().getTime()+"."+fileExt;
File dest = new File(upload.getAbsolutePath()+"/"+fileName);
file.transferTo(dest);
/**
* 如果使用idea或者eclipse重啟項(xiàng)目,發(fā)現(xiàn)之前上傳的圖片或者文件丟失,將下面一行代碼注釋打開(kāi)
* 請(qǐng)將以下的"D:\\springbootq33sd\\src\\main\\resources\\static\\upload"替換成你本地項(xiàng)目的upload路徑,
* 并且項(xiàng)目路徑不能存在中文、空格等特殊字符
*/
// FileUtils.copyFile(dest, new File("D:\\springbootq33sd\\src\\main\\resources\\static\\upload"+"/"+fileName)); /**修改了路徑以后請(qǐng)將該行最前面的//注釋去掉**/
if(StringUtils.isNotBlank(type) && type.equals("1")) {
ConfigEntity configEntity = configService.selectOne(new EntityWrapper<ConfigEntity>().eq("name", "faceFile"));
if(configEntity==null) {
configEntity = new ConfigEntity();
configEntity.setName("faceFile");
configEntity.setValue(fileName);
} else {
configEntity.setValue(fileName);
}
configService.insertOrUpdate(configEntity);
}
return R.ok().put("file", fileName);
}
/**
* 下載文件
*/
@IgnoreAuth
@RequestMapping("/download")
public ResponseEntity<byte[]> download(@RequestParam String fileName) {
try {
File path = new File(ResourceUtils.getURL("classpath:static").getPath());
if(!path.exists()) {
path = new File("");
}
File upload = new File(path.getAbsolutePath(),"/upload/");
if(!upload.exists()) {
upload.mkdirs();
}
File file = new File(upload.getAbsolutePath()+"/"+fileName);
if(file.exists()){
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", fileName);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
}
} catch (IOException e) {
e.printStackTrace();
}
return new ResponseEntity<byte[]>(HttpStatus.INTERNAL_SERVER_ERROR);
}
}
5.2、數(shù)據(jù)庫(kù)配置
server:
tomcat:
uri-encoding: UTF-8
port: 8080
servlet:
context-path: /springbootr1tjf
spring:
datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/springbootr1tjf?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8
username: root
password: 123456
# driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver
# url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=springbootr1tjf
# username: sa
# password: 123456
servlet:
multipart:
max-file-size: 10MB
max-request-size: 10MB
resources:
static-locations: classpath:static/,file:static/
#mybatis
mybatis-plus:
mapper-locations: classpath*:mapper/*.xml
#實(shí)體掃描,多個(gè)package用逗號(hào)或者分號(hào)分隔
typeAliasesPackage: com.entity
global-config:
#主鍵類型 0:"數(shù)據(jù)庫(kù)ID自增", 1:"用戶輸入ID",2:"全局唯一ID (數(shù)字類型唯一ID)", 3:"全局唯一ID UUID";
id-type: 1
#字段策略 0:"忽略判斷",1:"非 NULL 判斷"),2:"非空判斷"
field-strategy: 2
#駝峰下劃線轉(zhuǎn)換
db-column-underline: true
#刷新mapper 調(diào)試神器
refresh-mapper: true
#邏輯刪除配置
logic-delete-value: -1
logic-not-delete-value: 0
#自定義SQL注入器
sql-injector: com.baomidou.mybatisplus.mapper.LogicSqlInjector
configuration:
map-underscore-to-camel-case: true
cache-enabled: false
call-setters-on-nulls: true
#springboot 項(xiàng)目mybatis plus 設(shè)置 jdbcTypeForNull (oracle數(shù)據(jù)庫(kù)需配置JdbcType.NULL, 默認(rèn)是Other)
jdbc-type-for-null: 'null'
5.3、登錄功能實(shí)現(xiàn)
package com.controller;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import com.annotation.IgnoreAuth;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.entity.TokenEntity;
import com.entity.UserEntity;
import com.service.TokenService;
import com.service.UserService;
import com.utils.CommonUtil;
import com.utils.MPUtil;
import com.utils.PageUtils;
import com.utils.R;
import com.utils.ValidatorUtils;
/**
* 登錄相關(guān)
*/
@RequestMapping("users")
@RestController
public class UserController{
@Autowired
private UserService userService;
@Autowired
private TokenService tokenService;
/**
* 登錄
*/
@IgnoreAuth
@PostMapping(value = "/login")
public R login(String username, String password, String captcha, HttpServletRequest request) {
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>().eq("username", username));
if(user==null || !user.getPassword().equals(password)) {
return R.error("賬號(hào)或密碼不正確");
}
String token = tokenService.generateToken(user.getId(),username, "users", user.getRole());
return R.ok().put("token", token);
}
/**
* 注冊(cè)
*/
@IgnoreAuth
@PostMapping(value = "/register")
public R register(@RequestBody UserEntity user){
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username",
user.getUsername())) !=null) {
return R.error("用戶已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 退出
*/
@GetMapping(value = "logout")
public R logout(HttpServletRequest request) {
request.getSession().invalidate();
return R.ok("退出成功");
}
/**
* 密碼重置
*/
@IgnoreAuth
@RequestMapping(value = "/resetPass")
public R resetPass(String username, HttpServletRequest request){
UserEntity user = userService.selectOne(new EntityWrapper<UserEntity>
().eq("username", username));
if(user==null) {
return R.error("賬號(hào)不存在");
}
user.setPassword("123456");
userService.update(user,null);
return R.ok("密碼已重置為:123456");
}
/**
* 列表
*/
@RequestMapping("/page")
public R page(@RequestParam Map<String, Object> params,UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
PageUtils page = userService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.allLike(ew, user), params), params));
return R.ok().put("data", page);
}
/**
* 列表
*/
@RequestMapping("/list")
public R list( UserEntity user){
EntityWrapper<UserEntity> ew = new EntityWrapper<UserEntity>();
ew.allEq(MPUtil.allEQMapPre( user, "user"));
return R.ok().put("data", userService.selectListView(ew));
}
/**
* 信息
*/
@RequestMapping("/info/{id}")
public R info(@PathVariable("id") String id){
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 獲取用戶的session用戶信息
*/
@RequestMapping("/session")
public R getCurrUser(HttpServletRequest request){
Long id = (Long)request.getSession().getAttribute("userId");
UserEntity user = userService.selectById(id);
return R.ok().put("data", user);
}
/**
* 保存
*/
@PostMapping("/save")
public R save(@RequestBody UserEntity user){
if(userService.selectOne(new EntityWrapper<UserEntity>().eq("username",
user.getUsername())) !=null) {
return R.error("用戶已存在");
}
userService.insert(user);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/update")
public R update(@RequestBody UserEntity user){
userService.updateById(user);//全部更新
return R.ok();
}
/**
* 刪除
*/
@RequestMapping("/delete")
public R delete(@RequestBody Long[] ids){
userService.deleteBatchIds(Arrays.asList(ids));
return R.ok();
}
}
5.4、業(yè)務(wù)層(Service)
package com.service;
import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.service.IService;
import com.entity.UserEntity;
import com.utils.PageUtils;
/**
* 系統(tǒng)用戶
*/
public interface UserService extends IService<UserEntity> {
PageUtils queryPage(Map<String, Object> params);
List<UserEntity> selectListView(Wrapper<UserEntity> wrapper);
PageUtils queryPage(Map<String, Object> params,Wrapper<UserEntity> wrapper);
}
5.5、數(shù)據(jù)訪問(wèn)層(Dao)
package com.dao;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.baomidou.mybatisplus.plugins.pagination.Pagination;
import com.entity.UserEntity;
/**
* 用戶
*/
public interface UserDao extends BaseMapper<UserEntity> {
List<UserEntity> selectListView(@Param("ew") Wrapper<UserEntity> wrapper);
List<UserEntity> selectListView(Pagination page,@Param("ew") Wrapper<UserEntity> wrapper);
}
到了這里,關(guān)于Spring Boot后端+Vue前端:打造高效二手車交易系統(tǒng)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!