日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

SpringBoot+Vue實(shí)現(xiàn)數(shù)據(jù)添加功能

瀏覽:111日期:2023-03-21 10:00:04
一、添加代碼生成器

用來(lái)自動(dòng)為數(shù)據(jù)庫(kù)映射類(lèi)建立:mapper、service、controller

注:代碼生成器的寫(xiě)法,參考官方文檔:https://mp.baomidou.com/

package com.hanmh.utils;import com.baomidou.mybatisplus.core.toolkit.StringPool;import com.baomidou.mybatisplus.generator.AutoGenerator;import com.baomidou.mybatisplus.generator.InjectionConfig;import com.baomidou.mybatisplus.generator.config.*;import com.baomidou.mybatisplus.generator.config.po.TableInfo;import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;import com.hanmh.pojo.BasePojo; import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map; public class HanGenerator { public static void main(String[] args) { // 代碼生成器 AutoGenerator mpg = new AutoGenerator(); // 全局配置 GlobalConfig gc = new GlobalConfig(); //這樣獲取到的是父項(xiàng)目的目錄 String projectPath = System.getProperty('user.dir'); String pojoProject = 'pojo' + '/src/main/java/com/hanmh/pojo'; String otherProject = 'admin'; //gc.setOutputDir(projectPath + '/src/main/java'); gc.setAuthor('hanmh'); gc.setOpen(false); // gc.setSwagger2(true); 實(shí)體屬性 Swagger2 注解 mpg.setGlobalConfig(gc); // 數(shù)據(jù)源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setUrl('jdbc:mysql://39.105.231.52:3306/db?useUnicode=true&useSSL=false&characterEncoding=utf8'); // dsc.setSchemaName('public'); dsc.setDriverName('com.mysql.jdbc.Driver'); dsc.setUsername('root'); dsc.setPassword('123456'); mpg.setDataSource(dsc); // 包配置 PackageConfig pc = new PackageConfig(); pc.setParent('com.hanmh'); //設(shè)置父包 //自定義生成路徑 Map<String,String> pathInfo = new HashMap<String,String>(); pathInfo.put('entity_path', projectPath + '/' + pojoProject); //pojo位置 pathInfo.put('controller_path', projectPath + '/' + otherProject + '/src/main/java/com/hanmh/controller'); pathInfo.put('service_impl_path', projectPath + '/' + otherProject + '/src/main/java/com/hanmh/service/impl'); pathInfo.put('service_path', projectPath + '/' + otherProject + '/src/main/java/com/hanmh/service'); pathInfo.put('mapper_path', projectPath + '/' + otherProject + '/src/main/java/com/hanmh/mapper'); pathInfo.put('xml_path', projectPath + '/' + otherProject + '/src/main/resources/com/hanmh/mapper'); pc.setEntity('pojo'); //實(shí)體類(lèi) pc.setPathInfo(pathInfo); mpg.setPackageInfo(pc); // 自定義配置 InjectionConfig cfg = new InjectionConfig() { @Override public void initMap() {// to do nothing } }; // 如果模板引擎是 freemarker String templatePath = '/templates/mapper.xml.ftl'; // 策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setColumnNaming(NamingStrategy.underline_to_camel); //生成時(shí),繼承的父類(lèi) strategy.setSuperEntityClass(BasePojo.class); strategy.setEntityLombokModel(true); strategy.setRestControllerStyle(true); // 公共父類(lèi) strategy.setSuperControllerClass('你自己的父類(lèi)控制器,沒(méi)有就不用設(shè)置!'); // 寫(xiě)于父類(lèi)中的公共字段 strategy.setSuperEntityColumns('id'); strategy.setInclude('ums_admin'); strategy.setControllerMappingHyphenStyle(true); strategy.setTablePrefix(pc.getModuleName() + '_'); mpg.setStrategy(strategy); mpg.setTemplateEngine(new FreemarkerTemplateEngine()); mpg.execute(); }}二、導(dǎo)入需要的jar包

前期需要導(dǎo)入的包有:mybatis-plus、mysql、duracloud(工具包)、pojo、spring-boot-starter-web

<dependency> <groupId>com.hanmh</groupId> <artifactId>pojo</artifactId></dependency><dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId></dependency><dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId></dependency><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId></dependency><dependency> <groupId>org.duracloud</groupId> <artifactId>common</artifactId></dependency>三、創(chuàng)建啟動(dòng)類(lèi)

啟動(dòng)類(lèi)必須創(chuàng)建在父包下面,注意在SpringBoot中,并不是不掃包,而是框架幫助完成了這件事,它會(huì)掃描啟動(dòng)類(lèi)所在包下的所有類(lèi)及其子包中的類(lèi)

package com.hanmh; import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication@MapperScan('com.hanmh.mapper')public class AdminRun { public static void main(String[] args) { SpringApplication.run(AdminRun.class); }}四、創(chuàng)建配置文件(application.yml)

server: port: 8080spring: application: name: admin datasource: driver-class-name: com.mysql.jdbc.Driver url: jdbc:mysql://39.105.231.52:3306/db?useUnicode=true&useSSL=false&characterEncoding=utf8 username: root password: 123456 hikari: maximum-pool-size: 20 minimum-idle: 10 servlet: #文件傳輸配置 multipart: max-file-size: 5MB max-request-size: 10MB#運(yùn)行的過(guò)程中輸出sql語(yǔ)句(日志信息)logging: level: com.hanmh.mapper: debug五、返回值統(tǒng)一定義1、ResultJson

package com.hanmh.pojo; import lombok.Data; @Datapublic class ResultJson { private Integer code; //200成功,500錯(cuò)誤 private Object obj; private String message; public ResultJson(ResultCode resultCode, Object obj) { this.code = resultCode.getCode(); this.message = resultCode.getMessage(); this.obj = obj; } public ResultJson(ResultCode resultCode, Object obj, String message) { this.code = resultCode.getCode(); this.message = message; this.obj = obj; } public static ResultJson success(Object obj) { return new ResultJson(ResultCode.SUCCESS, obj); } public static ResultJson success(Object obj, String message) { return new ResultJson(ResultCode.SUCCESS, obj, message); } public static ResultJson error(Object obj) { return new ResultJson(ResultCode.ERROR, obj); } public static ResultJson error() { return new ResultJson(ResultCode.ERROR, null); } public static ResultJson error(String message) { return new ResultJson(ResultCode.ERROR, null, message); }}2、ResultCode

定義4種返回代號(hào)和返回信息,使用枚舉類(lèi)進(jìn)行實(shí)現(xiàn)

package com.hanmh.pojo; import lombok.Data;import lombok.Getter; @Getterpublic enum ResultCode { SUCCESS(200, '請(qǐng)求成功'), ERROR(500, '請(qǐng)求失敗'), NOAUTH(401, '用戶(hù)未登錄或者登錄超時(shí)'), //操作時(shí) NOPREMISSION(403, '沒(méi)有此權(quán)限'); private Integer code; private String message; //枚舉類(lèi)型的構(gòu)造默認(rèn)為私有 private ResultCode(Integer code, String message) { this.code = code; this.message = message; }}六、創(chuàng)建基礎(chǔ)pojo

在所有的數(shù)據(jù)庫(kù)表種,共有的字段是ID,現(xiàn)在將id獨(dú)立出來(lái)

1、導(dǎo)入 mybatis-plus-annotation包

為了使用該包內(nèi)部的IdType等類(lèi)內(nèi)部提供的注解,以告訴BasePojo中某些字段在數(shù)據(jù)庫(kù)表中的存在與否

<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-annotation</artifactId> <version>3.0-RELEASE</version></dependency>2、BasePojo類(lèi)

package com.hanmh.pojo; import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableField;import com.baomidou.mybatisplus.annotation.TableId;import lombok.Data;import org.omg.CORBA.IDLType; @Datapublic class BasePojo { @TableId(type = IdType.AUTO) private Integer id; //做分頁(yè)操作需要的字段 @TableField(exist = false) private Integer pageNO; @TableField(exist = false) private Integer pageSize;}七、后端添加數(shù)據(jù)1、密碼加密

(1)需要使用安全包提供加密服務(wù)(security)

<dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId></dependency>2、將加密類(lèi)(BCryptPasswordEncoder)放入IOC容器

在SpringBoot環(huán)節(jié),需要將某個(gè)類(lèi)加入IOC容器,就需要在配置類(lèi)中,配置@Bean節(jié)點(diǎn)

@Configurationpublic class AdminConfig { @Bean //將BCryptPasswordEncoder放進(jìn)IOC容器 BCryptPasswordEncoder getPasswordEncoder() { return new BCryptPasswordEncoder(); }}

注:使用此方法對(duì)數(shù)據(jù)進(jìn)行加密的原因:此加密方法相同明文密碼多次可以生成不同的密文,而MD5相同密碼則會(huì)生成相同的密文

3、后端添加數(shù)據(jù)簡(jiǎn)單實(shí)現(xiàn)

@PostMapping('/add')ResultJson add(UmsAdmin umsAdmin) throws InterruptedException, IOException { //對(duì)密碼加密 umsAdmin.setPassword(passwordEncoder.encode(umsAdmin.getPassword())); //TimeUnit.SECONDS.sleep(2); return ResultJson.success(adminService.save(umsAdmin), '添加用戶(hù)成功');}八、前端頁(yè)面添加功能1、添加用戶(hù)(按鈕和彈窗)

<el-button>:elementUI按鈕標(biāo)簽<el-button type='primary' plain @click='add'>添加用戶(hù)</el-button><!-- <el-dialog> 代表彈窗 :visible.sync表示顯示或隱藏--><!-- close-on-click-modal代表點(diǎn)擊對(duì)話框以外區(qū)域是否可以關(guān)閉 --><el-dialog :title='dialog.title' :visible.sync='dialog.show':close-on-click-modal='false'width='450px'> <AdminEdit :show.sync='dialog.show' v-if='dialog.show'></AdminEdit></el-dialog>

(1)添加用戶(hù)功能

add() { this.dialog.show = true this.dialog.title = '添加用戶(hù)'}

(2)添加內(nèi)容彈窗

<template> <div> <el-form :model='forms' :rules='rules' ref='ruleForm' label-width='100px'> <el-form-item label='登錄名' prop='loginName'> <el-input v-model='forms.loginName' placeholder='請(qǐng)輸入登錄名'></el-input> </el-form-item> <el-form-item label='昵稱(chēng)' prop='name'> <el-input v-model='forms.name' placeholder='請(qǐng)輸入昵稱(chēng)'></el-input> </el-form-item> <el-form-item label='密碼' prop='password'> <el-input v-model='forms.password' placeholder='請(qǐng)輸入密碼' show-password></el-input> </el-form-item> <el-form-item label='郵箱' prop='email'> <el-input v-model='forms.email' placeholder='請(qǐng)輸入郵箱'></el-input> </el-form-item> <el-form-item label='手機(jī)號(hào)' prop='phone'> <el-input v-model='forms.phone' placeholder='請(qǐng)輸入手機(jī)號(hào)'></el-input> </el-form-item> <el-form-item label='頭像' prop='imgobj'> </el-form-item> <el-form-item> <el-button size='small' type='primary' plain @click='save'>保存</el-button> </el-form-item> </el-form> </div></template> <script> export default{ name: ’AdminEdit’, props:{ show:{ type: Boolean } }, data(){ return { forms: { loginName: ’’, name: ’’, password: ’’, email: ’’, phone: ’’, imgobj: ’這是一張圖片’ }, rules:{ loginName:[ {required: true, message: ’請(qǐng)輸入登錄名’, trigger: ’blur’}, {min : 1, max: 20, message: ’長(zhǎng)度在1-20之間’, trigger: ’change’} ], name:[ {required: true, message: ’請(qǐng)輸入昵稱(chēng)’, trigger: ’blur’}, {min : 1, max: 20, message: ’長(zhǎng)度在1-20之間’, trigger: ’change’} ], password:[ {required: true, message: ’請(qǐng)輸入密碼’, trigger: ’blur’}, {min : 1, max: 100, message: ’長(zhǎng)度在1-100之間’, trigger: ’change’} ], email:[ {required: true, message: ’請(qǐng)輸入郵箱’, trigger: ’blur’}, {min : 1, max: 50, message: ’長(zhǎng)度在1-50之間’, trigger: ’change’}, {type: ’email’, message: ’請(qǐng)輸入正確格式的郵箱’, trigger: ’blur’} ], phone:[ {required: true, message: ’請(qǐng)輸入電話號(hào)’, trigger: ’blur’}, {min : 1, max: 20, message: ’長(zhǎng)度在1-20之間’, trigger: ’change’}, {pattern: /^1([38][0-9]|4[5-9]|5[0-3,5-9]|66|7[0-8]|9[89])[0-9]{8}$/, message: ’請(qǐng)輸入正確的手機(jī)號(hào)’, trigger: ’blur’} ], } } }, methods:{ save() { //提交表單前需要對(duì)表單再次進(jìn)行驗(yàn)證 //獲取表單對(duì)象//表單二次驗(yàn)證 this.$refs[’ruleForm’].validate((flag) => { //如果通過(guò)驗(yàn)證,則進(jìn)行表單數(shù)據(jù)提交 if(flag === true) { this.request(’/umsadmin/add’, ’post’, this.forms, response => { this.$message.success(response.message) }) } }) }, changeimg(file, fileList) { this.forms.imgobj = file.raw }, removeimg() { this.forms.imgobj = null } } }</script> <style></style>2、此時(shí)前端給后端發(fā)post請(qǐng)求會(huì)出現(xiàn)跨域錯(cuò)誤

跨域錯(cuò)誤解決需要在后端植入跨域過(guò)濾器(Bean節(jié)點(diǎn))

//跨域問(wèn)題解決@BeanCorsFilter getCorsFilter() { UrlBasedCorsConfigurationSource configurationSource = new UrlBasedCorsConfigurationSource(); CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.addAllowedHeader('*'); corsConfiguration.addAllowedMethod('*'); corsConfiguration.addAllowedOrigin('*'); //域名 configurationSource.registerCorsConfiguration('/**', corsConfiguration); return new CorsFilter(configurationSource);}

到此這篇關(guān)于SpringBoot+Vue實(shí)現(xiàn)數(shù)據(jù)添加功能的文章就介紹到這了,更多相關(guān)SpringBoot Vue數(shù)據(jù)添加內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
一区二区三区四区日本视频| 91久久中文| 蜜桃av一区二区三区电影| 久久久精品网| 国产亚洲综合精品| 亚洲ww精品| 麻豆一区二区三| 亚洲成人不卡| 蜜桃视频免费观看一区| 国产伦精品一区二区三区视频 | 国产日韩欧美中文在线| 国产欧美另类| 精品网站999| 日韩国产网站| 亚洲久久视频| 美女性感视频久久| 国产综合亚洲精品一区二| 蜜臀av性久久久久蜜臀aⅴ流畅 | 欧美在线资源| 日本国产一区| 成人在线黄色| 久久国产高清| 麻豆精品一区二区综合av| 久久婷婷av| 亚洲一级淫片| а√天堂8资源中文在线| 国产模特精品视频久久久久| 88久久精品| 99久久99久久精品国产片果冰| 在线精品一区| 国产精品二区不卡| 亚洲作爱视频| 欧美激情精品| 国产农村妇女精品一区二区| 欧美国产三级| 久久午夜精品| 欧美久久天堂| 国产欧美日韩精品高清二区综合区 | 亚洲综合三区| 美女久久99| 亚洲欧洲av| 亚洲小说欧美另类婷婷| 久久精品国产久精国产| 亚洲日韩中文字幕一区| 日韩免费福利视频| 国产欧美一级| 亚洲视频国产| 国产91精品对白在线播放| 国产精品多人| 蜜桃视频一区二区| 久久久久蜜桃| 美女精品一区二区| 亚洲毛片视频| 亚洲欧美一区在线| 久久精品国内一区二区三区| 蜜臀av性久久久久蜜臀aⅴ流畅| 9999国产精品| 国产精品久久国产愉拍| 中文一区一区三区免费在线观 | 日韩一区亚洲二区| 日韩在线观看一区二区三区| 亚洲一级影院| 欧美三区四区| 9999国产精品| 激情久久99| 久久成人高清| 欧美亚洲自偷自偷| 综合五月婷婷| 亚洲一区二区动漫| 99精品小视频| 亚洲a在线视频| 亚洲天堂av影院| 精品国产午夜肉伦伦影院| 欧美日韩一区自拍| 午夜性色一区二区三区免费视频| 91精品观看| 欧美中文字幕一区二区| 国产成人精品亚洲日本在线观看| 精品国产精品国产偷麻豆| 国产精品九九| 国产精品观看| 欧美激情91| 欧美片第1页综合| 日韩欧美中文在线观看| 亚洲精品亚洲人成在线观看| 综合干狼人综合首页| 自拍日韩欧美| av不卡免费看| 视频在线在亚洲| 亚洲一区欧美二区| 亚洲欧美视频| 亚洲日本久久| 欧美偷窥清纯综合图区| 欧美一级久久| 国产精品欧美在线观看| 91亚洲精品在看在线观看高清| 亚洲人妖在线| 一区三区视频| 蜜桃视频在线观看一区| 午夜性色一区二区三区免费视频| 色婷婷成人网| 欧美精品影院| 国产极品久久久久久久久波多结野| 国产欧美一区二区三区精品观看 | 久久精品二区亚洲w码| 国产精品日本一区二区三区在线| 国产精品一区二区av交换| 久久av超碰| 国产伦理一区| 国产极品久久久久久久久波多结野 | 国产精品一线| 国产精品欧美一区二区三区不卡 | 热久久久久久| 久久伊人久久| 欧美日韩视频免费观看| 久久影院一区| 免费人成网站在线观看欧美高清| 亚洲毛片网站| 国产精久久久| 日韩欧美精品综合| 国产在线欧美| 日韩一区精品视频| 国产精品一级在线观看| 精品一区二区三区的国产在线观看 | 欧美日本二区| 国产成人精品一区二区免费看京| 伊人网在线播放| 91久久中文| 国产免费av一区二区三区| 久久久久久久久成人| 日本美女一区| 亚洲成人精品| 巨乳诱惑日韩免费av| 欧美日韩亚洲一区三区| 日韩成人a**站| 久久国产精品久久w女人spa| 欧美精品国产一区| 午夜久久中文| 中文字幕一区日韩精品| 麻豆视频观看网址久久| 激情欧美一区| 日韩不卡一区二区| 日韩欧美不卡| 中文字幕视频精品一区二区三区| 美女久久精品| 免费久久精品视频| 久久99视频| 红桃视频欧美| 国产精品久久久免费| 欧洲精品一区二区三区| 免费在线欧美视频| 美女久久99| 久久av一区| 国产一区二区三区国产精品| 国产精品毛片在线看| 国产一区福利| 亚洲日本在线观看视频| 日韩亚洲一区在线| 日韩不卡一区二区| 99成人在线视频| 久久国内精品| 久久一级电影| 国产精品大片免费观看| 亚洲精品123区| 久久久久久自在自线| 日韩精品福利一区二区三区| 在线观看精品| 国产精品magnet| 亚洲欧美伊人| 精品视频久久| 久久国产生活片100| 久久亚洲精品伦理| 欧美精品高清| 久久一区精品| 日本国产一区| 亚洲综合丁香| 欧美一级鲁丝片| 久久精品99国产精品| 噜噜噜久久亚洲精品国产品小说| 高清精品久久| 青青国产精品| 视频精品一区二区| 99成人在线视频| yellow在线观看网址| 国产乱人伦精品一区| 视频一区欧美日韩| 免费成人网www| 日韩一区电影| 精品高清久久| 国产精品网站在线看| 日韩中文字幕一区二区高清99| 欧美91福利在线观看| 国产精品白浆| 日韩精品欧美大片| 伊人国产精品| 久久亚洲不卡| 亚洲欧美日韩一区在线观看| 激情婷婷亚洲| 国产精品99一区二区| 99精品网站|