MyBatisPlus(基于starter和Bean方式)

2023-05-16

文章目录

        • 基于boot-starter方式
        • 基于Bean方式

基于boot-starter方式

1、【microboot项目】修改配置文件,引入所需要的相关依赖库:
dependences.gradle

ext.versions = [    // 定义所有要使用的版本号
        springboot                          : '2.4.3', // SpringBoot版本号
        junit                               : '5.7.1', // 配置JUnit测试工具的版本编号
        junitPlatformLauncher               : '1.7.1',  // JUnit测试工具运行平台版本编号
        lombok                              : '1.18.18', // Lombok插件对应的版本号
        mysql                               : '8.0.25', // MySQL驱动的版本
        druid                               : '1.2.6', // Druid版本
        mybatisplus                         : '3.4.3', // Mybatis-plus-SpringBoot整合依赖
]
ext.libraries = [   // 定义所有的依赖库
        'spring-boot-gradle-plugin': "org.springframework.boot:spring-boot-gradle-plugin:${versions.springboot}",
        // 以下的配置为与项目用例测试有关的依赖
        'junit-jupiter-api': "org.junit.jupiter:junit-jupiter-api:${versions.junit}",
        'junit-vintage-engine': "org.junit.vintage:junit-vintage-engine:${versions.junit}",
        'junit-jupiter-engine': "org.junit.jupiter:junit-jupiter-engine:${versions.junit}",
        'junit-platform-launcher': "org.junit.platform:junit-platform-launcher:${versions.junitPlatformLauncher}",
        'junit-bom': "org.junit:junit-bom:${versions.junit}",
        // 以下的配置为Lombok组件有关的依赖
        'lombok': "org.projectlombok:lombok:${versions.lombok}",
        // 以下的配置为数据库开发所需要的依赖:
        'mysql-connector-java': "mysql:mysql-connector-java:${versions.mysql}",
        'druid-spring-boot-starter': "com.alibaba:druid-spring-boot-starter:${versions.druid}",
        'spring-jdbc': "org.springframework:spring-jdbc:${versions.springJdbc}",
        'druid': "com.alibaba:druid:${versions.druid}",
        // 以下的配置为MyBatis开发框架所需要的依赖:
         'mybatis-plus-boot-starter': "com.baomidou:mybatis-plus-boot-starter:${versions.mybatisPlus}",
]

build.gradle

project('microboot-database') { // 子模块
    dependencies { // 配置子模块依赖
    	compile(project(':microboot-common')) // 引入其他子模块
        compile(libraries.'mysql-connector-java')
        compile(libraries.'druid') // 添加原始依赖
        compile(libraries.'mybatis-plus-boot-starter')
    }
}

2、【microboot-database子模块】application.yml

spring:
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource # 配置数据源的类型
    driver-class-name: com.mysql.cj.jdbc.Driver # MySQL8之后的驱动
    url: jdbc:mysql://localhost:3306/yootk # 数据库的JDBC连接地址
    username: root # 用户名
    password: mysqladmin # 密码
    druid: # 定义数据库连接池所需要的相关配置项
      initial-size: 5 # 初始化连接池大小
      min-idle: 10 # 最小维持的连接池大小
      max-active: 50 # 最大可提供的连接数量
      max-wait: 60000 # 最长等待时间
      time-between-eviction-runs-millis: 6000 # 关闭空闲连接间隔(毫秒)
      min-evictable-idle-time-millis: 30000 # 连接最小的生存时间
      validation-query: SELECT 1 FROM dual # 数据库的状态检测
      test-while-idle: true # 判断连接是否可用
      test-on-borrow: false # 在获得连接之前是否要进行测试
      test-on-return: false # 归还连接前是否需要进行测试
      pool-prepared-statements: false # 不缓存PSTMT
      max-pool-prepared-statement-per-connection-size: 20 # 配置PSTMT缓存个数
      
