无码人妻丰满熟妇奶水区码,成年高潮网址,观看免费干B,欧美日韩深喉

你敢信?開發(fā)一個管理系統(tǒng)我只用了兩天!附源碼

來源:blog.csdn.net/Gaowumao?type=blog

難度分析

雖然但是聽到這個消息的時候,內(nèi)心還是挺震驚的,畢竟是一個完整的管理系統(tǒng),功能界面還不能太過簡陋。而且從數(shù)據(jù)庫設(shè)計到整個系統(tǒng)的交付全由自己一人完成,挑戰(zhàn)效果直接拉滿!但是冷靜下來思考一下,其實也并不是很難,整體的項目流程即為:設(shè)計——>文檔——>編碼——>交付。整體的流程劃清之后,就開始一步步從無到有的實現(xiàn),沒想到到最后一步的時候,我竟然才用一天半的時間??!后面又用了半天的時間對整體的項目做了一個優(yōu)化處理!

項目回顧

最終效果演示:

你敢信?開發(fā)一個管理系統(tǒng)我只用了兩天!附源碼

技術(shù)選型:

  • SpringBoot

  • Thymeleaf

  • mybatis-Plus

  • MySQL

  • PageHelper

  • Lombok

  • Redis(后期頁面優(yōu)化使用)

項目業(yè)務(wù)流程簡介

登錄模塊、用戶模塊管理以及對用戶的角色分配,新聞公告模塊的管理、商品模塊(包括對商品、商品分類、訂單)的管理、角色模塊的管理;對于前端某資源是否有權(quán)限操作該資源,使用的是thymeleaf模板語法進行判斷鑒別以及文件上傳等基本功能。

項目搭建(使用模板引擎)

1. 首先創(chuàng)建Maven項目

引入相應(yīng)的依賴,構(gòu)建所需文件目錄

你敢信?開發(fā)一個管理系統(tǒng)我只用了兩天!附源碼你敢信?開發(fā)一個管理系統(tǒng)我只用了兩天!附源碼

2. 編寫yaml配置文件

server:
port: 8080

spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/supplier?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT+8
username: root
password: root
# thymeleaf 配置
thymeleaf:
# 關(guān)閉緩存
cache: false
prefix: classpath:/templates/

mybatis-plus:
mapper-locations: classpath*:/mapper/**/*.xml

3. 項目初期基本搭建

在搭建一個項目的初期,為了讓系統(tǒng)顯得更規(guī)范化,我一般會提前做好基礎(chǔ)的配置和聲明,一個項目從開始設(shè)想時所涉及到技術(shù)以及這些技術(shù)對應(yīng)的一些基礎(chǔ)配置,都要提前規(guī)劃清楚(個人習(xí)慣)。比如:異常處理、攔截器、過濾器、常量類等等。

①異常處理

