当前位置: 首页 > news >正文

Element UI框架学习篇(四)

Element UI框架学习篇(四)

1 准备工作

1.0 创建Emp表并插入相应数据的sql语句

/*MySQL数据库*/SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;-- ----------------------------
-- Table structure for emp
-- ----------------------------
DROP TABLE IF EXISTS `emp`;
CREATE TABLE `emp`  (`EMPNO` int NOT NULL AUTO_INCREMENT,`ENAME` varchar(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,`JOB` varchar(9) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NULL DEFAULT NULL,`MGR` double NULL DEFAULT NULL,`HIREDATE` date NULL DEFAULT NULL,`SAL` double NULL DEFAULT NULL,`COMM` double NULL DEFAULT NULL,`DEPTNO` int NULL DEFAULT NULL,PRIMARY KEY (`EMPNO`) USING BTREE,INDEX `DEPTNO`(`DEPTNO`) USING BTREE,CONSTRAINT `emp_ibfk_1` FOREIGN KEY (`DEPTNO`) REFERENCES `dept` (`DEPTNO`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 8894 CHARACTER SET = utf8mb3 COLLATE = utf8mb3_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of emp
-- ----------------------------
INSERT INTO `emp` VALUES (7369, '老张23', 'CLERK', 7902, '1980-12-17', 1200, 0, 20);
INSERT INTO `emp` VALUES (7499, 'ALLEN', 'SALESMAN', 7698, '1981-02-20', 1700, 300, 30);
INSERT INTO `emp` VALUES (7521, 'WARD', 'SALESMAN', 7698, '1981-02-22', 1250, 500, 30);
INSERT INTO `emp` VALUES (7566, 'JONES', 'MANAGER', 7839, '1981-04-02', 3975, NULL, 20);
INSERT INTO `emp` VALUES (7654, 'MARTIN', 'SALESMAN', 7698, '1981-09-28', 1250, 1400, 30);
INSERT INTO `emp` VALUES (7698, 'BLAKE', 'MANAGER', 7839, '1981-05-01', 2850, NULL, 30);
INSERT INTO `emp` VALUES (7782, 'CLARK', 'MANAGER', 7839, '1981-06-09', 2450, NULL, 10);
INSERT INTO `emp` VALUES (7788, 'SCOTT', 'ANALYST', 7566, '1987-07-13', 4000, NULL, 20);
INSERT INTO `emp` VALUES (7839, 'KING', 'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10);
INSERT INTO `emp` VALUES (7844, 'TURNER', 'SALESMAN', 7698, '1981-09-08', 1500, 0, 30);
INSERT INTO `emp` VALUES (7876, 'ADAMS', 'CLERK', 7788, '1987-07-13', 2100, NULL, 20);
INSERT INTO `emp` VALUES (7900, 'JAMES', 'CLERK', 7698, '1981-12-03', 950, NULL, 30);
INSERT INTO `emp` VALUES (7902, 'FORD', 'ANALYST', 7566, '1981-12-03', 4000, NULL, 20);
INSERT INTO `emp` VALUES (8890, '小红', '大合照', 5678, '1975-09-23', 8899, 66, 30);SET FOREIGN_KEY_CHECKS = 1;

1.1 复制好之前项目中写好的代码生成器类,其内容如下所示

package com.zlz;import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;import java.util.Collections;public class MyGenerator {public static void main(String[] args) {//不需要写一个重复的实体类,把模块也覆盖掉 注释掉,一般是只开一次FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3305/db0618", "root", "root").globalConfig(builder -> {builder.author("zlz") // 设置作者.dateType(DateType.ONLY_DATE) // 时间策略,日期以什么样子的类型去生成.outputDir("F:\\boot\\boot-shiro2\\src\\main\\java"); // 指定输出目录}).packageConfig(builder -> {builder.parent("com.zlz") // 设置父包名.pathInfo(Collections.singletonMap(OutputFile.xml, "F:\\boot\\boot-shiro2\\src\\main\\resources\\mapper")); // 设置mapperXml生成路径,// 注意:这个mapper文件夹是可以不存在的,运行该main方法会自动创建的}).strategyConfig(builder -> {//开启lombokbuilder.entityBuilder().enableLombok();//覆盖现有文件,第二次不会覆盖
//                    builder.entityBuilder().fileOverride();builder.addInclude("emp"); // 设置需要生成的表名,想一次性生成多张表,就用逗号隔开,如:addInclude("songs","music")}).execute();}
}

1.2 运行代码生成器会自动生成如下图所示的这些类

在这里插入图片描述

1.3 变更Emps类,变更后的内容如下所示

package com.zlz.entity;import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.io.Serializable;
import java.util.Date;import lombok.*;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class Emp implements Serializable {private static final long serialVersionUID = 1L;@TableId(value = "EMPNO", type = IdType.AUTO)private Integer empno;private String ename;private String job;private Integer mgr;private String hiredate;private Double sal;private Double comm;private Integer deptno;
}

1.4 在EmpServiceImpl类上加上@Transactional注解,保证数据库执行出错会回滚

package com.zlz.service.impl;import com.zlz.entity.Emp;
import com.zlz.mapper.EmpMapper;
import com.zlz.service.IEmpService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@Service
/*业务实现类加该注解*/
@Transactional
public class EmpServiceImpl extends ServiceImpl<EmpMapper, Emp> implements IEmpService {}

1.5 在EmpController类变更并新增注解

在这里插入图片描述

2 在表格中全部展示数据

2.1 在EmpController类上定义查询全部数据的方法(不含分页)

@Resource
IEmpService empService;
@RequestMapping("find")
public List<Emp> find(){return empService.list();
}

2.2 创建find01.html文件,其内容如下所示

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- ①导入文件: 1.1需要导入el相关样式和vue.js文件 ②需要导入element的js文件③导入异步提交的css文件 --><link rel="stylesheet" href="../elementUI/elementUI.min.css"><script src="../js/vue.js"></script><script src="../js/axios.min.js"></script><script src="../elementUI/elementUI.min.js"></script><title>查询全部数据(不含分页)</title>
</head>
<body><div id="app"><!-- ②el-table代表表格  el-table-column代表表格中的每一列:data需要对应vue实例中的对象数组,lable表示每一列列名,prop是保证能填入每一条数据中对象的字段值 --><el-table :data="emps"><!-- prop属性来对应对象中的键名,需要和实体类中的保持一致--><el-table-column label="编号" prop="empno"></el-table-column><el-table-column label="姓名" prop="ename"></el-table-column><el-table-column label="工作" prop="job"></el-table-column><el-table-column label="工资" prop="sal"></el-table-column><el-table-column label="入职日期" prop="hiredate"></el-table-column></el-table></div><script>new Vue({el:"#app",data:{emps:[]},mounted(){//④钩子函数里面调用自定义查询方法 如果要调用本实例的自定义方法,需要使用this.this.find();},methods:{//③创建自定义查询方法,减少冗余 find(){axios.post("http://127.0.0.1:8080/emp/find").then(jg=>{//jg.data是后台返回的结果console.log(jg.data);this.emps=jg.data;})}}})</script>
</body>
</html>

2.3 运行截图

在这里插入图片描述

3 在表格中分页展示数据

3.1 在EmpController类上定义查询全部数据的方法(含分页)

@Resource
IEmpService empService;
@RequestMapping({"find","find/{page}"})
//引用数据类型才会为null,所以需要定义成Integer类型
public IPage<Emp> find(@PathVariable(required = false) Integer page){if(page==null) {page = 1;}IPage<Emp> iPage=new Page<>(page,3);return empService.page(iPage);
}

3.2 创建find02.html文件,其内容如下所示

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- ①导入文件: 1.1需要导入el相关样式和vue.js文件 ②需要导入element的js文件③导入异步提交的css文件 --><link rel="stylesheet" href="../elementUI/elementUI.min.css"><script src="../js/vue.js"></script><script src="../js/axios.min.js"></script><script src="../elementUI/elementUI.min.js"></script><title>查询全部数据(含分页)</title>
</head>
<body><div id="app"><!-- ②el-table代表表格  el-table-column代表表格中的每一列:data需要对应vue实例中的对象数组,lable表示每一列列名,prop是保证能填入每一条数据中对象的字段值 --><el-table :data="emps" :cell-style="{'text-align':'center'}":header-cell-style="{'text-align':'center'}"><el-table-column label="编号" prop="empno"></el-table-column><el-table-column label="姓名" prop="ename"></el-table-column><el-table-column label="工作" prop="job"></el-table-column><el-table-column label="工资" prop="sal"></el-table-column><el-table-column label="入职日期" prop="hiredate"></el-table-column></el-table><!--layout是用于显示分页插件所要展示的部分 total总页码数 sizes每页条数 prev前箭头pager点点点 next后箭头 jumper跳页  --><el-pagination background :total="total" :current-page.sync="current" :page-size.sync="size" @current-change="find()" layout="total,prev, pager, next, jumper">            </el-pagination></div><script>new Vue({el:"#app",data:{emps:[],current:0,//当前页码数size:0,//每页显示条数current:0,//总条数},mounted(){//④钩子函数里面调用自定义查询方法 如果要调用本实例的自定义方法,需要使用this.this.find();},methods:{//③创建自定义查询方法,减少冗余,注意:地址里面的find需要加上斜杠find(){axios.post("http://127.0.0.1:8080/emp/find/"+this.current).then(jg=>{//jg.data是后台返回的Ipage对象,其中.records才是对应的数据console.log(jg.data);this.current=jg.data.current;this.size=jg.data.size;this.total=jg.data.total;this.emps=jg.data.records;})}}})</script>
</body>
</html>

3.3 运行截图

3.3.1 初次进入页面时候

在这里插入图片描述

3.3.2 点击第三页时,页面显示第三页的数据

在这里插入图片描述

3.3.3 在前往页面输入数字5并回车后的界面

在这里插入图片描述

4 点击修改, 弹出对话框,然后显示修改的数据信息

4.1 在EmpController类上定义根据id查询的方法

 @ResourceIEmpService empService;@RequestMapping("findid")//json格式的数据public Emp find(@RequestBody Map<String,Object> map){return  empService.getById(map.get("id").toString());}

4.2 在el-table标签里面添加编辑按钮

<el-table-column  label="操作"><!-- slot-scope可以用来得到当前行的数据 里面的值自定义需要得到特定行需要使用template标签--><template slot-scope="s"><el-button type="success" @click="editEmp(s.row.empno)">编辑</el-button></template>
</el-table-column> 

4.3 创建el-dialog标签(在分页插件下方)

<el-dialog title="编辑员工信息界面" :visible.sync="editStatus" center><!-- 如果相对对话框中的表单居中,直接套上一个center标签即可 --><center><el-form :model="emp" inline label-width="80px"><el-form-item label="编号"><el-input readonly v-model="emp.empno"></el-input>     </el-form-item><el-form-item label="姓名"><el-input v-model="emp.ename"></el-input>     </el-form-item><el-form-item label="入职日期"><el-input v-model="emp.hiredate"></el-input>     </el-form-item><el-form-item label="职位"><el-input v-model="emp.job"></el-input>     </el-form-item><el-form-item label="工资"><el-input v-model="emp.sal"></el-input>     </el-form-item><el-form-item label="奖金"><el-input v-model="emp.comm"></el-input>     </el-form-item><el-form-item><el-button type="success">修改</el-button><el-button type="info">取消</el-button></el-form-item></el-form></center>
</el-dialog>

4.4 在vue的data中创建editStatus这个key,并复制为false

 editStatus:false,

4.5 创建弹出编辑界面并显示信息的方法

 editEmp(empid){//带上map集合过去,需要使用{key:value}的形式axios.post("http://localhost:8080/emp/findid",{id:empid}).then(jg=>{this.emp=jg.data;this.editStatus=true;})}

4.6 完整的页面代码如下所示

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- ①导入文件: 1.1需要导入el相关样式和vue.js文件 ②需要导入element的js文件③导入异步提交的css文件 --><link rel="stylesheet" href="../elementUI/elementUI.min.css"><script src="../js/vue.js"></script><script src="../js/axios.min.js"></script><script src="../elementUI/elementUI.min.js"></script><title>点击编辑按钮弹出编辑界面</title>
</head>
<body><div id="app"><!-- ②el-table代表表格  el-table-column代表表格中的每一列:data需要对应vue实例中的对象数组,lable表示每一列列名,prop是保证能填入每一条数据中对象的字段值 --><el-table :data="emps" :cell-style="{'text-align':'center'}":header-cell-style="{'text-align':'center'}" border ><el-table-column label="编号" prop="empno"></el-table-column><el-table-column label="姓名" prop="ename"></el-table-column><el-table-column label="工作" prop="job"></el-table-column><el-table-column labels="工资" prop="sal"></el-table-column><el-table-column label="入职日期" prop="hiredate"></el-table-column><el-table-column  label="操作"><!-- slot-scope可以用来得到当前行的数据 里面的值自定义需要得到特定行需要使用template标签--><template slot-scope="s"><el-button type="success" @click="editEmp(s.row.empno)">编辑</el-button></template></el-table-column> </el-table><!--layout是用于显示分页插件所要展示的部分 total总页码数 sizes每页条数 prev前箭头pager点点点 next后箭头 jumper跳页  --><el-pagination background :total="total" :current-page.sync="current" :page-size.sync="size" @current-change="find()" layout="total,prev, pager, next, jumper">            </el-pagination><!-- visible的条件为true就显示,为false就不显示 --><el-dialog title="编辑员工信息界面" :visible.sync="editStatus" center><!-- 如果相对对话框中的表单居中,直接套上一个center标签即可 --><center><el-form :model="emp" inline label-width="80px"><el-form-item label="编号"><el-input readonly v-model="emp.empno"></el-input>     </el-form-item><el-form-item label="姓名"><el-input v-model="emp.ename"></el-input>     </el-form-item><el-form-item label="入职日期"><el-input v-model="emp.hiredate"></el-input>     </el-form-item><el-form-item label="职位"><el-input v-model="emp.job"></el-input>     </el-form-item><el-form-item label="工资"><el-input v-model="emp.sal"></el-input>     </el-form-item><el-form-item label="奖金"><el-input v-model="emp.comm"></el-input>     </el-form-item><el-form-item><el-button type="success">修改</el-button><el-button type="info">取消</el-button></el-form-item></el-form></center></el-dialog></div><script>new Vue({el:"#app",data:{emps:[],current:0,//当前页码数size:0,//每页显示条数total:0,//总条数editStatus:false,emp:{empno:null,//员工编号,需要与数据库字段对应ename:null,//员工姓名hiredate:null,//员工入职日期job:null,//员工工作sal:null,//员工薪水comm:null,//员工奖金}},mounted(){//④钩子函数里面调用自定义查询方法 如果要调用本实例的自定义方法,需要使用this.this.find();},methods:{//③创建自定义查询方法,减少冗余,注意:地址里面的find需要加上斜杠find(){axios.post("http://127.0.0.1:8080/emp/find/"+this.current).then(jg=>{//jg.data是后台返回的Ipage对象,其中.records才是对应的数据console.log(jg.data);this.current=jg.data.current;this.size=jg.data.size;this.total=jg.data.total;this.emps=jg.data.records;})},editEmp(empid){//带上map集合过去,需要使用{key:value}的形式axios.post("http://localhost:8080/emp/findid",{id:empid}).then(jg=>{this.emp=jg.data;this.editStatus=true;})}}})</script>
</body>
</html>

4.7 运行截图

4.7.1 初次进入页面时

在这里插入图片描述

4.7.2 点击编辑按钮后

在这里插入图片描述

5 真正完成修改(数据库变动且js是采用外部脚本的方式)

5.1 EmpController类上定义修改方法

@Resource
IEmpService empService;
@RequestMapping("update")//json格式的数据接收只能用requestBodypublic boolean find(@RequestBody Emp emp){return  empService.updateById(emp);
}

5.2 编辑的核心js代码

 editEmp(){this.$confirm('此操作将修改员工信息', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {//第二个参数带{}的是map集合,直接逗号的是后台是可以使用实体类接收的axios.post("http://127.0.0.1:8080/emp/update",this.emp).then(jg=>{if(jg.data==true){this.editStatus=false;  this.$message({type: 'success',message: '修改成功!'});this.find();}else{this.$message({type: 'info',message: '修改失败!'});   }})   }).catch(() => {this.$message({type: 'info',message: '已取消修改'});          });
}

5.3 编辑界面的重置按钮代码(只需要再重查一次)

 <el-button type="info" @click="showEmp(emp.empno)">重置</el-button>

5.4 完整的编辑界面代码find02.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><!-- ①导入文件: 1.1需要导入el相关样式和vue.js文件 ②需要导入element的js文件③导入异步提交的css文件 --><link rel="stylesheet" href="../elementUI/elementUI.min.css"><script src="../js/vue.js"></script><script src="../js/axios.min.js"></script><script src="../elementUI/elementUI.min.js"></script><title></title>
</head>
<body><div id="app"><!-- ②el-table代表表格  el-table-column代表表格中的每一列:data需要对应vue实例中的对象数组,lable表示每一列列名,prop是保证能填入每一条数据中对象的字段值 --><el-table :data="emps" :cell-style="{'text-align':'center'}":header-cell-style="{'text-align':'center'}" border ><el-table-column label="编号" prop="empno"></el-table-column><el-table-column label="姓名" prop="ename"></el-table-column><el-table-column label="工作" prop="job"></el-table-column><el-table-column label="工资" prop="sal"></el-table-column><el-table-column label="奖金" prop="comm"></el-table-column><el-table-column label="入职日期" prop="hiredate"></el-table-column><el-table-column  label="操作"><!-- slot-scope可以用来得到当前行的数据 里面的值自定义需要得到特定行需要使用template标签--><template slot-scope="s"><el-button type="success" @click="showEmp(s.row.empno)">编辑</el-button></template></el-table-column> </el-table><!--layout是用于显示分页插件所要展示的部分 total总页码数 sizes每页条数 prev前箭头pager点点点 next后箭头 jumper跳页  --><el-pagination background :total="total" :current-page.sync="current" :page-size.sync="size" @current-change="find()" layout="total,prev, pager, next, jumper">            </el-pagination><!-- visible的条件为true就显示,为false就不显示 --><el-dialog title="编辑员工信息界面" :visible.sync="editStatus" center><!-- 如果相对对话框中的表单居中,直接套上一个center标签即可 --><center><el-form :model="emp" inline label-width="80px"><el-form-item label="编号"><el-input readonly v-model="emp.empno"></el-input>     </el-form-item><el-form-item label="姓名"><el-input v-model="emp.ename"></el-input>     </el-form-item><el-form-item label="入职日期"><el-input v-model="emp.hiredate"></el-input>     </el-form-item><el-form-item label="职位"><el-input v-model="emp.job"></el-input>     </el-form-item><el-form-item label="工资"><el-input v-model="emp.sal"></el-input>     </el-form-item><el-form-item label="奖金"><el-input v-model="emp.comm"></el-input>     </el-form-item><el-form-item><el-button type="success" @click="editEmp()">修改</el-button><el-button type="info" @click="showEmp(emp.empno)">重置</el-button></el-form-item></el-form></center></el-dialog></div><script src="../js/edit.js"></script>
</body>
</html>

5.5 完整的js脚本代码

new Vue({el:"#app",data:{emps:[],current:0,//当前页码数size:0,//每页显示条数total:0,//总条数editStatus:false,//editStatus为false时,只是隐藏该标签,实例并没有取消emp:{empno:null,//员工编号,需要与数据库字段对应ename:null,//员工姓名hiredate:null,//员工入职日期job:null,//员工工作sal:null,//员工薪水comm:null,//员工奖金}},mounted(){//④钩子函数里面调用自定义查询方法 如果要调用本实例的自定义方法,需要使用this.this.find();},methods:{//③创建自定义查询方法,减少冗余,注意:地址里面的find需要加上斜杠find(){axios.post("http://127.0.0.1:8080/emp/find/"+this.current).then(jg=>{//jg.data是后台返回的Ipage对象,其中.records才是对应的数据console.log(jg.data);this.current=jg.data.current;this.size=jg.data.size;this.total=jg.data.total;this.emps=jg.data.records;})},showEmp(empid){//带上map集合过去,需要使用{key:value}的形式axios.post("http://localhost:8080/emp/findid",{id:empid}).then(jg=>{this.emp=jg.data;this.editStatus=true;})},editEmp(){this.$confirm('此操作将修改员工信息', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {//第二个参数带{}的是map集合,直接逗号的是后台可以直接接收的 axios.post("http://127.0.0.1:8080/emp/update",this.emp).then(jg=>{if(jg.data==true){this.editStatus=false;  this.$message({type: 'success',message: '修改成功!'});// 方法与方法之间使用this.调用this.find();}else{this.$message({type: 'info',message: '修改失败!'});   }})   }).catch(() => {this.showEmp(this.emp.empno);this.$message({type: 'info',message: '已取消修改'});          });}}
})

5.6 测试

5.6.1 初次点击修改按钮后,进入如下界面

在这里插入图片描述

5.6.2 测试重置按钮

a 变更数据后的界面

在这里插入图片描述

b 点击重置后的界面

在这里插入图片描述

5.6.3 测试修改按钮

a 变更数据并点击修改

在这里插入图片描述

b 点击确认修改

在这里插入图片描述

c 回到最初的查询界面,此时值已经变更成了最新的数据

在这里插入图片描述

相关文章:

Element UI框架学习篇(四)

Element UI框架学习篇(四) 1 准备工作 1.0 创建Emp表并插入相应数据的sql语句 /*MySQL数据库*/SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for emp -- ---------------------------- DROP TABLE IF EXISTS emp; CRE…...

Revit快速材质切换:同一墙面赋予不同材质的方法

一、Revit中对同一墙面赋予不同材质的方法 方法1&#xff1a;零件法 重点&#xff1a;通过工作平面面板上的设置工作平面命令选取正确的面取消勾选通过原始分类的材质&#xff0c;如图1所示 方法2&#xff1a;拆分构造层绘制一道墙体&#xff0c;选择创建的墙体&#xff0c;单击…...

【Linux operation 56】Linux 系统验证端口连通性

linux 系统验证端口连通性 1、前提 Linux系统有时候需要测试某个端口的连通性&#xff0c;然而ping命令只能测试某个IP通不通&#xff0c;不能测试某端口的连通性。 因为ping命令是基于ICMP协议&#xff0c;是计算机网络中的网络层的协议&#xff0c;但是想要测试某个的连通…...

@Valid注解配合属性校验注解完成参数校验并且优化异常处理

Valid注解配合属性校验注解完成参数校验并且优化参数校验异常处理1 Valid注解配合属性校验注解完成参数校验2 优化参数校验异常处理1 Valid注解配合属性校验注解完成参数校验 向数据库商品分类表中新增商品分类字段&#xff0c;并校验传入的参数 不使用注解的传统方法&#xf…...

每天一道大厂SQL题【Day08】

每天一道大厂SQL题【Day08】 大家好&#xff0c;我是Maynor。相信大家和我一样&#xff0c;都有一个大厂梦&#xff0c;作为一名资深大数据选手&#xff0c;深知SQL重要性&#xff0c;接下来我准备用100天时间&#xff0c;基于大数据岗面试中的经典SQL题&#xff0c;以每日1题…...

朗润国际期货:2023/2/10今日期市热点及未来焦点

2023/2/10今日期市热点及未来焦点 1月份人 民币贷款增加4.9万亿元 创历史新高 中国央行: 1月份人民币贷款增加4.9万亿元&#xff0c;同比多增9227亿元。分部门看&#xff0c;住户贷款增加2572亿元&#xff0c;其中&#xff0c;短期贷款增加341亿元&#xff0c;中长期贷款增加…...

TLV73312PQDRVRQ1稳压器TPS622314TDRYRQ1应用原理图

一、TLV73312PQDRVRQ1低压差稳压器 1.2V 300MATLV733 300mA 低压差稳压器是有 300mA 拉电流能力的超小型、低静态电流 LDO&#xff0c;具有良好的线路和负载瞬态性能。这些器件具有 1% 的典型精度。TLV733 系列设计具有先进的无电容器结构&#xff0c;确保无需输入或输出电容器…...

课程回顾|以智能之力,加速媒体生产全自动进程

本文内容整理自「智能媒体生产」系列课程第二讲&#xff1a;视频AI与智能生产制作&#xff0c;由阿里云智能视频云高级技术专家分享视频AI原理&#xff0c;AI辅助媒体生产&#xff0c;音视频智能化能力和底层原理&#xff0c;以及如何利用阿里云现有资源使用音视频AI能力。课程…...

C库函数文件操作(fopen、fread、fwrite、fclose)

C库函数 C文件操作用库函数实现&#xff0c;包含在stdio.h中&#xff0c;系统自动打开和关闭三个标准文件&#xff1a; 标准输入-键盘&#xff08;stdin&#xff09;标准输出-显示器&#xff08;stdout&#xff09;标准出错输出-显示器&#xff08;stderr&#xff09; 文件打…...

【Java|golang】1798. 你能构造出连续值的最大数目

给你一个长度为 n 的整数数组 coins &#xff0c;它代表你拥有的 n 个硬币。第 i 个硬币的值为 coins[i] 。如果你从这些硬币中选出一部分硬币&#xff0c;它们的和为 x &#xff0c;那么称&#xff0c;你可以 构造 出 x 。 请返回从 0 开始&#xff08;包括 0 &#xff09;&a…...

VB 消息、消息队列、事件

windows是图像化界面&#xff0c;多任务消息windows系统将消息&#xff08;大的结构&#xff09;发给其他应用程序Windows消息包含了所有的外部输入或者计算机内部信息&#xff0c;应用程序的消息队列先进先出&#xff0c;Windows消息的循环--每个应用程序里有自己的消息循环外…...

Linux实用指令记录

du Linux du&#xff08;英文全拼&#xff1a;disk usage&#xff09;命令用于显示目录或文件的大小。du 会显示指定的目录或文件所占用的磁盘空间。用例&#xff1a;当前路径/home/hzf/Voice/wespeaker-master$ du -h -d 1 371G ./examples 52K ./tools 280K ./run…...

Jetpack Compose中的绘制流程和自定义布局

Jetpack Compose中绘制流程的三个阶段 与大多数其他界面工具包一样&#xff0c;Compose 会通过几个不同的“阶段”来渲染帧。如果我们观察一下 Android View 系统&#xff0c;就会发现它有 3 个主要阶段&#xff1a;测量、布局和绘制。Compose 和它非常相似&#xff0c;但开头…...

笔试题-2023-芯动-数字IC设计【纯净题目版】

回到首页:2023 数字IC设计秋招复盘——数十家公司笔试题、面试实录 推荐内容:数字IC设计学习比较实用的资料推荐 题目背景 笔试时间:2022.07.23应聘岗位:数字IC设计笔试时长:120min笔试平台:nowcoder牛客网题目类型:单选题(10道)、不定项选择(5道)、填空(5道)、问…...

高压放大器在孔道灌浆非线性超声测试中的应用

实验名称&#xff1a;高压放大器在孔道灌浆非线性超声测试中的应用研究方向&#xff1a;无损检测测试目的&#xff1a;超声波作为频率高于20kHz的声波被广泛应用于各类结构的无损检测中&#xff0c;以超声波作为探伤波的无损检测法称为超声波无损检测法&#xff0c;简称超声波法…...

vue3响应式原理

通过Proxy(代理): 拦截对data任意属性的进行操作, 包括属性值的增删改查 通过 Reflect(反射): 动态对被代理对象的相应属性进行特定的操作 通过采用两者结合使用的方式实现响应式 Proxy 对象用于创建一个对象的代理&#xff0c;从而实现基本操作的拦截和自定义&#xff08;如…...

c/c++开发,无可避免的宏定义使用案例

一、c/c宏定义的来源 宏定义&#xff0c;就是用一个标识符来表示一个字符串&#xff0c;如果在后面的代码中出现了该标识符&#xff0c;那么就全部替换成指定的字符串。通常c/c宏定义这几处出处&#xff1a; 1&#xff09;最常见的就是来自于开发者编码过程中采用宏定义命令“#…...

SaaS的阴暗面:网络攻击武器化、平民化

你不一定懂编程&#xff0c;甚至都看不懂几行代码&#xff0c;但依然能成为杀伤力十足的黑客&#xff0c;这就是现阶段不少网络攻击的特点&#xff1a;不需要掌握娴熟的技术或代码&#xff0c;仅仅利用成熟的武器化工具&#xff0c;就能通过简单的“一键操作”&#xff0c;对目…...

『CV学习笔记』图像处理透视变换(Python+Opencv)

图像处理透视变换(Opencv) 文章目录 一. 透视变换定义二. 代码实现2.1. order_points函数2.2. four_point_transform函数2.3. 程序主函数三. 参考文献一. 透视变换定义 【图像处理】透视变换 Perspective Transformation原理:https://blog.csdn.net/xiaowei_cqu/article/detai…...

使用Fetch时,post数据时,后端接收的Content-Type为text/plain

在使用 Fetch做一个前端的post请求时&#xff0c;直接从网上抄了一段代码 export async function postData(url, data){const response await fetch(url, {method: POST, // *GET, POST, PUT, DELETE, etc.mode: no-cors, // no-cors, *cors, same-originheaders: { Content-…...

大型智慧校园系统源码 智慧校园源码 Android电子班牌源码

一款针对中小学研发的智慧校园系统源码&#xff0c;智慧学校源码带电子班牌、人脸识别系统。系统有演示&#xff0c;可正常上线运营正版授权。 私信了解更多&#xff01; 技术架构&#xff1a; 后端&#xff1a;Java 框架&#xff1a;springboot 前端页面&#xff1a;vue e…...

【MySQL】你知道的MySQL中的集合函数有哪些呢?

集合函数排名AVG&#xff08;&#xff09;函数COUNT()函数SUM&#xff08;&#xff09;函数MAX&#xff08;&#xff09;函数 和 MIN&#xff08;&#xff09;函数总结大家好&#xff0c;我是小冷。 上一篇写了 看看ChatGPT是如何回答面试官的问题的&#xff1f; 地址是&#x…...

科目一罚款题

第一种&#xff1a;20~200元关键字&#xff1a;遮车牌、改信息1、故意使用物品遮挡号牌的2、号牌刮花严重&#xff0c;掉漆未处理继续使用的3、驾驶人联系方式、地址等信息发生变化时&#xff0c;没有及时申报变更信息的4、驾驶人不在现场、或虽在现场但拒绝立即驶离&#xff0…...

Maven中央仓库地址大全

一、仓库地址配置方式关于 Maven 远程仓库地址的配置方式有两种&#xff1a;第1种&#xff1a;直接在项目的 pom.xml 文件中进行修改&#xff08;不推荐&#xff0c;尤其是在多人协助的开发过程中非常的费事费力&#xff09;&#xff1b;第2种&#xff1a;将 Maven 的远程仓库统…...

人工智能的未来———因果推理what if 第11章(统计模型) 文章解读

我们在观察数据当中,一般使用样本均值去估计目标人群的均值 在所有情况都是理想的情况下: 平均因果效应...

百度贴吧发帖软件如何发布?

百度贴吧发帖软件如何发布&#xff1f;贴吧软件发帖顶帖视频教学&#xff0c;防删图技术视频教学#贴吧发帖#贴吧顶帖 大家好&#xff0c;今天给大家讲一下一个贴软件发电机顶帖的视频教学。先给大家讲一下软件一个发帖。今天我们用的一个软件叫做神机。神机我们现在看到的软件…...

如何成为java架构师?2023版Java架构师学习路线总结完成,真实系统有效,一切尽在其中

导读 从初级Java工程师成长为Java架构师&#xff0c;你需要走很长的路&#xff0c;很多有计划的人在学习之初就在做准备。你知道Java架构师学习路线该怎么走吗?成为一个优秀的Java架构师究竟需要学什么?接下来就跟小编一起揭晓答案。 架构师是一个充满挑战的职业&#xff0…...

tkinter 实现选择文件夹或者多个文件

import tkinter as tk from tkinter import filedialog def select_file(): # 单个文件选择 selected_file_path filedialog.askopenfilename() # 使用askopenfilename函数选择单个文件 select_path.set(selected_file_path) def select_files(): # 多个文件…...

深圳活动会议媒体邀约,电视台,网媒媒体资源

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;一&#xff0c;您可以考虑以下几种方式邀请媒体参加深圳的活动会议&#xff1a;1&#xff0c;直接联系&#xff1a;找到相关媒体的联系人信息&#xff0c;发送邀请函或电话邀请。2&#xff0c;通过公关公司&…...

JDBC与Druid连接池

1 什么是jdbc? JDBC&#xff08;java database connectivity &#xff09;是Java语言连接操作关系型数据库的一套解决方案&#xff0c;屏蔽了底层各数据库不同的差异。 具体是通过sun公司定义的统一的一套API【标准接口】来实现解决差异&#xff0c; 具体实现是各大数据库厂商…...

做网站域名 空间/百度广告搜索引擎

随着计算机和互联网的出现&#xff0c;许多信息都以数字方式捕获。不同的公司想出了解决方案来提高这个过程的效率。一种这样的解决方案是可填写的 PDF 表单。PDF 表单是一种流行的选择&#xff0c;可以轻松地以数字方式捕获信息。PDF 表格可用于获取调查数据或作为录取表格。鉴…...

做网站的意义/制作网站的软件

Android权限说明 Android系统是运行在Linux内核上的&#xff0c;Android与Linux分别有自己的一套严格的安全及权限机制&#xff0c; Android系统权限相关的内容&#xff0c; &#xff08;一&#xff09;linux文件系统上的权限 -rwxr-x--x system system 4156 2012-06…...

易语言用电脑做网站服务器/互联网企业营销策略

最近更新&#xff1a; 2018-07-19注意&#xff1a;最新版iview已经提供多级表头功能 参考原理&#xff1a;利用多个Table组件通过显示和隐藏thead和tbody来拼接表格(较粗暴)htmljavascript非合并而来的列&#xff0c;请注意设置宽度(如下的宽度160)否则会被均分导致下面的行的列…...

wordpress主题yeti1.9.2/seo关键词推广优化

Runtime.getRuntime()这个问题在android中申请root权限时一定碰到,它究竟是一个怎样的api呢? 文章http://blog.csdn.net/xubo578/article/details/5717186文章给出了一定的理解....

wordpress粘贴图片/电商从零基础怎么学

众所周知&#xff0c;Objective-C是一门面向对象的语言&#xff0c;一般情况下&#xff0c;我们在Objective-C中定义一个类时&#xff0c;总要提供一个初始化方法&#xff0c;一般大家都是这样写的&#xff1a; - (MyClass *)init { self [super init]; if (self) { //执行一…...

成都哪里有做网站的/bt搜索引擎下载

基于多尺度窗口的DEM局部填洼方法徐静波1&#xff0c;许捍卫1&#xff0c;于艳超2【摘要】为了去除DEM中的伪洼地&#xff0c;使水系提取结果更加精确&#xff0c;在M&V算法的基础上提出了一种改进的填洼方法。用局部处理的思想将填洼步骤简化&#xff0c;减小对DEM的计算范…...