mybatis-plus:
  config-location: classpath:META-INF/mybatis/mybatis.cfg.xml # mybatis配置文件所在路径
  type-aliases-package: com.yootk.vo  # 定义所有操作类的别名所在包
  mapper-locations: classpath:META-INF/mybatis/mapper/**/*.xml # 所有的mapper映射文件
  global-config: # 全局配置
    db-config: //
      logic-not-delete-value: 0 # 数据删除前
      logic-delete-value: 1 # 数据删除后

此时在member表中存在有一个isdel字段,那么这个字段的内容就是逻辑删除项,如果是O(false)表示未删除,如果是1 (true)表示删除操作。

3、【microboot-database子模块】修改 Member程序类,追加逻辑删除的配置项:

package com.yootk.vo;

import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.util.Date;

@Data
@TableName("member") // 定义该VO类对应的数据表名称
public class Member {
    @TableId // 配置主键列
    private String mid;
    private String name;
    private Integer age;
    private Double salary;
    private Date birthday;
    private String content;
    @TableLogic // 逻辑删除处理
    private Integer isdel; // 逻辑删除字段
}

4、【microboot-database子模块】创建IMemberDAO接口实现member数据表的配置

package com.yootk.dao;

import com.yootk.vo.Member;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface IMemberDAO { // 定义DAO接口
    public List<Member> findAll(); // 查询全部
}

5、 【microboot-database子模块】分页配置

package com.yootk.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 MybatisPlusConfig { // Mybatis拦截器配置
    @Bean
    public MybatisPlusInterceptor getMybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(
                new PaginationInnerInterceptor(DbType.MYSQL) // 使用MySQL分页实现
        );
        return interceptor;
    }
}

6、 【microboot-database子模块】修改IMemberDAO数据接口,要存在有继承的父接口

package com.yootk.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yootk.vo.Member;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

@Mapper
public interface IMemberDAO extends BaseMapper<Member> { // 定义DAO接口
    public List<Member> findAll(); // 查询全部,这个方法一定要存在有映射实现
}

7、【microboot-database子模块】修改IMemberService 业务接口,在该接口之中实现核心的CRUD数据处理操作

package com.yootk.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yootk.vo.Member;

import java.util.List;
import java.util.Set;

public interface IMemberService {
    public List<Member> list();
    public Member get(String mid); // 根据ID查询
    public boolean add(Member vo); // 增加数据
    public boolean delete(Set<String> ids); // 数据删除
    public Map<String, Object> listSplit(String column, String keyword,
                                   Integer currentPage, Integer lineSize); // 分页查询
}

8、【microboot-database子模块】MemberServiceImpl

package com.yootk.service.impl.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yootk.dao.IMemberDAO;
import com.yootk.service.IMemberService;
import com.yootk.vo.Member;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Set;

@Service
public class MemberServiceImpl implements IMemberService {
    @Autowired
    private IMemberDAO memberDAO;

    @Override
    public List<Member> list() {
        return this.memberDAO.findAll();
    }

    @Override
    public Member get(String mid) {
        return this.memberDAO.selectById(mid);
    }

    @Override
    public boolean add(Member vo) {
        return this.memberDAO.insert(vo) > 0;
    }

    @Override
    public boolean delete(Set<String> ids) {
        return this.memberDAO.deleteBatchIds(ids) == ids.size();
    }

    @Override
    public Map<String, Object> listSplit(String column, String keyword, Integer currentPage, Integer lineSize) {
        QueryWrapper<Member> wrapper = new QueryWrapper<>();
        wrapper.like(column, keyword); // 设置模糊查询操作
        int count = this.memberDAO.selectCount(wrapper); // 统计个数
        // 实现数据的查询处理
        IPage<Dept> page = this.memberDAO.selectPage(new Page<>(currentPage, lineSize, count), wrapper);
        Map<String, Object> map = new HashMap<>(); // 包装返回结果
        map.put("allMembers", page.getRecords()); //数据记录
        map.put("allRecorders", page.getTotal());  //总数
        map.put("allPages", page.getPages());  //页数
        return map;
    }
}

9、【microboot-database子模块】编写一个测试类,对当前的业务接口的功能进行测试