@ControllerAdvice
public class exceptionHandler {

private final org.slf4j.Logger logger = LoggerFactory.getLogger(this.getClass);

@org.springframework.web.bind.Annotation.ExceptionHandler(Exception.class)
public ModelAndView exception(HttpServletrequest request, Exception e ) throws Exception {
logger.error(\"Request URL:{},Exception:{}\",request.getRequestURL,e);

if (AnnotationUtils.findAnnotation(e.getClass, ResponseStatus.class )!= ){
throw e;
}

ModelAndView mv = new ModelAndView;
mv.addObject(\"url\",request.getRequestURL);
mv.addObject(\"exception\",e);
mv.setViewName(\"error/error\");

return mv;
}
}

② 攔截器

攔截器主要是對一些資源做的處理,類似于某些資源需要用戶登錄后才能訪問的,某些是不需要的,比如:登錄功能就不需要有所攔截,而對用戶的各種管理就需要添加攔截操作,這樣才能使系統(tǒng)的安全性有所提高。

登錄攔截

public class LoginInterceptor extends HandlerInterceptorAdapter {

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (request.getSession.getAttribute(\"user\") == ){
response.sendRedirect(\"/api\");
return false;
}
return true;
}
}

資源放行

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

@Override
public void addInterceptors(Interceptorregistry registry) {
registry.addInterceptor(new LoginInterceptor)
.addPathPatterns(\"/api/**\")
.excludePathPatterns(\"/api\",\"/api/doLogin\");
}
}

4. 編寫Controller前端控制器代碼

首先創(chuàng)建一個FileController類

① 跳轉(zhuǎn)文件上傳的頁面

//跳轉(zhuǎn)文件上傳的頁面
@RequestMapping(\"/File-upload\")
public StringuserList{
return \"file-upload\";
}

② 實現(xiàn)文件上傳的功能

@RequestMapping(\"/doAddForUser\")
public String doAdd(User user, @RequestParam(\"file\") MultipartFile files, HttpServletRequest request) throws IOException {
//String path = ;
if (files != && !files.isEmpty){
String name = UUID.randomUUID.toString.replace(\"-\",\"\");
//獲取文件的擴展名
String ext = FilenameUtils.getExtension(files.getOriginalFilename);
//設(shè)置文件上傳的路徑
String url =request.getSession.getServletContext.getRealPath(\"/upload/\");

File file = new File(url);
if (!file.exists){
file.mkdir;
}
//測試路徑
System.out.println(request.getServletPath \"/upload\");
System.out.println(request.getContextPath \"/upload/\");
//以絕對路徑保存重命名后的文件
files.transferTo(new File(url \"/\" name \".\" ext));
user.setAvatar(request.getContextPath \"/upload/\" name \".\" ext);
}

user.setId(UUID.randomUUID.toString);
String salt = PasswordUtils.getSalt;
String password = user.getPassword;
String encode = PasswordUtils.encode(password, salt);
user.setSalt(salt) ;
user.setPassword(encode);
user.setCreateTime(new Date);
userService.save(user);
return \"redirect:/api/users\";
}

注:如何想要實現(xiàn)多文件上傳需要更改的地方如下:

你敢信?開發(fā)一個管理系統(tǒng)我只用了兩天!附源碼

③ 實現(xiàn)多文件上傳功能

在這個項目中并未實現(xiàn)多文件上傳功能

private void commons(Object obj, @RequestParam(\"file\") CommonsMultipartFile files, HttpServletRequest request) throws IOException {
//String path = ;
for (int i = 0; i < files.length; i ) {

if (files[i] != && !files[i].isEmpty){
String name = UUID.randomUUID.toString.replace(\"-\",\"\");
//獲取文件的擴展名
String ext = FilenameUtils.getExtension(files[i].getOriginalFilename);
//設(shè)置文件上傳的路徑
String url =request.getSession.getServletContext.getRealPath(\"/upload/\");

File file = new File(url);
if (!file.exists){
file.mkdir;
}
//測試路徑
System.out.println(request.getServletPath \"/upload\");
System.out.println(request.getContextPath \"/upload/\");
//以絕對路徑保存重命名后的文件
files[i].transferTo(new File(url \"/\" name \".\" ext));

if (i == 0){
obj.setUrl1(request.getContextPath \"/upload/\" name \".\" ext);
}
if (i == 1){
obj.setUrl2(request.getContextPath \"/upload/\" name \".\" ext);
}
if (i == 2){
obj.setUrl3(request.getContextPath \"/upload/\" name \".\" ext);
}
if (i == 3){
obj.setUrl4(request.getContextPath \"/upload/\" name \".\" ext);
}
if (i == 4){
obj.setUrl5(request.getContextPath \"/upload/\" name \".\" ext);
}
}
}
}

5. 項目優(yōu)化

對于前后端不分離的項目,多數(shù)使用的是頁面緩存優(yōu)化,當(dāng)系統(tǒng)某一瞬間遭受巨大流量時,當(dāng)?shù)谝粋€用戶進行頁面訪問時可以將該頁面數(shù)據(jù)進行緩存,這樣,后來的用戶訪問到的頁面都是從緩存中獲取的,這樣就減少了 對數(shù)據(jù)庫的操作,減輕了數(shù)據(jù)庫的壓力,從而達到優(yōu)化的處理。

① 導(dǎo)入依賴

<!--redis-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!--commons-pools2 對象池依賴-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>

② yaml配置

## Redis配置
redis:
# 服務(wù)器地址
host: localhost
# 端口
port: 6379
# 數(shù)據(jù)庫
database: 0
# 超時時間
connect-timeout: 10000ms
lettuce:
pool:
# 最大連接數(shù)
max-active: 8
# 最大連接阻塞等待時間 默認 -1
max-wait: 10000ms
# 最大空閑時間 默認8
max-idle: 200
# 最小空閑連接 默認8
min-idle: 5

④ Redis序列化處理

@Configuration
public class RedisConfig {

@Bean
public RedisTemplate<String,Object> redisTemplate(RedisConnectionFactory redisConnectionFactory){
RedisTemplate<String,Object> redisTemplate = new RedisTemplate<>;
//key序列化
redisTemplate.setKeySerializer(new StringRedisSerializer);
//value序列化
redisTemplate.setValueSerializer(new GenericJackson2JSONRedisSerializer);
//hash類型key的序列化
redisTemplate.setHashKeySerializer(new StringRedisSerializer);
//hash類型value的序列化
redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer);
redisTemplate.setConnectionFactory(redisConnectionFactory);
return redisTemplate;
}
}

③ 優(yōu)化處理

@Autowired
private NewsService newsService;
@Autowired
private RedisTemplate redisTemplate;
@Autowired
private ThymeleafViewResolver viewResolver;

@RequestMapping(value = \"/news\",produces = \"text/html;charset=utf-8\")
@ResponseBody
public String roles(Model model, @RequestParam(value = \"pageNo\",defaultValue = \"1\")Integer pageNo
, @RequestParam(value = \"pageSize\",defaultValue = \"10\")Integer pageSize
, HttpServletRequest request, HttpServletResponse response){
//Redis中獲取頁面,如果不為空,則直接返回頁面
ValueOperations valueOperations = redisTemplate.opsForValue;
String html = (String) valueOperations.get(\"news-list\");
if (!StringUtils.isEmpty(html)){
return html;
}
PageHelper.startPage(pageNo,pageSize);
List<News> list = newsService.list;
PageInfo<News> pageInfo = new PageInfo<>(list);
model.addAttribute(\"news\",list);
model.addAttribute(\"pageInfo\",pageInfo);
//如果為空,手動渲染,存入Redis中并返回
WebContext context = new WebContext(request, response, request.getServletContext, request.getLocale, model.asMap);
html = viewResolver.getTemplateEngine.process(\"news-list\", context);
if (!StringUtils.isEmpty(html)){
//給緩存設(shè)置過期時間
valueOperations.set(\"news-list\",html,60, TimeUnit.SECONDS);
}
return html;
}

④ Redis查看

你敢信?開發(fā)一個管理系統(tǒng)我只用了兩天!附源碼

6. 注意事項

注意@Controller和@RestController的區(qū)別,本項目使用的是模板渲染頁面,而@Controller就是用來響應(yīng)頁面的;而@RestController是用來返回Json

在項目優(yōu)化階段需要在方法上添加注解@ResponseBody,因為我們是將整個頁面進行緩存 ,所以要將頁面轉(zhuǎn)換成JSON進行存儲。

你敢信?開發(fā)一個管理系統(tǒng)我只用了兩天!附源碼

注入Thymeleaf解析器,將具體的 頁面進行解析成Json字符串進行存儲

你敢信?開發(fā)一個管理系統(tǒng)我只用了兩天!附源碼你敢信?開發(fā)一個管理系統(tǒng)我只用了兩天!附源碼

將存入Redis中的數(shù)據(jù)加上過期時間,因為頁面中的數(shù)據(jù)要和數(shù)據(jù)庫保持一致,如果用戶看到是幾十秒之前或一分鐘之前的數(shù)據(jù)還是勉強可以接受的。

你敢信?開發(fā)一個管理系統(tǒng)我只用了兩天!附源碼

目前代碼已經(jīng)同步到Gitee:

https://gitee.com/gao-wumao/supplier

如果有需要的自行前去倉庫拉取

版權(quán)聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻,該文觀點僅代表作者本人。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如發(fā)現(xiàn)本站有涉嫌抄襲侵權(quán)/違法違規(guī)的內(nèi)容, 請發(fā)送郵件至 舉報,一經(jīng)查實,本站將立刻刪除。

(0)
上一篇 2022年12月17日 上午10:44
下一篇 2022年12月17日 上午10:58

相關(guān)推薦

  • 包括項目管理

    包括項目管理 項目管理在現(xiàn)代科技中扮演著越來越重要的角色。在現(xiàn)代企業(yè)中,項目管理已經(jīng)成為了組織中不可或缺的一部分。本文將探討項目管理的定義、重要性以及如何有效地進行項目管理。 項目…

    科研百科 2024年8月17日
    3
  • 科研項目取得新進展

    科研項目取得新進展 近年來,隨著科技的飛速發(fā)展,科研項目取得了越來越多的進展。在科研領(lǐng)域,不斷有新的突破和發(fā)現(xiàn),為我們更好地理解世界和解決難題提供了新的思路和方法。 最近,我們的科…

    科研百科 2025年4月14日
    3
  • 掌握基本原則,幫你設(shè)計出更好的表單(掌握基本原則,幫你設(shè)計出更好的表單英語)

    編輯導(dǎo)語:在這個互聯(lián)網(wǎng)時代,表單是每個APP中必不可少的一部分,有時我們也經(jīng)常會接觸一些不得不填的表單,整體設(shè)計比較簡單,視覺比較好,但是還有一些真的就是慘不忍睹,體驗感極差。那怎…

    科研百科 2023年3月15日
    264
  • 誰家上榜?山東黨建云平臺推薦案例雙月榜最新出爐

    奮進新征程、建功新時代。今年2月,大眾日報·山東黨建云平臺全新啟動“紅星耀齊魯”大型融媒報道活動,推出齊魯黨員星力量、基層黨建亮點匯、第一書記風(fēng)采錄、高校黨建品牌展四個單元板塊。其…

    科研百科 2023年1月1日
    298
  • 中青年科研項目申報流程

    中青年科研項目申報流程 近年來,隨著科技的不斷發(fā)展和進步,科研項目申報已成為科研領(lǐng)域的一項重要工作。作為青年學(xué)者,申報科研項目是展示自己學(xué)術(shù)水平、提高自己知名度的重要途徑。本文將介…

    科研百科 2025年3月30日
    12
  • 系統(tǒng)集成項目管理工程師核心考點(二十一)應(yīng)急儲備和管理儲備

    科科過為您帶來軟考系統(tǒng)集成項目管理工程師核心重點考點(二十一)應(yīng)急儲備和管理儲備,內(nèi)含思維導(dǎo)圖 真題,本資料由科科過劉江老師整理 【系統(tǒng)集成核心考點】應(yīng)急儲備和管理儲備 應(yīng)急儲備:…

    2022年8月26日
    627
  • 企業(yè)收到科技項目專項資金賬務(wù)處理

    企業(yè)收到科技項目專項資金賬務(wù)處理 隨著科技的不斷發(fā)展,企業(yè)對于資金的需求也在不斷增加。為了支持企業(yè)的科技發(fā)展,政府通常會設(shè)立科技項目專項資金來支持企業(yè)的科技項目。收到科技項目專項資…

    科研百科 2024年11月12日
    33
  • 科研項目管理創(chuàng)新

    科研項目管理創(chuàng)新 科研項目管理是項目管理中的重要組成部分,其創(chuàng)新可以提高項目管理的效率和質(zhì)量,從而為項目的成功提供有力的支持。近年來,隨著科技的快速發(fā)展和項目管理技術(shù)的進步,科研項…

    科研百科 2024年7月12日
    39
  • 亞洲編程科研項目有哪些

    亞洲編程科研項目有哪些 隨著信息技術(shù)的不斷發(fā)展,編程技術(shù)已經(jīng)成為現(xiàn)代工業(yè)的重要組成部分。在亞洲地區(qū),編程科研項目也在不斷涌現(xiàn)。本文將介紹一些亞洲地區(qū)的編程科研項目。 一、新加坡 新…

    科研百科 2025年3月31日
    3
  • 技術(shù)項目管理辦法

    技術(shù)項目管理辦法 隨著科技的不斷發(fā)展,項目開發(fā)已經(jīng)成為了企業(yè)和個人工作中不可或缺的一部分。為了確保項目開發(fā)過程的順利進行,制定一份技術(shù)項目管理辦法是非常必要的。本文將介紹一份技術(shù)項…

    科研百科 2024年8月19日
    6
haodiaoniu日本| 亚洲AV无码国产精品草莓在线| 久久日韩亚洲| 国产婬乱a一级毛片撒尿| 成人啪啪真人高潮6| 日本最新我不卡一区二区三区| 亚欧成人宗合免费网| 精品秘 一区二三区免| 精品一区二区三区久久久久久久网| 白木优子 妻 一区| 国产精品日本啪啪| 日韩无码一区二区男技师| 国产成人一起搞| 亚洲毛片A免费观看| 同事美国大鸡巴插穴| 东北熟女性操逼| 不卡AVDVD在线免费| 精品久久久久久久久久久久包黑料| 日本一区高清无| 国产精品女优三上悠亚在线观看| 嗯啊呢啊香蕉视频| 蜜桃视频人妻资源在线| 美女张开腿被男人操| 中文字幕人妻在线视频观看| 99热这里只有精品一区二区三区| 国产一区 porn| 久久美国| 中国美女体验老外大鸡吧| 日韩精品不卡二区| 婷婷丁香狠狠色一区二区| 国产 人妻 激情| 99久久久JK| 136熟女精品导航| 欧美…日韩…国产精品…| 国产日日夜夜综合精品日韩| 日日操操| 亚洲国产精品99久久在线看| 久久精品亚洲网站| 成AV人不卡在线| 国产三级片久久久久久久三级片| 少妇人妻系列1~100|