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

宁波网站的建设拍婚纱照

宁波网站的建设,拍婚纱照,深圳宝安中学家长群,网站开发服务外包合同目录 一、需求 二、代码实现 父pom文件 pom文件 配置文件 手动注册SqlSessionFactory#xff08;MyBatisConfig #xff09; 对象 实体类Users 抽象类AbstractQuery 查询参数类UsersQuery 三层架构 UsersController UsersServiceImpl UsersMapper UsersMapper.…目录 一、需求 二、代码实现 父pom文件 pom文件 配置文件 手动注册SqlSessionFactoryMyBatisConfig  对象 实体类Users 抽象类AbstractQuery  查询参数类UsersQuery  三层架构 UsersController  UsersServiceImpl  UsersMapper  UsersMapper.xml PageX 注解 MyResponseBodyAdvice  构造返回对象泛型ResponseDto 拦截器PageMethodInterceptor 拦截器注入PageMethodInterceptorConfig  结果展示 一、需求 使用ResponseBodyAdvice做分页处理_骑着蜗牛打天下的博客-CSDN博客 在之前使用过用ResponseBodyAdvice来做分页处理但是我们还可以结合着Aop中的MethodInterceptor拦截器对分页进一步封装 使用ResponseBodyAdvice的做法 这样的做法就是使用ResponseBodyAdvice去拦截controller层返回值然后对返回的page类型的值进行封装成带有 total、pages、body等 而本篇的目的是使用aop拦截器去拦截标注切点的方法然后对此方法进行拦截拦截后就在拦截器内去做 PageHelper.startPage处理然后在controller层返回时再使用ResponseBodyAdvice拦截进一步的把数据给封装 二、代码实现 父pom文件 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactId!-- version3.1.2/version--version2.2.5.RELEASE/versionrelativePath/ !-- lookup parent from repository --/parentgroupIdcom.chensir/groupIdartifactIdspringboot/artifactIdversion0.0.1-SNAPSHOT/versionnamespringboot/namedescriptionspringboot/descriptionpropertiesjava.version8/java.versionhutool.version5.8.3/hutool.versionlombok.version1.18.24/lombok.versionalibaba-sdk.version2.0.0/alibaba-sdk.version/propertiespackagingpom/packagingmodulesmoduleservlet/modulemodulespring-interceptor/modulemodulespring-aop/modulemodulespring-united-reslut/modulemodulespring-jdbc/modulemodulespring-mybatis/modulemodulespring-mybatis-pageX/module/modulesdependencyManagementdependencies!--钉钉机器人消息--dependencygroupIdcom.aliyun/groupIdartifactIdalibaba-dingtalk-service-sdk/artifactIdversion${alibaba-sdk.version}/version/dependencydependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactIdversion${hutool.version}/version/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion${lombok.version}/version/dependency !--父pom中不要加此依赖否则依赖clean会报错原因是父pom中并没指定版本-- !-- dependency-- !-- groupIdorg.springframework.boot/groupId-- !-- artifactIdspring-boot-starter-web/artifactId-- !-- /dependency--!-- dependency-- !-- groupIdorg.springframework.boot/groupId-- !-- artifactIdspring-boot-starter-test/artifactId-- !-- scopetest/scope-- !-- /dependency--/dependencies/dependencyManagementbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/projectpom文件 ?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionparentgroupIdcom.chensir/groupIdartifactIdspringboot/artifactIdversion0.0.1-SNAPSHOT/versionrelativePath../pom.xml/relativePath/parentartifactIdspring-mybatis-pageX/artifactIddependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId/dependencydependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper/artifactIdversion5.1.10/version/dependencydependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion2.1.4/version/dependencydependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdscoperuntime/scope/dependencydependencygroupIdcn.hutool/groupIdartifactIdhutool-all/artifactId/dependencydependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdoptionaltrue/optional/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter-test/artifactIdversion2.1.4/versionscopetest/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdconfigurationexcludesexcludegroupIdorg.projectlombok/groupIdartifactIdlombok/artifactId/exclude/excludes/configuration/plugin/plugins/build/project配置文件 spring.datasource.urljdbc:mysql://localhost/db1?useUnicodetruecharacterEncodingutf8zeroDateTimeBehaviorconvertToNulluseSSLtrueserverTimezoneGMT%2B8autoReconnecttruerewriteBatchedStatementstrue spring.datasource.usernameroot spring.datasource.passwordroot spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driveraop.MethodInterceptor.point annotation(com.chensir.annotation.PageX)手动注册SqlSessionFactoryMyBatisConfig  package com.chensir.config;import com.github.pagehelper.PageInterceptor; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.mybatis.spring.boot.autoconfigure.ConfigurationCustomizer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.io.Resource; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.core.io.support.ResourcePatternResolver; import org.springframework.util.CollectionUtils;import javax.sql.DataSource; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List;Configuration Slf4j public class MyBatisConfig {Autowiredprivate ConfigurationCustomizer configurationCustomizer;/*** 自己注册SqlSessionFactory 目的是增强功能添加分页插件* param ds 代表数据源* return* throws Exception*/Beanpublic SqlSessionFactory sqlSessionFactory(DataSource ds) throws Exception {SqlSessionFactoryBean factoryBean new SqlSessionFactoryBean();// 设置数据源factoryBean.setDataSource(ds);// 把分页插件设置到SqlSessionFactory插件库factoryBean.setPlugins(new PageInterceptor());// 配置mapper.xml地址factoryBean.setMapperLocations(resolveMapperLocations());//驼峰映射注册到SqlSessionFactory中org.apache.ibatis.session.Configuration configuration new org.apache.ibatis.session.Configuration();configurationCustomizer.customize(configuration);factoryBean.setConfiguration(configuration);// 返回具体实例对象SqlSessionFactory bean factoryBean.getObject();return bean;}/*** 开启驼峰映射* return*/Beanpublic ConfigurationCustomizer configurationCustomizer(){return new ConfigurationCustomizer() {Overridepublic void customize(org.apache.ibatis.session.Configuration configuration) {configuration.setMapUnderscoreToCamelCase(true);}};}/*** 查找 xxxMapper.xml* return*/public Resource[] resolveMapperLocations() {ResourcePatternResolver resourceResolver new PathMatchingResourcePatternResolver();ListString mapperLocations new ArrayList();mapperLocations.add(classpath*:mapper/*Mapper.xml); // mapperLocations.add(classpath*:com/meiwei/ping/dao/**/*Mapper.xml);ListResource resources new ArrayList();if (!CollectionUtils.isEmpty(mapperLocations)) {for (String mapperLocation : mapperLocations) {try {Resource[] mappers resourceResolver.getResources(mapperLocation);resources.addAll(Arrays.asList(mappers));} catch (IOException e) {log.error(Get myBatis resources happened exception, e);}}}return resources.toArray(new Resource[resources.size()]);}}对象 实体类Users Data public class Users {private Long id;private String name;private Integer age;private String sex;private String tel;// 数据库timestamp类型时间转化java规定格式时间JsonFormat(timezone GMT8,pattern yyyy-MM-dd)// 接受前端表单传递过来的字符串类型的时间数DateTimeFormat(pattern yyyy-MM-dd)private Date createTime;JsonFormat(timezone GMT8,pattern yyyy-MM-dd)DateTimeFormat(pattern yyyy-MM-dd)private LocalDateTime updateTime; } 抽象类AbstractQuery  public abstract class AbstractQuery implements Serializable {private Integer pageNum 1;private Integer pageSize 10;public Integer getPageNum() {return pageNum;}public void setPageNum(Integer pageNum) {this.pageNum pageNum;}public Integer getPageSize() {return pageSize;}public void setPageSize(Integer pageSize) {this.pageSize pageSize;} } 查询参数类UsersQuery  Data public class UsersQuery extends AbstractQuery {private Long id;private String name;private Integer age;private String sex;private String tel; } 三层架构 UsersController  RestController public class UsersController {Resourceprivate UsersService usersService;PostMapping(/pageQuery)public List selectUsersByPageQuery(RequestBody UsersQuery usersQuery){// 使用MethodInterceptor进行分页 PageX为切点使用地方开启分页处理ListUsers usersList usersService.selectUsersByPageQuery(usersQuery);return usersList;}GetMapping(/demo1)public List selectUsersList(Integer pageNum,Integer pageSize) {// 启用分页查询第一页每页3条PageHelper.startPage(pageNum,pageSize);//-------------PageInfo方式--------------- // PageInfoUsers usersPageInfo new PageInfo(usersService.selectUsersList()); // return usersPageInfo;//-------------PageInfo方式---------------//-------------Page方式--------------- // ListUsers users usersService.selectUsersList(); // Page page (Page) users; // int pages page.getPages(); // long total page.getTotal(); // // // MapString,Object pageMap new HashMap(); // pageMap.put(pages,pages); // pageMap.put(total,total); // pageMap.put(items,users); // return pageMap;//-------------Page方式---------------//-----------使用ResponseBodyAdvice------------ListUsers users usersService.selectUsersList();return users;//-----------使用ResponseBodyAdvice------------}GetMapping(/demo2)public Users selectUsers(){Users users usersService.selectUsers();return users;}GetMapping(/demo3)public Map selectUsersToMap(){return usersService.selectUsersToMap();} }UsersServiceImpl  Service public class UsersServiceImpl implements UsersService {Resourceprivate UsersMapper usersMapper;Overridepublic ListUsers selectUsersList() {return usersMapper.selectUsersList();}Overridepublic Users selectUsers() {return usersMapper.selectUsers();}Overridepublic MapString, Object selectUsersToMap() {return usersMapper.selectUsersToMap();}Overridepublic ListUsers selectUsersByPageQuery(UsersQuery usersQuery) {return usersMapper.selectUsersByPageQuery(usersQuery);} } UsersMapper  Mapper public interface UsersMapper {ListUsers selectUsersList();Users selectUsers();MapString,Object selectUsersToMap();//此接口带有PageX 拦截器会拦截它 然后做分页处理PageXListUsers selectUsersByPageQuery(UsersQuery usersQuery); } UsersMapper.xml ?xml version1.0 encodingUTF-8? !DOCTYPE mapper PUBLIC -//mybatis.org//DTD Mapper 3.0//EN http://mybatis.org/dtd/mybatis-3-mapper.dtd mapper namespacecom.chensir.mapper.UsersMapperselect idselectUsersList resultTypecom.chensir.domain.entity.Usersselect * from users/selectselect idselectUsers resultTypecom.chensir.domain.entity.Usersselect * from users where id 1/selectselect idselectUsersToMap resultTypejava.util.Mapselect * from users where id 1/selectselect idselectUsersByPageQuery resultTypecom.chensir.domain.entity.Usersselect * from userswhere11if testname ! null and name ! and name like concat(%, #{name},%)/if/where/select /mapperPageX 注解 注解来作为切点使用时在配置文件中先配置注入bean时使用value取值然后对带有此注解的方法进行扫描拦截 Deprecated Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) public interface PageX { } MyResponseBodyAdvice  package com.chensir.advice;import cn.hutool.core.lang.Dict; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.github.pagehelper.Page; import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;import javax.servlet.http.HttpServletRequest;// 拦截范围为 com.chensir.controller包下内容 RestControllerAdvice(basePackages {com.chensir.controller}) public class MyResponseBodyAdvice implements ResponseBodyAdvice {// 是否开启拦截 true开启 false不开启Overridepublic boolean supports(MethodParameter methodParameter, Class aClass) {// 此处应该改为true,否则除了异常外 走到此处为false后就直接返回,也不再继续往下走了return true;}// 如果接口返回异常就在此处拦截 进行封装;value Exception.class 对所有的异常均拦截ExceptionHandler(value Exception.class)public Object defaultErrorHandler(HttpServletRequest req, Exception ex){ResponseDtoObject responseDto new ResponseDto();responseDto.setCode(501);responseDto.setMessage(ex.getMessage());return responseDto;}Overridepublic Object beforeBodyWrite(Object body, MethodParameter methodParameter, MediaType mediaType, Class aClass, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) {ResponseDtoObject responseDto new ResponseDto();// 先用hutool定义为nullString message StrUtil.EMPTY;responseDto.setCode(0);responseDto.setMessage(message);if (body instanceof Page){Page page (Page) body;int pages page.getPages();//总页数long total page.getTotal();//总条数Dict dict Dict.create().set(total,total).set(pages,pages).set(item,body);responseDto.setData(dict);}else {responseDto.setData(body);}// 如果是string类型就用json封装一下;if (aClass StringHttpMessageConverter.class) {return JSONUtil.toJsonStr(responseDto);} else {return responseDto;}} }构造返回对象泛型ResponseDtoT // 泛型 Data public class ResponseDtoT implements Serializable {// 返回码(内部拟定)private int code;// 返回信息private String message;private T data; } 拦截器PageMethodInterceptor package com.chensir.interceptor;import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import com.chensir.domain.AbstractQuery; import com.github.pagehelper.PageHelper; import lombok.extern.slf4j.Slf4j; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation;import java.lang.reflect.Method;Slf4j public class PageMethodInterceptor implements MethodInterceptor {Overridepublic Object invoke(MethodInvocation invocation) throws Throwable {// 获取方法Method method invocation.getMethod();//获取参数Object[] arguments invocation.getArguments();//获取第一个参数Object arg0 arguments[0];if (arg0 instanceof AbstractQuery) {AbstractQuery query (AbstractQuery) arg0;Integer pageNum query.getPageNum();//参数 第几页Integer pageSize query.getPageSize();//参数 每页多少条if (ObjectUtil.isNotEmpty(pageNum) ObjectUtil.isNotEmpty(pageSize)) {//走到这肯定要分页了PageHelper.startPage(pageNum,pageSize);}}//获取返回值Object value invocation.proceed();log.info(方法:{},参数{},返回值:{}, method.getName(), JSONUtil.toJsonStr(arguments), value);return value;} }拦截器注入PageMethodInterceptorConfig  advisor.setExpression(point); 拦截切点为PageX的注解 Configuration public class PageMethodInterceptorConfig {Value(${aop.MethodInterceptor.point})private String point;Beanpublic AspectJExpressionPointcutAdvisor aspectJExpressionPointcutAdvisor(){AspectJExpressionPointcutAdvisor advisor new AspectJExpressionPointcutAdvisor();advisor.setAdvice(new PageMethodInterceptor());advisor.setExpression(point);return advisor;} } 结果展示
http://www.yutouwan.com/news/348375/

