springboot 注解_pagehelper分页原理

springboot 注解_pagehelper分页原理案例环境jdk1.8,mysql8.0,idea(工具),springboot,mybatis-plus详情看pom.xml项目结构结构解释项目由网关,公共依赖模块,和商品的优惠券,商品服务,订单服务,仓储服务和会员服务组成(案例测试使用shop-product,common),父工程为聚合工程不作为依赖管理一、common模块(组件可在人人开源项目中获取renrne-fast),common是一个基础maven项目pom.xml(common)<?xm.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

案例环境

jdk1.8, mysql8.0, idea(工具),spring boot ,mybatis-plus详情看pom.xml

项目结构

springboot 注解_pagehelper分页原理

结构解释项目由网关,公共依赖模块,和商品的优惠券,商品服务,订单服务,仓储服务和会员服务组成(案例测试使用shop-product,common),父工程为聚合工程不作为依赖管理

一、common模块(组件可在人人开源项目中获取renrne-fast),common是一个基础maven项目

springboot 注解_pagehelper分页原理

 

pom.xml(common)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>home</artifactId>
        <groupId>com.wangxiang</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>common</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
    <dependencies>
        <!--        实体类工具lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>
        <!--        mybatis-plus整合spring boot-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.3.1</version>
        </dependency>
        <!--        httpcore实现了一套HTTP 协议的基础组件,为构建客户端/代理/服务器端 HTTP 服务一致的 API-->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpcore</artifactId>
            <version>4.4.13</version>
        </dependency>
        <!--        跟java.lang这个包的作用类似,Commons Lang这一组API也是提供一些基础的、通用的操作和处理
                    ,如自动生成toString()的结果、自动实现hashCode()和equals()方法、数组操作、枚举、日期和时间的处理等等。-->
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.6</version>
        </dependency>
        <!--        和上面差不多,类似与Java.io,但比java.io强大-->
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.5</version>
        </dependency>
        <!--        mysql驱动选择8.0,因为可以向下兼容-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.22</version>
        </dependency>
        <!--shiro-core加密,四大功能角色验证 权限管理 加密 session管理-->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-core</artifactId>
            <version>1.4.0</version>
            <scope>compile</scope>
            <!--       对于scope=compile的情况(默认scope),也就是说这个项目在编译,
            测试,运行阶段都需要这个artifact对应的jar包在classpath中     -->
        </dependency>
        <!--        servlet api-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <!--spring默认使用yml中的配置,但有时候要用传统的xml或properties配置,
        就需要使用spring-boot-configuration-processor了-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <version>2.1.18.RELEASE</version>
        </dependency>
        <!--        druid连接池,号称最牛逼的连接池,我以前使用的是c3p0也还不错,-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.13</version>
        </dependency>
        <!--        nacos作为服务注册中心,使用spring-cloud-alibaba-->
<!--        <dependency>-->
<!--            <groupId>com.alibaba.cloud</groupId>-->
<!--            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>-->
<!--        </dependency>-->
<!--        &lt;!&ndash;     naocs作为配置中心   &ndash;&gt;-->
<!--        <dependency>-->
<!--            <groupId>com.alibaba.cloud</groupId>-->
<!--            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>-->
<!--        </dependency>-->

    </dependencies>
    <!--    alibaba版本控制-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.1.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

 二、创建shop_product服务模块,该服务模块为springboot项目

        创建步骤

                1、选中父工程,new一个module

springboot 注解_pagehelper分页原理

                2、选中Spring boot模板,然后填写模块相关信息,然后next

                        注意:Server URL有两个镜像,spring和阿里的,国内使用阿里镜像比较友好

                                spring:  https://start.spring.io/

                                阿里云:https://start.aliyun.com/

springboot 注解_pagehelper分页原理

 

                         3、选择spring boot版本,(习惯使用稳定版2.1.18),然后选着两个基本服务

                                Spring Web (web应用,基础)

                                OpenFeign (远程调研功能,选)

                                然后Finish就可以创建了(如果有需求也可以选择其他服务哦)

springboot 注解_pagehelper分页原理

 基本结构已经创建完毕,接下来就是具体逻辑了

三、逻辑实现

        按照MVC设计模式规范,具体按图

                 其中也使用了工厂模式

springboot 注解_pagehelper分页原理

下面我会按照我的习惯来写

                1、entity层,主要来完成一些对象实体类,在mybatis-plus框架开发中会使用到一些基础注解

        主要有三个(根据数据表)

                @Data (都到spring boot了相信大家对这个注解非常熟悉了)

                @TableName(“xxxx”)这个注解是用来标明该实体类对应的数据表

                @TableId 标注该字段为自增(具体看自己的数据库设计)

                注意代码要实现持久化和反序列

案例代码(entity)

package com.wangxiang.shop.product.entity;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.io.Serializable;
import java.util.Date;
import lombok.Data;

/**
 * 商品三级分类
 * 
 * @author wangxiang
 * @email 2293672863@qq.com
 * @date 2021-11-04 17:49:57
 */
@Data
@TableName("pms_category")
public class CategoryEntity implements Serializable {
	private static final long serialVersionUID = 1L;