package com.yootk.test;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yootk.StartSpringBootDatabaseApplication;
import com.yootk.service.IMemberService;
import com.yootk.vo.Member;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.web.WebAppConfiguration;

import java.util.Date;
import java.util.Set;

@ExtendWith(SpringExtension.class) // 使用JUnit5测试工具
@WebAppConfiguration // 启动WEB运行环境
@SpringBootTest(classes = StartSpringBootDatabaseApplication.class) // 配置程序启动类
public class TestMemberService { // 编写测试类
    @Autowired
    private IMemberService memberService;

    @Test
    public void testFindAll() {
        System.out.println(this.memberService.list());
    }

    @Test
    public void testGet() {
        System.out.println(this.memberService.get("yootk"));
    }

    @Test
    public void testAdd() {
        Member vo = new Member();
        vo.setMid("yootk - " + Math.random());
        vo.setName("沐言科技");
        vo.setBirthday(new Date());
        vo.setSalary(865.0);
        vo.setContent("www.yootk.com");
        vo.setAge(16);
        System.out.println(this.memberService.add(vo));
    }

    @Test
    public void testSplit() {
        Map<String, Object> map = this.memberService.listSplit("name", "沐言", 1, 5);
        System.out.println("总页数:" + map.get(allPages));
        System.out.println("总记录数:" + map.get(allRecorders));
        System.out.println("响应内容:" + map.get(allMembers));
    }
    @Test
    public void testDelete() {
        Set<String> ids = Set.of("muyan", "yootk", "lixinghua");
        this.memberService.delete(ids);
    }
}

10、【microboot-database子模块】

package com.yootk.action;

import com.yootk.common.action.abs.AbstractBaseAction;
import com.yootk.service.IMemberService;
import com.yootk.vo.Member;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

@RestController
@RequestMapping("/member/*")
@Slf4j
public class MemberAction extends AbstractBaseAction {
    @Autowired
    private IMemberService memberService;
    @RequestMapping("list")
    public Object list() {
        log.info("查询全部Member数据。");
        return this.memberService.list();
    }
    @RequestMapping("get")
    public Object get(String mid) {
        log.info("查询用户数据:{}", mid);
        return this.memberService.get(mid);
    }
    @RequestMapping("add")
    public Object add(Member member) {
        log.info("增加新的用户数据:{}", member);
        return this.memberService.add(member);
    }
    @RequestMapping("delete")
    public Object delete(String ... id) {
        log.info("根据ID删除数据:{}", id);
        Set<String> ids = new HashSet<>();
        ids.addAll(Arrays.asList(id));
        return this.memberService.delete(ids);
    }
    @RequestMapping("split")
    public Map<String, Object> split(String column, String keyword, int currentPage, int lineSize) {
        log.info("数据分页显示,查询模糊列:{}、查询关键字:{}、当前页:{}、每页行数:{}");
        return this.memberService.listSplit(column, keyword, currentPage, lineSize);
    }
}

基于Bean方式

现在为止实现的Mybatis 整个的流程都是基于starter组件“mybatis-plus-boot-starter”实现的,所以所有的配置项只需要在 application.yml里面进行定义即可,但是除了这种操作之外,也可以直接基于Bean的模式手工配置。

1、【microboot项目】修改配置文件,引入所需要的相关依赖库:
dependences.gradle

