c语言sscanf函数的用法是什么
250
2023-01-26
SpringBoot+Vue实现数据添加功能
一、添加代码生成器
用来自动为数据库映射类建立:mapper、service、controller
注:代码生成器的写法,参考官方文档: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();
//这样获取到的是父项目的目录
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); 实体属性 Swagger2 注解
mpg.setGlobalConfig(gc);
// 数据源配置
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"); //设置父包
//自定义生成路径
Map
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"); //实体类
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);
//生成时,继承的父类
strategy.setSuperEntityClass(BasePojo.class);
strategy.setEntityLombokModel(true);
strategy.setRestControllerStyle(true);
// 公共父类
strategy.setSuperControllerClass("你自己的父类控制器,没有就不用设置!");
// 写于父类中的公共字段
strategy.setSuperEntityColumns("id");
strategy.setInclude("ums_admin");
strategy.setControllerMappingHyphenStyle(true);
strategy.setTablePrefix(pc.getModuleName() + "_");
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}
二、导入需要的jar包
前期需要导入的包有:mybatis-plus、mysql、duracloud(工具包)、pojo、spring-boot-starter-web
三、创建启动类
启动类必须创建在父包下面,注意在SpringBoot中,并不是不扫包,而是框架帮助完成了这件事,它会扫描启动类所在包下的所有类及其子包中的类
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);
}
}
四、创建配置文件(application.yml)
server:
port: 8080
spring:
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
#运行的过程中输出sql语句(日志信息)
logging:
level:
com.hanmh.mapper: debug
五、返回值统一定义
1、Resultjson
package com.hanmh.pojo;
import lombok.Data;
@Data
public class ResultJson {
private Integer code; //200成功,500错误
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种返回代号和返回信息,使用枚举类进行实现
package com.hanmh.pojo;
import lombok.Data;
import lombok.Getter;
@Getter
public enum ResultCode {
SUCCESS(200, "请求成功"),
ERROR(500, "请求失败"),
NOAUTH(401, "用户未登录或者登录超时"), //操作时
NOPREMISSION(403, "没有此权限");
private Integer code;
private String message;
//枚举类型的构造默认为私有
private ResultCode(Integer code, String message) {
this.code = code;
this.message = message;
}
}
六、创建基础pojo
在所有的数据库表种,共有的字段是ID,现在将id独立出来
1、导入 mybatis-plus-annotation包
为了使用该包内部的IdType等类内部提供的注解,以告诉BasePojo中某些字段在数据库表中的存在与否
2、BasePojo类
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;
@Data
public class BasePojo {
@TableId(type = IdType.AUTO)
private Integer id;
//做分页操作需要的字段
@TableField(exist = false)
private Integer pageNO;
@TableField(exist = false)
private Integer pageSize;
}
七、后端添加数据
1、密码加密
(1)需要使用安全包提供加密服务(security)
2、将加密类(BCryptPasswordEncoder)放入IOC容器
在SpringBoot环节,需要将某个类加入IOC容器,就需要在配置类中,配置@Bean节点
@Configuration
public class AdminConfig {
@Bean
//将BCryptPasswordEncoder放进IOC容器
BCryptPasswordEncoder getPasswordEncoder() {
return new BCryptPasswordEncoder();
}
}
注:使用此方法对数据进行加密的原因:此加密方法相同明文密码多次可以生成不同的密文,而MD5相同密码则会生成相同的密文
3、后端添加数据简单实现
@PostMapping("/add")
ResultJson add(UmsAdmin umsAdmin) throws InterruptedException, IOException {
//对密码加密
umsAdmin.setPassword(passwordEncoder.encode(umsAdmin.getPassword()));
//TimeUnit.SECONDS.sleep(2);
return ResultJson.success(adminService.save(umsAdmin), "添加用户成功");
}
八、前端页面添加功能
1、添加用户(按钮和弹窗)
:title="dialog.title" :visible.sync="dialog.show" :close-on-click-modal="false" width="450px">
:title="dialog.title"
:visible.sync="dialog.show"
:close-on-click-modal="false"
width="450px">
(1)添加用户功能
add() {
this.dialog.show = true
this.dialog.title = "添加用户"
}
(2)添加内容弹窗
export default{
name: 'AdminEdit',
props:{
show:{
type: Boolean
}
},
data(){
return {
forms: {
loginName: '',
name: '',
password: '',
email: '',
phone: '',
imgobj: '这是一张图片'
},
rules:{
loginName:[
{required: true, message: '请输入登录名', trigger: 'blur'},
{min : 1, max: 20, message: '长度在1-20之间', trigger: 'change'}
],
nahttp://me:[
{required: true, message: '请输入昵称', trigger: 'blur'},
{min : 1, max: 20, message: '长度在1-20之间', trigger: 'change'}
],
password:[
{required: true, message: '请输入密码', trigger: 'blur'},
{min : 1, max: 100, message: '长度在1-100之间', trigger: 'change'}
],
email:[
{required: true, message: '请输入邮箱', triggWhyCieiLaaer: 'blur'},
{min : 1, max: 50, message: '长度在1-50之间', trigger: 'change'},
{type: 'email', message: '请输入正确格式的邮箱', trigger: 'blur'}
],
phone:[
{required: true, message: '请输入电话号', trigger: 'blur'},
{min : 1, max: 20, message: '长度在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: '请输入正确的手机号', trigger: 'blur'}
],
}
}
},
methods:{
save() {
//提交表单前需要对表单再次进行验证
//获取表单对象
//表单二次验证
this.$refs['ruleForm'].validate((flag) => {
//如果通过验证,则进行表单数据提交
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
}
}
}
2、此时前端给后端发post请求会出现跨域错误
跨域错误解决需要在后端植入跨域过滤器(Bean节点)
//跨域问题解决
@Bean
CorsFilter getCorsFilter() {
UrlBasedCorsConfigurationSource configurationSource = new UrlBasedCorsConfigurationSource();
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.addAllowedOrigin("*"); //域名
configurationSource.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter(configurationSource);
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~