	/**
	 * 分类id
	 */
	@TableId
	private Long catId;
	/**
	 * 分类名称
	 */
	private String name;
	/**
	 * 父分类id
	 */
	private Long parentCid;
	/**
	 * 层级
	 */
	private Integer catLevel;
	/**
	 * 是否显示[0-不显示,1显示]
	 */
	private Integer showStatus;
	/**
	 * 排序
	 */
	private Integer sort;
	/**
	 * 图标地址
	 */
	private String icon;
	/**
	 * 计量单位
	 */
	private String productUnit;
	/**
	 * 商品数量
	 */
	private Integer productCount;

}
              2、controller层(控制层,我的习惯是写完实体类,然后写controller,确定具体操作以后再去具体实现)

                该层会用到三个基本注解和一些转换类的注解

                     @RestController   这是一个有@Controller注解衍生而来的注解,该注解内部有

@Controller @ResponseBody两个主要注解

                        @Controller用于标记在一个类上,使用它标记的类就是一个SpringMVC Controller 对象。分发处理器将会扫描使用了该注解的类的方法。通俗来说,被Controller标记的类就是一个控制器,这个类中的方法,就是相应的动作。

                        @ResponseBody的作用其实是将java对象转为json格式的数据。        

                        @RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。比如图一中,跳转到登录页面的路径就是localhost:端口号/product/category/list

                        @Autowired(自动装配)启动spring IoC时,容器自动装载了一个AutowiredAnnotationBeanPostProcessor后置处理器,当容器扫描到@Autowied、@Resource(是CommonAnnotationBeanPostProcessor后置处理器处理的)或@Inject时,就会在IoC容器自动查找需要的bean,并装配给该对象的属性

 

                       注意:

                在使用@Autowired时,首先在容器中查询对应类型的bean

    如果查询结果刚好为一个,就将该bean装配给@Autowired指定的数据

    如果查询的结果不止一个,那么@Autowired会根据名称来查找。

    如果查询的结果为空,那么会抛出异常。解决方法时,使用required=false

                然后就是一些数据转换的注解和一些传递参数的注解

            controller.java    

package com.wangxiang.shop.product.controller;

import java.util.Arrays;
import java.util.Map;

import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.wangxiang.shop.product.entity.CategoryEntity;
import com.wangxiang.shop.product.service.CategoryService;
import com.wangxiang.common.utils.PageUtils;
import com.wangxiang.common.utils.R;



/**
 * 商品三级分类
 *
 * @author wangxiang
 * @email 2293672863@qq.com
 * @date 2021-11-04 17:49:57
 */
@RestController
@RequestMapping("product/category")
public class CategoryController {
    @Autowired
    private CategoryService categoryService;

    /**
     * 列表
     */
    @RequestMapping("/list")
    
    public R list(@RequestParam Map<String, Object> params){
        PageUtils page = categoryService.queryPage(params);

        return R.ok().put("page", page);
    }


    /**
     * 信息
     */
    @RequestMapping("/info/{catId}")
    
    public R info(@PathVariable("catId") Long catId){
		CategoryEntity category = categoryService.getById(catId);

        return R.ok().put("category", category);
    }

    /**
     * 保存
     */
    @RequestMapping("/save")
   
    public R save(@RequestBody CategoryEntity category){
		categoryService.save(category);

        return R.ok();
    }

    /**
     * 修改
     */
    @RequestMapping("/update")
    
    public R update(@RequestBody CategoryEntity category){
		categoryService.updateById(category);

        return R.ok();
    }

    /**
     * 删除
     */
    @RequestMapping("/delete")
    
    public R delete(@RequestBody Long[] catIds){
		categoryService.removeByIds(Arrays.asList(catIds));

        return R.ok();
    }

}

控制层写完就可以开始写dao层了,这一层在使用注解开发中为最简单的一层(使用),只有标记一个@Mapper注解并且继承BaseMapper(BaseMapper又继承了Mapper接口)接口。

        dao层使用的是接口类型,并且不用添加实现类

                @Mapper 从mybatis3.4.0开始加入了@Mapper注解,目的就是为了不再写mapper映射文件,mybatist-plus的宗旨为只mybatis增强而不做修

                @Mapper注解是由Mybatis框架中定义的一个描述数据层接口的注解,注解往往起到的都是一个描述性作用,用于告诉sprigng框架此接口的实现类由Mybatis负责创建,并将其实现类对象存储到spring容器中。


        dao层(接口类型)

package com.wangxiang.shop.product.dao;

import com.wangxiang.shop.product.entity.CategoryEntity;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;

/**
 * 商品三级分类
 * 
 * @author wangxiang
 * @email 2293672863@qq.com
 * @date 2021-11-04 17:49:57
 */
@Mapper
public interface CategoryDao extends BaseMapper<CategoryEntity> {
	
}

        接下来就是最重要的部分service层

                该层由接口和接口的实现类两个部分组成

结构

springboot 注解_pagehelper分页原理

 service接口

        IService的使用需要另外两个接口的配合:baseMapperServiceImpl

package com.wangxiang.shop.product.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.wangxiang.common.utils.PageUtils;
import com.wangxiang.shop.product.entity.CategoryEntity;

