您现在的位置是:主页 > news > 济南网站排名推广/百度关键词优化策略

济南网站排名推广/百度关键词优化策略

admin2025/6/26 11:06:06news

简介济南网站排名推广,百度关键词优化策略,网站推广方法渠道,人大网站建设请示1.在pom.xml中引入poi和EasyExcel的依赖 简单读写和依赖的代码 2.使用代码生成器在各层中生成subject的内容 使用代码生成器生成subject的mapper controller service entity 注:把代码生成器中的策略配置部分 strategy.setInclude(“edu_subject”) 这一句应该对…

济南网站排名推广,百度关键词优化策略,网站推广方法渠道,人大网站建设请示1.在pom.xml中引入poi和EasyExcel的依赖 简单读写和依赖的代码 2.使用代码生成器在各层中生成subject的内容 使用代码生成器生成subject的mapper controller service entity 注:把代码生成器中的策略配置部分 strategy.setInclude(“edu_subject”) 这一句应该对…

1.在pom.xml中引入poi和EasyExcel的依赖

简单读写和依赖的代码

2.使用代码生成器在各层中生成subject的内容

使用代码生成器生成subject的mapper controller service entity
注:把代码生成器中的策略配置部分 strategy.setInclude(“edu_subject”) 这一句应该对应想要操作的表
要生成subject的各层内容 对应的就是edu_subject这张表

// 5、策略配置StrategyConfig strategy = new StrategyConfig();strategy.setInclude("edu_subject");

3.创建上传的文件对应的实体类

注:和数据库表对应的实体类区分

package com.kaki.serviceedu.entity.excel;import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;/*** 创建课程excel文件对应的实体类*/@Data
public class SubjectData {@ExcelProperty(index = 0)//index表示对应excel文件的第一列private String oneSubjectName;@ExcelProperty(index = 1)//对应excel文件的第二列private String twoSubjectName;
}

4.controller