ext.versions = [    // 定义所有要使用的版本号
        springboot                          : '2.4.3', // SpringBoot版本号
        junit                               : '5.7.1', // 配置JUnit测试工具的版本编号
        junitPlatformLauncher               : '1.7.1',  // JUnit测试工具运行平台版本编号
        lombok                              : '1.18.18', // Lombok插件对应的版本号
        mysql                               : '8.0.25', // MySQL驱动的版本
        druid                               : '1.2.6', // Druid版本
        mybatisplus                         : '3.4.3', // Mybatis-plus-SpringBoot整合依赖
]
ext.libraries = [   // 定义所有的依赖库
        'spring-boot-gradle-plugin': "org.springframework.boot:spring-boot-gradle-plugin:${versions.springboot}",
        // 以下的配置为与项目用例测试有关的依赖
        'junit-jupiter-api': "org.junit.jupiter:junit-jupiter-api:${versions.junit}",
        'junit-vintage-engine': "org.junit.vintage:junit-vintage-engine:${versions.junit}",
        'junit-jupiter-engine': "org.junit.jupiter:junit-jupiter-engine:${versions.junit}",
        'junit-platform-launcher': "org.junit.platform:junit-platform-launcher:${versions.junitPlatformLauncher}",
        'junit-bom': "org.junit:junit-bom:${versions.junit}",
        // 以下的配置为Lombok组件有关的依赖
        'lombok': "org.projectlombok:lombok:${versions.lombok}",
        // 以下的配置为数据库开发所需要的依赖:
        'mysql-connector-java': "mysql:mysql-connector-java:${versions.mysql}",
        'druid-spring-boot-starter': "com.alibaba:druid-spring-boot-starter:${versions.druid}",
        'spring-jdbc': "org.springframework:spring-jdbc:${versions.springJdbc}",
        'druid': "com.alibaba:druid:${versions.druid}",
        // 以下的配置为MyBatis开发框架所需要的依赖:
        'mybatis-plus': "com.baomidou:mybatis-plus:${versions.mybatisPlus}",
        //'mybatis-plus-boot-starter': "com.baomidou:mybatis-plus-boot-starter:${versions.mybatisPlus}",
]
project('microboot-database') { // 子模块
    dependencies { // 配置子模块依赖
        compile(project(':microboot-common')) // 引入其他子模块
        compile(libraries.'druid') // 添加原始依赖
        compile(libraries.'mysql-connector-java')
        // compile(libraries.'druid-spring-boot-starter') // 删除掉此依赖库配置
        compile(libraries.'mybatis-plus')
    }
}

2、【microboot项目】如果要想进行Bean的配置,则一些相关的配置内容也应该定义在资源文件里面,那么本次就直接继续使用之前自动配置时所提供的配置项:

mybatis-plus:
  config-location: classpath:META-INF/mybatis/mybatis.cfg.xml # mybatis配置文件所在路径
  type-aliases-package: com.yootk.vo  # 定义所有操作类的别名所在包
  mapper-locations: classpath:META-INF/mybatis/mapper/**/*.xml # 所有的mapper映射文件
  global-config: # 全局配置
    db-config:
      logic-not-delete-value: 0 # 数据删除前
      logic-delete-value: 1 # 数据删除后

3、【microboot-database子模块】创建MyBatisPlusConfig 配置类,引入SqlSessionFactoryBean 实例,并且进行MyBatisPlus相关环境定义

package com.yootk.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.config.GlobalConfig;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean;
import org.mybatis.spring.boot.autoconfigure.SpringBootVFS;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
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 javax.sql.DataSource;

@Configuration
public class MybatisPlusConfig { // Mybatis拦截器配置
    private ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
    @Bean
    public MybatisPlusInterceptor getMybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(
                new PaginationInnerInterceptor(DbType.MYSQL) // 使用MySQL分页实现
        );
        return interceptor;
    }
    @Bean("mybatisSqlSessionFactoryBean")
    public MybatisSqlSessionFactoryBean getMybatisSqlSessionFactoryBean(
            @Autowired DataSource dataSource, // 要使用的数据源
            @Value("${mybatis-plus.config-location}") Resource configLocation, // 资源文件路径
            @Value("${mybatis-plus.type-aliases-package}") String typeAliasesPackage, // 扫描别名
            @Value("${mybatis-plus.mapper-locations}") String mapperLocations, // Mapping映射路径
            @Value("${mybatis-plus.global-config.db-config.logic-not-delete-value}") String logicNotDeleteValue,
            @Value("${mybatis-plus.global-config.db-config.logic-delete-value:}") String logicDeleteValue
    ) throws Exception {
        MybatisSqlSessionFactoryBean mybatisPlus = new MybatisSqlSessionFactoryBean();
        mybatisPlus.setDataSource(dataSource); // 配置项目中要使用的数据源
        mybatisPlus.setVfs(SpringBootVFS.class); // 配置程序的扫描类
        mybatisPlus.setTypeAliasesPackage(typeAliasesPackage); // 扫描包的别名
        Resource[] mappings = this.resourcePatternResolver.getResources(mapperLocations);
        mybatisPlus.setMapperLocations(mappings);
        GlobalConfig.DbConfig dbConfig = new GlobalConfig.DbConfig(); // 数据配置
        dbConfig.setLogicNotDeleteValue(logicNotDeleteValue); // 未删除时的数据内容
        dbConfig.setLogicDeleteValue(logicDeleteValue); // 删除时的数据内容
        GlobalConfig globalConfig = new GlobalConfig(); // 定义全局配置
        globalConfig.setDbConfig(dbConfig); // 全局配置项
        mybatisPlus.setGlobalConfig(globalConfig);
        return mybatisPlus;
    }
}