相关文章:

  • 企业如何对自己的网站进行建设wordpress 新安装 慢
  • evus在哪个网站做登记wordpress自定义背景颜色
  • 重庆巴南区网站开发公司市辖区郑州网站建设
  • 太原本地网站顶部固定网站模板
  • 长春建站培训班专门做各种产品测评的网站
  • 玉溪的网站建设公司品牌策划与设计机构
  • 小红书网站建设内容html在线运行
  • django电影网站开发如何用ps做网站效果图
  • 怎样创建网站网站杭州市建设工程招标投标网
  • 网络营销做私活网站ui网页设计尺寸
  • 徐州在线制作网站wordpress同时登录
  • 网站交易平台建设广安网站建设服务
  • 静态网站站内搜索网站开发最强工具
  • 网站做成软件企业所得税什么时候申报缴纳
  • 合肥网站快速排名提升深圳分销网站设计价格
  • 做食品外贸选哪个网站好制作官网的公司性价比高
  • 站长工具seo综合查询网wordpress流量统计插件下载
  • 做外贸怎么在阿里云建网站网站营销最大的特点
  • 建站品牌大全拓者设计吧首页
  • 网站首页静态化代码怎么做网站免
  • 公考在哪个网站上做试题wordpress西瓜
  • 深圳网站建设需要多少费用乐清建设路小学校园网站
  • 网站界面设计内容邵阳市最新消息
  • 百度商桥在网站做企业官网哪家公司好
  • 工会网站建设方案如何制作橡皮泥 简单
  • 宁波做网站优化的公司怎么样做购物网站
  • 网站建设需要到哪些知识代运营
  • h5网站开发设计杭州网站的制作
  • 网站建设发专业人才培养方案家庭网络做网站
  • 汕头企业网站建设模板网站开发框架系统