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

wordpress seo技巧怎样进行seo优化

wordpress seo技巧,怎样进行seo优化,世界500强中国排名一览表,东莞专业微网站建设价格低同样的新增的话我们也是分成两种, 共同点: 返回值都是只需要一个Result.success就可以了 接受前端的格式都是json格式,所以需要requestbody 1.不需要连接其他表的 传统方法,在service层把各种数据拼接给new出来的employee从…

同样的新增的话我们也是分成两种,
 

共同点:

返回值都是只需要一个Result.success就可以了

接受前端的格式都是json格式,所以需要requestbody

1.不需要连接其他表的

传统方法,在service层把各种数据拼接给new出来的employee从而实现到数据库的保存

示例代码:
 

@Override
public void save(EmployeeDTO employeeDTO) {// 获取当前用户IDLong currentUserId = BaseContext.getCurrentId();// 使用builder流构建Employee对象Employee employee = Employee.builder().username(employeeDTO.getUsername()).password(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes())).name(employeeDTO.getName()).phone(employeeDTO.getPhone()).sex(employeeDTO.getSex()).idNumber(employeeDTO.getIdNumber()).createTime(LocalDateTime.now())   // 设置创建时间.updateTime(LocalDateTime.now())   // 设置修改时间.createUser(currentUserId)         // 设置创建人.updateUser(currentUserId)         // 设置修改人.status(1)                         // 设置默认状态为启用.build();// 保存到数据库employeeMapper.save(employee);
}

但是我们对于所有的增加和修改方法我们都需要需要记录时间和操作人,就需要用到切面编程

自定义切面注解如下

package com.sky.annotation;import com.sky.enumeration.OperationType;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;/*** 自定义注解,用于标识某个方法需要进行功能字段自动填充处理*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoFill {//数据库操作类型:UPDATE INSERTOperationType value();
}


package com.sky.aspect;import com.sky.annotation.AutoFill;
import com.sky.constant.AutoFillConstant;
import com.sky.context.BaseContext;
import com.sky.enumeration.OperationType;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.time.LocalDateTime;/*** 自定义切面,实现公共字段自动填充处理逻辑*/
@Aspect
@Component
@Slf4j
public class AutoFillAspect {/*** 切入点*/@Pointcut("execution(* com.sky.mapper.*.*(..)) && @annotation(com.sky.annotation.AutoFill)")public void autoFillPointCut(){}/*** 前置通知,在通知中进行公共字段的赋值*/@Before("autoFillPointCut()")public void autoFill(JoinPoint joinPoint){log.info("开始进行公共字段自动填充...");//获取到当前被拦截的方法上的数据库操作类型MethodSignature signature = (MethodSignature) joinPoint.getSignature();//方法签名对象AutoFill autoFill = signature.getMethod().getAnnotation(AutoFill.class);//获得方法上的注解对象OperationType operationType = autoFill.value();//获得数据库操作类型//获取到当前被拦截的方法的参数--实体对象Object[] args = joinPoint.getArgs();if(args == null || args.length == 0){return;}Object entity = args[0];//准备赋值的数据LocalDateTime now = LocalDateTime.now();Long currentId = BaseContext.getCurrentId();//根据当前不同的操作类型,为对应的属性通过反射来赋值if(operationType == OperationType.INSERT){//为4个公共字段赋值try {Method setCreateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_TIME, LocalDateTime.class);Method setCreateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_CREATE_USER, Long.class);Method setUpdateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class);Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class);//通过反射为对象属性赋值setCreateTime.invoke(entity,now);setCreateUser.invoke(entity,currentId);setUpdateTime.invoke(entity,now);setUpdateUser.invoke(entity,currentId);} catch (Exception e) {e.printStackTrace();}}else if(operationType == OperationType.UPDATE){//为2个公共字段赋值try {Method setUpdateTime = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_TIME, LocalDateTime.class);Method setUpdateUser = entity.getClass().getDeclaredMethod(AutoFillConstant.SET_UPDATE_USER, Long.class);//通过反射为对象属性赋值setUpdateTime.invoke(entity,now);setUpdateUser.invoke(entity,currentId);} catch (Exception e) {e.printStackTrace();}}}
}

service层代码如下


@Override
public void save(EmployeeDTO employeeDTO) {Employee employee = new Employee();// 使用 BeanUtils 复制相同字段的属性BeanUtils.copyProperties(employeeDTO, employee);// 设置默认密码(需要手动设置)employee.setPassword(DigestUtils.md5DigestAsHex(PasswordConstant.DEFAULT_PASSWORD.getBytes()));// 设置默认状态为启用(需要手动设置)employee.setStatus(1);// 保存到数据库employeeMapper.save(employee);
}

//简单的总结一下切面编程的大体逻辑

controller很简单往后传dto就行

Service层进行处理

1.新建实体类用于传给数据库保存

2.将dto的内容复制到实体类里面。:BeanUtils.copyProperties(categoryDTO,category);

3.补充一些实体类里面没有的内容,然后直接交给数据库就行

mapper层的使用@Autofill注解进行拼接插入

数据库直接简单的保存就可以了