此时已经成功的使用了自定义的MybatisPlus配置Bean代替了starter配置 (starter内部也只是封装了这样的一种配置类而已,本质上都是相同的)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MyBatisPlus(基于starter和Bean方式) 的相关文章

  • Java使用Mybatis-Plus实现根据参数动态拼接查询条件

    在编写代码的过程中我们常常会遇到下面的业务场景 我们需要根据传进来的参数来去进行拼接查询 例如当前端传过来的参数是base 那么我们就需要在Mybatis Plus的条件构造其中写出如下语句 public PageUtils queryBa
  • Mybatis-Plus(一)

    Mybatis Plus 一 最近在项目当中学习到了一种新的构建sql查询的技术 mybatis plus 相交与之前使用的example即先创建一个example对象 再根据这个对象创建一个criteria对象来说 这种方式更为简洁方便
  • Spring注入Bean的七种方式

    通过注解注入Bean 背景 我们谈到Spring的时候一定会提到IOC容器 DI依赖注入 Spring通过将一个个类标注为Bean的方法注入到IOC容器中 达到了控制反转的效果 那么我们刚开始接触Bean的时候 一定是使用xml文件 一个一
  • Mybatis-plus开启sql日志打印

    第一种 mybatis plus 设置 mybatis plus configuration log impl org apache ibatis logging stdout StdOutImpl 开启sql日志 log impl org
  • MyBatis-Plus深入 —— 条件构造器与插件管理

    前言 在前面的文章中 荔枝梳理了一个MyBatis Plus的基本使用 配置和通用Service接口 我们发现在MyBatis Plus的辅助增强下我们不再需要通过配置xml文件中的sql语句来实现基本的sql操作了 不愧是最佳搭档 在这篇
  • MockMvc测试和spring boot视图开发

    文章目录 导入配置 使用步骤 1 Model准备 2 创建控制器 3 Web测试的支持 视图 JSP 开发 配置文件 编写控制器 环境配置 自定义过滤器 导入配置 pom xml
  • Spring框架自学之路——简易入门

    目录 目录 介绍 Spring中的IoC操作 IoC入门案例 Spring的bean管理 配置文件 Bean实例化的方式 Bean标签的常用属性 属性注入 使用有参构造函数注入属性 使用set方法注入属性 注入对象类型属性 p名称空间注入属
  • java bean对象属性复制,将一个对象的属性值赋值给另一个对象,对象之间的复制方法

    注意依赖 springframework下的复制顺序为 目标对象 新对象 import org springframework beans BeanUtils public static void main String args Inte
  • MyBatis-Plus系列(一)--MyBatis-Plus集成Druid环境搭建

    一 简介 Mybatis Plus是一款 MyBatis 动态 sql 自动注入 crud 简化 增 删 改 查 操作中间件 启动加载 XML 配置时注入 mybatis 单表 动态 SQL 操作 为简化开发工作 提高生产率而生 Mybat
  • Maven项目代码生成器插件(code-generator-maven-plugin)

    简介 code generator maven plugin 是一个基于baomidou mybatis plus generator实现的 在 Maven 项目中生成代码的 Maven 插件 主要包括 code generator MyB
  • mybatisPlus-wrapper使用

    创建测试类 import com baomidou mybatisplus core conditions query QueryWrapper import com plus mybatis mapper UserMapper impor
  • 【编程语言】java--jsp--javabean中的scope用法小解

    javabean中的scope用法小解 1 scope取值page JSP分配给每个bean是互不相同的 虽然bean的功能是一样 但是占据不同的内存单元 bean的有效范围是当前页面 2 scope取值session JSP分配给每个be
  • SpringCloud-Alibaba整合Nacos+Seata+Mybatis-Plus

    SpringCloud Alibaba整合Nacos Seata Mybatis Plus Seata Example 项目说明 准备工作 配置数据库 创建 undo log 表 创建 示例中 业务所需要的数据库表 启动 Seata Ser
  • org.springframework.beans.factory.BeanCreationException的问题所在!!

    今天一不小心弄出的小问题 严重 Exception sending context initialized event to listener instance of class org springframework web contex
  • Mybatis-Plus中update更新操作用法

    目录 一 前言 二 update 1 关于修改的4个条件构造器 2 UpdateWrapper 用法示例 3 LambdaUpdateWrapper 用法示例 4 UpdateChainWrapper 用法示例 5 LambdaUpdate
  • Jsf与Spring的整合原理

    Jsf做为Web框架 Spring做为业务层框架 两者可以结合起来用 只要在faces config xml中做一个很简单的配置
  • Mybatis-Plus根据时间段去查询数据

    业务需求 在前端界面选择开始时间 结束时间 后台根据拿到的开始 结束时间去数据库中查询该段时间的数据集返回给前端界面 1 前端我使用的是elementUI和vue框架 最好是在前端界面进行一个简单的校验规则 对比一下开始时间和结束时间的大小
  • Spring(三):JavaBean的生命周期

    JavaBean的生命周期 一 基本概念 bean 就是由IOC 容器初始化 装配及管理的对象 Spring中的bean默认都是单例的 那么单例Bean在多线程程序下如何保证线程安全呢 Spring的单例是基于BeanFactory也就是S
  • 为啥MyBatis-Plus 分页插件不生效?

    描述 项目中用到boot 整合 mybatis plus 个人在使用分页条件查询的时候一直查不出 total pages 终于找到原因了 环境
  • 记录我的第一个MyBatis-Plus例子

    第一个MyBatis Plus例子 灰常简单 特此记录 第一步 数据库表 第二步 pom引入jar包 第三步 启动类 实体类 application properties 在编写一个mapper接口 第四步 编写测试类 执行结果如下图所示代

