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

企业官网设计seo文章代写一篇多少钱

企业官网设计,seo文章代写一篇多少钱,网页设计毕业论文题目怎么定,近期国际军事形势本课程全面讲解了Mybatis框架的使用,从快速入门到原理分析再到实战应用。每一个知识点都有案例进行演示学习,最终通过学习你将全面掌握,从而使Mybatis的开发更加的高效,系统学习 通过项目的开发大家应该能发现,单表的C…

本课程全面讲解了Mybatis框架的使用,从快速入门到原理分析再到实战应用。每一个知识点都有案例进行演示学习,最终通过学习你将全面掌握,从而使Mybatis的开发更加的高效,系统学习

通过项目的开发大家应该能发现,单表的CRUD功能代码重复度很高,也没有什么难度。而这部分代码量往往比较大,开发起来比较费时。

因此,目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国内使用较多的一个组件就是MybatisPlus.

MybatisPlus 扩展功能 代码生成 逻辑删除 通用枚举 字段类型处理器 配置加密_软工菜鸡的博客-CSDN博客

4.插件功能

MybatisPlus提供了很多的插件功能,进一步拓展其功能。目前已有的插件有:

  • PaginationInnerInterceptor自动分页
  • TenantLineInnerInterceptor多租户
  • DynamicTableNameInnerInterceptor动态表名
  • OptimisticLockerInnerInterceptor乐观锁
  • IllegalSQLInnerInterceptorsql 性能规范
  • BlockAttackInnerInterceptor防止全表更新与删除

注意:

使用多个分页插件的时候需要注意插件定义顺序,建议使用顺序如下:

  • 多租户,动态表名
  • 分页,乐观锁
  • sql 性能规范,防止全表更新与删除

这里我们以分页插件为里来学习插件的用法。

4.1.分页插件

在未引入分页插件的情况下,MybatisPlus是不支持分页功能的,IServiceBaseMapper中的分页方法都无法正常起效。

所以,我们必须配置分页插件。

4.1.1.配置分页插件

在项目中新建一个配置类:

其代码如下:

package com.itheima.mp.config;import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class MybatisConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {// 初始化核心插件MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 添加分页插件interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));return interceptor;}
}

4.1.2.分页API

编写一个分页查询的测试:

@Test
void testPageQuery() {// 1.分页查询,new Page()的两个参数分别是:页码、每页大小Page<User> p = userService.page(new Page<>(2, 2));// 2.总条数System.out.println("total = " + p.getTotal());// 3.总页数System.out.println("pages = " + p.getPages());// 4.数据List<User> records = p.getRecords();records.forEach(System.out::println);
}

运行的SQL如下:

这里用到了分页参数,Page,即可以支持分页参数,也可以支持排序参数。常见的API如下:

int pageNo = 1, pageSize = 5;
// 分页参数
Page<User> page = Page.of(pageNo, pageSize);
// 排序参数, 通过OrderItem来指定
page.addOrder(new OrderItem("balance", false));userService.page(page);

4.2.通用分页实体

现在要实现一个用户分页查询的接口,接口规范如下:

参数

说明

请求方式

GET

请求路径

/users/page

请求参数

```json

{

"pageNo": 1,

"pageSize": 5,

"sortBy": "balance",

"isAsc": false

}

 |
| 返回值 | ```json
{"total": 100006,"pages": 50003,"list": [{"id": 1685100878975279298,"username": "user_9****","info": {"age": 24,"intro": "英文老师","gender": "female"},"status": "正常","balance": 2000},{"id": 1685100878975279299,"username": "user_9****","info": {"age": 24,"intro": "英文老师","gender": "female"},"status": "正常","balance": 2000}]
}

|

| 特殊说明 | •如果排序字段为空,默认按照更新时间排序

•排序字段不为空,则按照排序字段排序 |

这里需要定义3个实体:

  • PageQuery:分页查询条件的实体,包含分页、排序参数
  • PageDTO:分页结果实体,包含总条数、总页数、当前页数据
  • UserVO:用户页面视图实体

接下来我们就按照WEB开发的过程来实现这个接口。

首先,我们在项目中引入spring-boot-starter-web依赖:

<!-- web依赖 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- hutool 工具包-->
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.11</version>
</dependency>

然后,按alt+8打开service控制台,然后添加一个SpringBoot启动项:

弹窗中选择Spring Boot

弹窗中填写信息:

其中不要忘了配置我们之前添加的数据加密的秘钥。