package com.kaki.serviceedu.controller;import com.kaki.commonutils.R;
import com.kaki.serviceedu.service.EduSubjectService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;/**** @author kaki* @since 2021-02-28*/
@RestController
@RequestMapping("/serviceedu/subject")
@CrossOrigin
public class EduSubjectController {@Autowiredprivate EduSubjectService subjectService;//添加课程分类//获取上传过来文件,把文件内容读取出来@PostMapping("addSubject")public R addSubject(MultipartFile file) {//上传过来excel文件subjectService.saveSubject(file,subjectService);return R.ok();}}

5.service serviceImpl

package com.kaki.serviceedu.service;import com.kaki.serviceedu.entity.EduSubject;
import com.baomidou.mybatisplus.extension.service.IService;
import org.springframework.web.multipart.MultipartFile;/*** <p>* 课程科目 服务类* </p>** @author kaki* @since 2021-02-28*/
public interface EduSubjectService extends IService<EduSubject> {void saveSubject(MultipartFile file,EduSubjectService eduSubjectService);
}
package com.kaki.serviceedu.service.impl;import com.alibaba.excel.EasyExcel;
import com.kaki.serviceedu.entity.EduSubject;
import com.kaki.serviceedu.entity.excel.SubjectData;
import com.kaki.serviceedu.listener.SubjectListener;
import com.kaki.serviceedu.mapper.EduSubjectMapper;
import com.kaki.serviceedu.service.EduSubjectService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.InputStream;/*** <p>* 课程科目 服务实现类* </p>** @author kaki* @since 2021-02-28*/
@Service
public class EduSubjectServiceImpl extends ServiceImpl<EduSubjectMapper, EduSubject> implements EduSubjectService {@Overridepublic void saveSubject(MultipartFile file,EduSubjectService eduSubjectService) {try{InputStream in = file.getInputStream();//new 监听器实例时传入service对象  因为监听器类不能交给spring管理 不能使用注解的方式注入service 对象//所以在这里通过监听器的有参构造方法传入service对象EasyExcel.read(in, SubjectData.class,new SubjectListener(eduSubjectService)).sheet().doRead();//传入excel文件对应的实体类 SubjectData.class}catch(Exception e){e.printStackTrace();}}
}

5.监听器类

package com.kaki.serviceedu.listener;import com.alibaba.excel.context.AnalysisContext;
import com.alibaba.excel.event.AnalysisEventListener;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kaki.servicebase.exceptionhandler.MyException;
import com.kaki.serviceedu.entity.EduSubject;
import com.kaki.serviceedu.entity.excel.SubjectData;
import com.kaki.serviceedu.service.EduSubjectService;//传入泛型  泛型是要读取的文件对应的实体类
public class SubjectListener extends AnalysisEventListener<SubjectData> {//因为这个类不能交给spring管理 需要我们自己手动new 所以不能使用注解来注入各层的对象//不注入对象的话 就不能操作数据库  所以在这里我们自己手动传入service对象private EduSubjectService eduSubjectService;//创建有参构造和无参构造public SubjectListener(EduSubjectService eduSubjectService) {this.eduSubjectService = eduSubjectService;}public SubjectListener(){}//EduSubject实体类对应的是数据库中edu_subject这张表//SubjectData实体类对应的是上传的课程信息的文件/***   一行一行的读取数据 读一行解析一行  每一行有两个数据 第一个数据是一级课程名 第二个数据是二级课程名* @param subjectData* @param analysisContext*/@Overridepublic void invoke(SubjectData subjectData, AnalysisContext analysisContext) {if(subjectData == null){throw new MyException(20001,"文件数据为空");}EduSubject eduOneSubject = existOneSubject(subjectData.getOneSubjectName());if(eduOneSubject == null){//说明数据库中不存在和文件中读取的一级课程一样的课程eduOneSubject = new EduSubject();eduOneSubject.setParentId("0");eduOneSubject.setTitle(subjectData.getOneSubjectName());eduSubjectService.save(eduOneSubject);//向数据库中添加完一级课程后  根据主键策略 会自动生成一级课程的id}//获取一级课程的idString pid = eduOneSubject.getId();//对于类内部的成员函数 在其中使用私有的成员数据时  不需要加this  但如果存在同名的临时变量 则需要加this//但是下面这一句 我不加this也没有报错EduSubject existTwoSubject = this.existTwoSubject(subjectData.getTwoSubjectName(),pid);//  EduSubject eduTwoSubject = existTwoSubject(subjectData.getTwoSubjectName(),pid);if(existTwoSubject == null){existTwoSubject = new EduSubject();existTwoSubject.setTitle(subjectData.getTwoSubjectName());existTwoSubject.setParentId(pid);eduSubjectService.save(existTwoSubject);//如果一级课程对应的所有二级课程没有和文件中读取的二级课程重复的 则添加//不同的一级课程对应的二级课程中可能存在重名的  同样的一级课程中对应的二级课程不能重名}}//解析完成后执行这个方法@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {}/***   判断数据库中是否已经存在一级标题 避免重复添加* @return*///那个老师还在这个方法传入了EduSubjectService eduSubjectService 我觉的不用传啊  反正私有成员方法也可以//访问到成员变量不是吗private EduSubject existOneSubject(String name){QueryWrapper<EduSubject> wrapper = new QueryWrapper<>();wrapper.eq("title",name);wrapper.eq("parent_id","0");//一级课程的父id为0EduSubject eduSubject = eduSubjectService.getOne(wrapper);return eduSubject;}/***   判断数据库中是否已经存在二级标题 避免重复添加* @return*/private EduSubject existTwoSubject(String name,String pid){QueryWrapper<EduSubject> wrapper = new QueryWrapper<>();wrapper.eq("title",name);wrapper.eq("parent_id",pid);//二级课程的父idEduSubject eduSubject = eduSubjectService.getOne(wrapper);return eduSubject;}
}

6.在swagger中进行测试

在这里插入图片描述
在这里插入图片描述excel中的文件
在这里插入图片描述测试成功后 数据库中已被添加数据

在这里插入图片描述注:想要在插入数据时自动填充 gmt_create gmt_modified 需要在实体类中该属性上添加

  @ApiModelProperty(value = "创建时间")@TableField(fill = FieldFill.INSERT)//加上这个注解后  还需要写一个类实现MetaObjectHandler接口private Date gmtCreate;@ApiModelProperty(value = "更新时间")@TableField(fill = FieldFill.INSERT_UPDATE)//公共属性的自动填充private Date gmtModified;