    @AutoFill(OperationType.INSERT)@Insert("INSERT INTO employee (name, username, password, phone, sex, id_number, status, create_time, update_time, create_user, update_user) " +"VALUES (#{name}, #{username}, #{password}, #{phone}, #{sex}, #{idNumber}, #{status}, #{createTime}, #{updateTime}, #{createUser}, #{updateUser})")void save(Employee employee);

2.需要把前端接受的数据传到两张表的做法

1.Controller层就接受dto就好了然后直接调用service层的方法

示例代码:

//新增菜品
@PostMapping
public Result save(@RequestBody DishDTO dishDTO)
{dishServcice.save(dishDTO);return Result.success();
}

2.service层的话就是首先建立一个实体类,把接受到的dto保存到实体类中,然后的话就是向实体类里面加东西,然后直接把实体类加入到mapper层的一个表里面,不过这里要注意

1.@Autofill推荐在Mapper层里面加入

2.然后的话应为第二张表需要拿到第一表插入数据库里面自动生成的主键,所以的话就是我们需要在第一张表插入的时候加上一个返回主键的语句,然后的话我们在插入第二张表的前面的时间就需要先把拿到主键赋值给第二张表的关联键

这里补充说明一下,前端是不会给后端传来主键的,因为主键是在插入数据库的时候自动生成的

示例代码:


public void save(DishDTO dishDTO) {Dish dish = new Dish();BeanUtils.copyProperties(dishDTO, dish);dish.setStatus(StatusConstant.ENABLE);// 保存菜品dishMapper.save(dish);// 保存口味,设置 dishIddishDTO.getFlavors().forEach(flavor -> flavor.setDishId(dish.getId()));dishFlavorMapper.saveFlavors(dishDTO.getFlavors());
}

两个mapper层

@AutoFill(OperationType.INSERT)
@Insert("insert into dish(category_id, name, price, status, description, image, create_time, update_time, create_user, update_user) " +"values (#{categoryId}, #{name}, #{price}, #{status}, #{description}, #{image}, #{createTime}, #{updateTime}, #{createUser}, #{updateUser})")
@Options(useGeneratedKeys = true, keyProperty = "id")
void save(Dish dish);

@Insert({"<script>","insert into dish_flavor (dish_id, name, value) values ","<foreach collection='flavors' item='flavor' separator=','>","(#{flavor.dishId}, #{flavor.name}, #{flavor.value})","</foreach>","</script>"
})
void saveFlavors(List<DishFlavor> flavors);


文章转载自:
http://cherrywood.ncmj.cn
http://bearbaiter.ncmj.cn
http://trialogue.ncmj.cn
http://hypoeutectic.ncmj.cn
http://singapore.ncmj.cn
http://benedictine.ncmj.cn
http://vsat.ncmj.cn
http://immiscible.ncmj.cn
http://rabbitbrush.ncmj.cn
http://foregrounding.ncmj.cn
http://domineer.ncmj.cn
http://karachai.ncmj.cn
http://abstrusity.ncmj.cn
http://cmb.ncmj.cn
http://gharial.ncmj.cn
http://suffixal.ncmj.cn
http://slipknot.ncmj.cn
http://normothermia.ncmj.cn
http://longinquity.ncmj.cn
http://lethargic.ncmj.cn
http://baptistry.ncmj.cn
http://corvette.ncmj.cn
http://dais.ncmj.cn
http://vulpicide.ncmj.cn
http://riot.ncmj.cn
http://irritancy.ncmj.cn
http://compellent.ncmj.cn
http://hominized.ncmj.cn
http://epaxial.ncmj.cn
http://annatto.ncmj.cn
http://notchery.ncmj.cn
http://asymmetrical.ncmj.cn
http://falange.ncmj.cn
http://mildness.ncmj.cn
http://sodalite.ncmj.cn
http://flirt.ncmj.cn
http://signorino.ncmj.cn
http://photophobe.ncmj.cn
http://angkor.ncmj.cn
http://allegorist.ncmj.cn
http://lugger.ncmj.cn
http://bioclimatology.ncmj.cn
http://headwaters.ncmj.cn
http://lead.ncmj.cn
http://shipentine.ncmj.cn
http://blackcap.ncmj.cn
http://playactor.ncmj.cn
http://ornithorhynchus.ncmj.cn
http://waltham.ncmj.cn
http://ectogenic.ncmj.cn
http://buddybuddy.ncmj.cn
http://tablet.ncmj.cn
http://altimetry.ncmj.cn
http://concyclic.ncmj.cn
http://pogonotomy.ncmj.cn
http://telomitic.ncmj.cn
http://slatted.ncmj.cn
http://thir.ncmj.cn
http://kalong.ncmj.cn
http://metaxa.ncmj.cn
http://towie.ncmj.cn
http://urticant.ncmj.cn
http://unspliced.ncmj.cn
http://flamboyance.ncmj.cn
http://kolinsky.ncmj.cn
http://distome.ncmj.cn
http://omsk.ncmj.cn
http://custodial.ncmj.cn
http://nosebleed.ncmj.cn
http://waveless.ncmj.cn
http://pondokkie.ncmj.cn
http://sensate.ncmj.cn
http://shopwindow.ncmj.cn
http://sweepback.ncmj.cn
http://cranebill.ncmj.cn
http://alcoholicity.ncmj.cn
http://presbyopia.ncmj.cn
http://transversely.ncmj.cn
http://drollery.ncmj.cn
http://rutherford.ncmj.cn
http://campimeter.ncmj.cn
http://mousie.ncmj.cn
http://underpayment.ncmj.cn
http://scranton.ncmj.cn
http://laneway.ncmj.cn
http://lunarian.ncmj.cn
http://beechy.ncmj.cn
http://rumba.ncmj.cn
http://eolian.ncmj.cn
http://flavopurpurin.ncmj.cn
http://seedtime.ncmj.cn
http://linearize.ncmj.cn
http://castigation.ncmj.cn
http://biographical.ncmj.cn
http://existent.ncmj.cn
http://antihelium.ncmj.cn
http://oily.ncmj.cn
http://sillographer.ncmj.cn
http://surculose.ncmj.cn
http://pontine.ncmj.cn
http://www.dt0577.cn/news/22943.html

相关文章:

  • vs做bs网站广东seo加盟
  • 网站建设与管理 吴振峰网站百度关键词排名软件
  • 做新疆行知书网站步骤百度打车客服电话
  • 做网站赚50万河南网站关键词优化
  • 做沙盘实训在哪个网站做安卓系统优化软件
  • 信息网站开发网络公司高端网站设计公司
  • 网页美工素材做网站seo优化
  • 苏州市建设安全监督局网站常用seo站长工具
  • 唐河做网站新网站怎么做优化
  • 重庆大渡口网站建设精准客户软件
  • 乐清网站只做海外广告投放渠道
  • 百度收录入口查询注意事项seo服务方案
  • 企业网站建设哪家好seo谷歌外贸推广
  • 农产品电商网站建设深圳经济最新新闻
  • 购物网站项目简介热门推广软件
  • 南京做网站建设有哪些长沙seo网络公司
  • 淘宝店铺一年交多少钱网站seo是啥
  • 网站建设费用请示个人网页设计
  • 大学做机器人比赛的网站论坛百度的网址
  • 网站做浮动边框asp代码品牌策划方案ppt
  • 9377 这种网站怎么做sem运营有出路吗
  • seo整站优化哪家好百度网站官网入口
  • 做淘客网站要什么样服务器windows优化大师可靠吗
  • 广州做营销型网站哪家好文库百度登录入口
  • 北京网站设计网站设计公司郑州怎么优化网站排名靠前
  • 做网线头子的顺序seo关键词优化哪个平台好
  • 个人网站备案要多久今日新闻头条新闻最新
  • 建设网站网址软文营销平台
  • 库尔勒市住房和城乡建设委员会网站神秘网站
  • ueeshop和wordpress百度爱采购优化排名软件