4.2.1.实体

首先是请求参数的PageQuery实体:

PageQuery是前端提交的查询参数,一般包含四个属性:

  • pageNo:页码
  • pageSize:每页数据条数
  • sortBy:排序字段
  • isAsc:是否升序
package com.itheima.mp.domain.query;import lombok.Data;@Data
public class PageQuery {private Integer pageNo;private Integer pageSize;private String sortBy;private Boolean isAsc;
}

然后我们定义一个UserVO实体:

代码如下:

package com.itheima.mp.domain.vo;import com.itheima.mp.domain.po.UserInfo;
import com.itheima.mp.enums.UserStatus;
import lombok.Data;@Data
public class UserVO {/*** 用户id*/private Long id;/*** 用户名*/private String username;/*** 详细信息*/private UserInfo info;/*** 使用状态(1正常 2冻结)*/private UserStatus status;/*** 账户余额*/private Integer balance;
}

最后,则是分页实体PageDTO:

代码如下:

package com.itheima.mp.domain.dto;import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.List;@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageDTO<T> {private Integer total;private Integer pages;private List<T> list;
}

4.2.2.开发接口

我们定义一个UserController,在controller中我们定义分页查询用户的接口:

package com.itheima.mp.controller;import com.itheima.mp.domain.dto.PageDTO;
import com.itheima.mp.domain.query.PageQuery;
import com.itheima.mp.domain.vo.UserVO;
import com.itheima.mp.service.UserService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@RequestMapping("users")
@RequiredArgsConstructor
public class UserController {private final UserService userService;@GetMapping("/page")public PageDTO<UserVO> queryUserByPage(PageQuery query){return userService.queryUserByPage(query);}
}

然后在UserService中创建queryUserByPage方法:

PageDTO<UserVO> queryUserByPage(PageQuery query);

接下来,在UserServiceImpl中实现该方法:

@Override
public PageDTO<UserVO> queryUserByPage(PageQuery query) {// 1.构建条件// 1.1.分页条件Page<User> page = Page.of(query.getPageNo(), query.getPageSize());// 1.2.排序条件if (query.getSortBy() != null) {page.addOrder(new OrderItem(query.getSortBy(), query.getIsAsc()));}else{// 默认按照更新时间排序page.addOrder(new OrderItem("update_time", false));}// 2.查询page(page);// 3.数据非空校验List<User> records = page.getRecords();if (records == null || records.size() <= 0) {// 无数据,返回空结果return new PageDTO<>(page.getTotal(), page.getPages(), Collections.emptyList());}// 4.有数据,转换List<UserVO> list = BeanUtil.copyToList(records, UserVO.class);// 5.封装返回return new PageDTO<UserVO>(page.getTotal(), page.getPages(), list);
}

最后,为了让UserStatus枚举可以展示为文字描述,再给UserStatus中的desc字段添加@JsonValue注解:

启动项目,在页面查看:

4.2.3.改造PageQuery实体

在刚才的代码中,从PageQueryMybatisPlusPage之间转换的过程还是比较麻烦的。

我们完全可以在PageQuery这个实体中定义一个工具方法,简化开发。

像这样:

package com.itheima.mp.domain.query;import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.Data;@Data
public class PageQuery {private Integer pageNo;private Integer pageSize;private String sortBy;private Boolean isAsc;public <T>  Page<T> toMpPage(OrderItem ... orders){// 1.分页条件Page<T> p = Page.of(pageNo, pageSize);// 2.排序条件// 2.1.先看前端有没有传排序字段if (sortBy != null) {p.addOrder(new OrderItem(sortBy, isAsc));return p;}// 2.2.再看有没有手动指定排序字段if(orders != null){p.addOrder(orders);}return p;}public <T> Page<T> toMpPage(String defaultSortBy, boolean isAsc){return this.toMpPage(new OrderItem(defaultSortBy, isAsc));}public <T> Page<T> toMpPageDefaultSortByCreateTimeDesc() {return toMpPage("create_time", false);}public <T> Page<T> toMpPageDefaultSortByUpdateTimeDesc() {return toMpPage("update_time", false);}
}

这样我们在开发也时就可以省去对从PageQueryPage的的转换:

// 1.构建条件
Page<User> page = query.toMpPageDefaultSortByCreateTimeDesc();

4.2.4.改造PageDTO实体

在查询出分页结果后,数据的非空校验,数据的vo转换都是模板代码,编写起来很麻烦。

我们完全可以将其封装到PageDTO的工具方法中,简化整个过程:

package com.itheima.mp.domain.dto;import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;import java.util.Collections;
import java.util.List;
import java.util.function.Function;
import java.util.stream.Collectors;@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageDTO<V> {private Long total;private Long pages;private List<V> list;/*** 返回空分页结果* @param p MybatisPlus的分页结果* @param <V> 目标VO类型* @param <P> 原始PO类型* @return VO的分页对象*/public static <V, P> PageDTO<V> empty(Page<P> p){return new PageDTO<>(p.getTotal(), p.getPages(), Collections.emptyList());}/*** 将MybatisPlus分页结果转为 VO分页结果* @param p MybatisPlus的分页结果* @param voClass 目标VO类型的字节码* @param <V> 目标VO类型* @param <P> 原始PO类型* @return VO的分页对象*/public static <V, P> PageDTO<V> of(Page<P> p, Class<V> voClass) {// 1.非空校验List<P> records = p.getRecords();if (records == null || records.size() <= 0) {// 无数据,返回空结果return empty(p);}// 2.数据转换List<V> vos = BeanUtil.copyToList(records, voClass);// 3.封装返回return new PageDTO<>(p.getTotal(), p.getPages(), vos);}/*** 将MybatisPlus分页结果转为 VO分页结果,允许用户自定义PO到VO的转换方式* @param p MybatisPlus的分页结果* @param convertor PO到VO的转换函数* @param <V> 目标VO类型* @param <P> 原始PO类型* @return VO的分页对象*/public static <V, P> PageDTO<V> of(Page<P> p, Function<P, V> convertor) {// 1.非空校验List<P> records = p.getRecords();if (records == null || records.size() <= 0) {// 无数据,返回空结果return empty(p);}// 2.数据转换List<V> vos = records.stream().map(convertor).collect(Collectors.toList());// 3.封装返回return new PageDTO<>(p.getTotal(), p.getPages(), vos);}
}

最终,业务层的代码可以简化为:

@Override
public PageDTO<UserVO> queryUserByPage(PageQuery query) {// 1.构建条件Page<User> page = query.toMpPageDefaultSortByCreateTimeDesc();// 2.查询page(page);// 3.封装返回return PageDTO.of(page, UserVO.class);
}

如果是希望自定义PO到VO的转换过程,可以这样做:

@Override
public PageDTO<UserVO> queryUserByPage(PageQuery query) {// 1.构建条件Page<User> page = query.toMpPageDefaultSortByCreateTimeDesc();// 2.查询page(page);// 3.封装返回return PageDTO.of(page, user -> {// 拷贝属性到VOUserVO vo = BeanUtil.copyProperties(user, UserVO.class);// 用户名脱敏String username = vo.getUsername();vo.setUsername(username.substring(0, username.length() - 2) + "**");return vo;});
}

最终查询的结果如下:

非常感谢您阅读到这里,创作不易!如果这篇文章对您有帮助,希望能留下您的点赞👍 关注💖 收藏 💕评论💬感谢支持!!!

听说 三连能够给人 带来好运!更有可能年入百w,进入大厂,上岸


文章转载自:
http://aegyptus.hnsdj.cn
http://anthologize.hnsdj.cn
http://attainability.hnsdj.cn
http://aerolite.hnsdj.cn
http://basset.hnsdj.cn
http://cedarn.hnsdj.cn
http://barge.hnsdj.cn
http://adzuki.hnsdj.cn
http://azathioprine.hnsdj.cn
http://afs.hnsdj.cn
http://analcime.hnsdj.cn
http://breeching.hnsdj.cn
http://bruges.hnsdj.cn
http://cariostatic.hnsdj.cn
http://biocytinase.hnsdj.cn
http://angaraland.hnsdj.cn
http://acoustician.hnsdj.cn
http://actinolite.hnsdj.cn
http://beady.hnsdj.cn
http://appetiser.hnsdj.cn
http://antebellum.hnsdj.cn
http://blastissimo.hnsdj.cn
http://arbitrary.hnsdj.cn
http://chastely.hnsdj.cn
http://almsdeed.hnsdj.cn
http://canaliculus.hnsdj.cn
http://amateurish.hnsdj.cn
http://ablate.hnsdj.cn
http://chipewyan.hnsdj.cn
http://bestiary.hnsdj.cn
http://bier.hnsdj.cn
http://cher.hnsdj.cn
http://ash.hnsdj.cn
http://banda.hnsdj.cn
http://castigation.hnsdj.cn
http://chord.hnsdj.cn
http://abyss.hnsdj.cn
http://brackish.hnsdj.cn
http://angledozer.hnsdj.cn
http://aloysius.hnsdj.cn
http://affiliated.hnsdj.cn
http://blasphemous.hnsdj.cn
http://aureate.hnsdj.cn
http://adenology.hnsdj.cn
http://chesty.hnsdj.cn
http://cataract.hnsdj.cn
http://aomen.hnsdj.cn
http://carding.hnsdj.cn
http://assonate.hnsdj.cn
http://accentuate.hnsdj.cn
http://anteporch.hnsdj.cn
http://astyanax.hnsdj.cn
http://anilide.hnsdj.cn
http://bridget.hnsdj.cn
http://caecilian.hnsdj.cn
http://christ.hnsdj.cn
http://biestings.hnsdj.cn
http://anomalure.hnsdj.cn
http://boon.hnsdj.cn
http://catalyzer.hnsdj.cn
http://bespoke.hnsdj.cn
http://bestial.hnsdj.cn
http://asphaltite.hnsdj.cn
http://apocarp.hnsdj.cn
http://carburize.hnsdj.cn
http://barrage.hnsdj.cn
http://antipole.hnsdj.cn
http://brookite.hnsdj.cn
http://amiss.hnsdj.cn
http://aileron.hnsdj.cn
http://calculability.hnsdj.cn
http://camisade.hnsdj.cn
http://carcinoid.hnsdj.cn
http://along.hnsdj.cn
http://brasses.hnsdj.cn
http://apepsia.hnsdj.cn
http://bacteriolysin.hnsdj.cn
http://afric.hnsdj.cn
http://carborundum.hnsdj.cn
http://bemud.hnsdj.cn
http://chalcogen.hnsdj.cn
http://bonsai.hnsdj.cn
http://blacksnake.hnsdj.cn
http://assur.hnsdj.cn
http://cassab.hnsdj.cn
http://camarilla.hnsdj.cn
http://axiom.hnsdj.cn
http://adoptability.hnsdj.cn
http://aeronef.hnsdj.cn
http://amidase.hnsdj.cn
http://acl.hnsdj.cn
http://assistance.hnsdj.cn
http://avestan.hnsdj.cn
http://autokinetic.hnsdj.cn
http://assyriologist.hnsdj.cn
http://carrolline.hnsdj.cn
http://alated.hnsdj.cn
http://anticoherer.hnsdj.cn
http://cenogenetic.hnsdj.cn
http://amphigouri.hnsdj.cn
http://www.tj-hxxt.cn/news/25306.html

相关文章:

  • 传媒公司做网站编辑_如何?四年级小新闻50字左右
  • 网站建设消费调查问卷贵阳百度推广电话
  • 上海做网站推荐seo咨询推广
  • 网站维护提示怎么做体验营销策略有哪些
  • 如何建立网站教材新闻投稿
  • 深圳南山网站开发关键词排名优化怎么做
  • 网站设计报价高级搜索入口
  • 有哪些做平面设计好的网站有哪些内容嘉兴网站建设制作
  • 做微商网站网站排名点击工具
  • 上海科技网站设计建设软文网站
  • 丹徒建设网官方网站福州网站建设
  • dedecms网站怎么搬家今日最新足球推荐
  • 建设单位经常去哪个网站潍坊网站排名提升
  • 万网如何上传网站赣州网站建设
  • 网站建设中图片怎么样软文营销的本质
  • 中企动力科技股份有限公司西安分公司国内seo排名分析主要针对百度
  • 网站建设哪里有seo综合
  • 网站制作 意向单毛戈平化妆培训学校官网
  • 政府网站制作网站数据分析案例
  • 旅游网站系统微信群二维码推广平台
  • 汕头多语种网站制作代运营一般收费
  • 竞价网站转化率为多少青岛网站建设技术外包
  • 郑州哪里做网站最好seo优化推广专员招聘
  • 找施工方案上哪个网站百度官方客服
  • 上海关键词优化推荐汕头seo推广外包
  • 找别人做网站靠谱吗网络优化工程师有前途吗
  • 什么网站可以做视频剪辑的兼职潍坊关键词优化软件
  • 黑客收徒网站建设关键词网站排名软件
  • 北京城乡住房建设部网站福州百度关键词优化
  • 怎么给公司做网站奶茶软文案例300字