随机推荐

  • beego介绍(一)

    目录 beego 的 MVC 架构介绍参数配置默认配置解析不同级别的配置多个配置文件支持环境变量配置系统默认参数基础配置App 配置Web配置监听配置Session配置Log配置 路由设置基础路由基本 GET 路由基本 POST 路由注册一
  • TCP如何保证可靠性?

    TCP如何保证可靠性 xff1f TCP协议保证数据传输可靠性的方式主要有 xff1a 校验和 序列号 确认应答 超时重传 连接管理 流量控制 拥塞控制 1 校验和 计算方式 xff1a 在数据传输的过程中 xff0c 将发送的数据段都当做
  • 仿照java的jdk动态代理实现go语言动态代理

    仿照java的jdk动态代理实现go语言动态代理 通过学习java的jdk动态代理和Cglib动态代理 xff0c 仿照jdk动态代理用go实现了一个简单的动态代理 结构型模式 代理模式 代理模式中分为静态代理和动态代理 静态代理需要在编译
  • golang设计模式——装饰器模式

    装饰器模式 装饰器模式 xff1a 动态地给一个对象添加一些额外的职责 xff0c 就增加功能来说 xff0c 装饰模式比生成子类更为灵活 UML类图 xff1a 分析 首先我们需要理解 xff0c 为什么组合优于继承 xff1f 继承有诸
  • GoLang之unsafe分析

    GoLang之unsafe 目录 GoLang之unsafe1 前言2 指针类型转换3 指针运算4 获取大小和偏移5 关于string 1 前言 开发中 xff0c byte类型和string类型需要互相转换的场景并不少见 xff0c 直接
  • Go实现分布式锁

    Go分布式锁 目录 Go分布式锁进程内加锁trylock基于 redis 的 setnx基于 zk基于 etcdredlock如何选择 在单机程序并发或并行修改全局变量时 xff0c 需要对修改行为加锁以创造临界区 为什么需要加锁呢 xff
  • Golang实习蓝湖二面

    蓝湖二面 自我介绍 问题 casbin的策略 ACL RBAB ABAC 他们的区别和应用 JWT的实现 JWT和传统的token有什么区别 三次握手和四次挥手 time wait 为什么需要等待2MSL 什么是完全二叉树 完全二叉树有什么
  • export、import、commit、save、load的区别

    目录 1 docker export 和 docker import2 docker commit3 docker save 和 docker load 1 docker export 和 docker import docker expo
  • docker搭建redis集群模式

    目录 docker 安装redis1 创建redis conf开启redis验证 开启密码 允许redis外地连接后台启动开启redis持久化 2 启动redis容器3 进入容器 redis集群3主3从1 新建6个redis容器2 构建主从
  • SONiC+P4实践——P4Runtime下发ACL表项

    转载请表明出处 注 xff1a SONiC系统为vs版本 Part1 xff1a 实现外部宿主机与SONiC的网络连通 步骤 1 xff1a 打开一个ubuntu系统安装kvm及其依赖 xff08 1 xff09 查看CPU是否支持虚拟化
  • BDD100K自动驾驶数据集格式转YOLO格式

    说明 xff1a 为了用BDD100K数据集训练YOLOV5模型 xff0c 首先需要将BDD100K数据集格式转成YOLOV5支持的输入格式 转换代码如下 xff1a 一 BDD100K转YOLO格式 usr bin env python
  • 全局代理-WINDOWS怎么设置全局代理?

    https blog 51cto com u 15275599 2923545 WINDOWS设置全局代理可以通过以下4个步骤操作来实现 xff1a 1 点击开始菜单 xff0c 然后点击setting xff08 设置 xff09 xff
  • Easyexcle导入导出

    一 导入 1 依赖 lt excel gt lt dependency gt lt groupId gt com alibaba lt groupId gt lt artifactId gt easyexcel lt artifactId
  • Springboot+(linux)redis哨兵模式实现

    下面是主从redis服务 6379主6380从16381从2 下面是多个哨兵 26379哨兵126380哨兵226381哨兵3 windows下redis压缩包 xff08 本文使用的是5 0 13 xff09 Redis xff08 点我
  • 记一次springboot2.1.6配置(mysql)多数据源

    pom xml lt xml version 61 34 1 0 34 encoding 61 34 UTF 8 34 gt lt project xmlns 61 34 http maven apache org POM 4 0 0 34
  • 小车跟随行驶系统(基于MSP-EXP430F5529LP系统板)

    选用材料 xff1a 主控板MSP EXP430F5529LP 陀螺仪 直流减速电机 xff08 可以选用光电编码器 xff0c 霍尔电机不好调节PID xff09 TB6612电机驱动 超声波测距模块 灰度传感器 无线透传 蓝牙模块 xf
  • 使用sheetjs读取excle表格

    span class token comment cdn引入js span span class token operator lt span script lang span class token operator 61 span sp
  • js的六种继承方式

    1 原型链继承 核心 xff1a 将父类的实例作为子类的原型 span class token keyword function span span class token function Parent1 span span class
  • 代理服务器的学习

    一 代理服务器和VPN 1 工作原理 xff08 1 xff09 代理的工作原理是 xff1a 由代理服务器自己去访问你的目标网站 xff0c 并加载它的内容 xff0c 然后再把这些加载过的内容传递到你的窗口上 这样就相当于你在浏览目标网
  • MyBatisPlus(基于starter和Bean方式)

    文章目录 基于boot starter方式基于Bean方式 基于boot starter方式 1 microboot项目 修改配置文件 xff0c 引入所需要的相关依赖库 dependences gradle ext span class