import java.util.Map;

/**
 * 商品三级分类
 *
 * @author wangxiang
 * @email 2293672863@qq.com
 * @date 2021-11-04 17:49:57
 */
public interface CategoryService extends IService<CategoryEntity> {

    PageUtils queryPage(Map<String, Object> params);
}

        service接口的实现类

        编写serviceImpl,ServiceImpl里面是各种的方法实现,好奇的可以点进源码看下,两个泛型需要注意的,第一个是继承basemapper的(AdminMapper),第二个是实体类(Admin)。

我们可以参考IService接口解释或者Mybatis-plus官网的方法解释来调用。

@Service(“categoryService”) dubbo提供者服务用于声明对外暴露服务,并且交由spring管理,该注解的解释为当Spring要创建CategoryServiceImpl的的实例时,bean的名字必须叫做”categoryService”,主要作用于业务逻辑层

package com.wangxiang.shop.product.service.impl;

import org.springframework.stereotype.Service;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wangxiang.common.utils.PageUtils;
import com.wangxiang.common.utils.Query;

import com.wangxiang.shop.product.dao.CategoryDao;
import com.wangxiang.shop.product.entity.CategoryEntity;
import com.wangxiang.shop.product.service.CategoryService;


@Service("categoryService")
public class CategoryServiceImpl extends ServiceImpl<CategoryDao, CategoryEntity> implements CategoryService {

    @Override
    public PageUtils queryPage(Map<String, Object> params) {
        IPage<CategoryEntity> page = this.page(
                new Query<CategoryEntity>().getPage(params),
                new QueryWrapper<CategoryEntity>()
        );

        return new PageUtils(page);
    }

}

写完逻辑代码以后就可以配置数据源了,这里我使用号称最牛的连接池druid(德鲁伊)

springboot 注解_pagehelper分页原理

具体配置

appcation.yml

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    #MySQL配置
    driverClassName: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://id地址:3306/shop_product?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
    username: root
    password: root

 以上就基本完成了springboot+mybatis-plus的查询功能(crud其他功能也可类似操作)

查询操作,在浏览器(建议使用Chrome)中输入对应的ip+访问映射路径,返回的数据为json格式

 开发环境使用本地测试,

springboot 注解_pagehelper分页原理

完结撒花!!!!!!


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/164743.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Flash停止支持?不用愁!![通俗易懂]

    Flash停止支持?不用愁!![通俗易懂]2020年的最后一天,Flash华丽谢幕与我们告别……作为一名4399的忠实玩家,真是心痛不已……所以,今天告诉大家几种让Flash重新工作的方式:1.安装“中国版Flash”:目前,中国已经

  • 走进 JDK 之 String「建议收藏」

    走进 JDK 之 String「建议收藏」走进 JDK 之 String

  • python进制转换函数

    python进制转换函数一:二,八,十六进制转十进制注意2进制对应的数值范围只能是0和1,超过范围会报错,8进制和16进制同理。print(int(‘100′,2))#二进制转十进制,int(’20’,2)会报错print(int(’30’,8))#八进制转十进制,int(’80’,8)会报错print(int(‘f0’,16))#十六进制转十进制,int(‘g0’,16)会报错二:十进制转二进制、八进制、十六进制。内置函数bin、oct、hex得到的进制前面会分别带有’0b’,‘0o’,’0x’字符。

  • rpc服务器不可用 dcom 无法使用任何配置的协议与计算机,如何修复Windows上的“RPC服务器不可用”错误?…

    rpc服务器不可用 dcom 无法使用任何配置的协议与计算机,如何修复Windows上的“RPC服务器不可用”错误?…问题:如何修复Windows上的“RPC服务器不可用”错误?有几次我的计算机上出现“RPC服务器不可用”弹出窗口。我不确定它是什么?我该怎么办这个错误?方法/步骤1“RPC服务器不可用”是在任何版本的操作系统上可能出现的Windows错误。它出现在屏幕上的原因有很多,但在大多数情况下,问题与系统通信问题有关。RCP是RemoteProcedureCall的缩写。[1]它是一个允许不同进程之间进…

  • Unity3D协程介绍 以及 使用[通俗易懂]

    Unity3D协程介绍 以及 使用[通俗易懂]作者ChevyRay ,2013年9月28日,snaker7译 原文地址:http://unitypatterns.com/introduction-to-coroutines/在Unity中,协程(Coroutines)的形式是我最喜欢的功能之一,几乎在所有的项目中,我都会使用它来控制运动,序列,以及对象的行为。在这个教程中,我将会说明协程是如何工作的,并且会附上一些例子来介绍

  • 外挂基础_开挂的正确姿势

    外挂基础_开挂的正确姿势一、前言  所谓游戏外挂,其实是一种游戏外辅程序,它可以协助玩家自动产生游戏动作、修改游戏网络数据包以及修改游戏内存数据等,以实现玩家用最少的时间和金钱去完成功力升级和过关斩将。虽然,现在对游戏外挂程序的“合法”身份众说纷纭,在这里我不想对此发表任何个人意见,让时间去

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号