Springboot+MyBatis使用

news2024/11/18 1:31:32

目录

依赖

配置信息

xml文件

mapper接口

打印日志

分页查询


依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>

配置信息

数据源配置

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/wddatabase?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true
    username: root
    password: root

 其他配置

#SpringBoot整合mybatis
mybatis:
  #加载指定的xml映射文件
  mapper-locations: classpath:mappers/*.xml
  #开启驼峰映射
  configuration:
    map-underscore-to-camel-case: true

 指定的xml映射文件一定要跟target目录下的路径保持一致

xml文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.wd.admin.mapper.PmsProductMapper">

    <select id="getById" parameterType="long" resultType="com.wd.admin.entity.PmsProduct">
        select * from pms_product where id = #{id,jdbcType=BIGINT};
    </select>
</mapper>

mapper接口

public interface PmsProductMapper{

    /**
     * 根据id查询
     *
     * @param id Long
     * @return PmsProduct
     */
    PmsProduct getById(Long id);
}

打印日志

第一种方式:

logging:
  level:
    com.wd.admin.mapper: debug #mapper类存放的路径

实际打印效果 

第二种方式:

mybatis:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

打印效果:

第三种打印:

这种和第二种是不能兼容的会报错

property 'configuration' and 'configLocation' can not specified with together

mybatis-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!-- 开启驼峰映射,为自定义的sql语句服务-->
    <!--设置启用数据库字段下划线映射到java对象的驼峰命名属性,默认为false-->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
        <setting name="logImpl" value="STDOUT_LOGGING"/>
    </settings>
</configuration>
mybatis:
  #加载指定的xml映射文件
  mapper-locations: classpath:mappers/*.xml
  config-location: classpath:mybatis-config.xml
#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

打印效果

分页查询

查到的数据放到pageInfo里面

PageInfo<PmsProduct> pageInfo = new PageInfo<>(productList);
if (CollectionUtils.isEmpty(productList)) {
	return new PageVo<>(queryListReq.getPageNum(), queryListReq.getPageSize(), 0, 0, Collections.emptyList());
}

return PageUtils.rebuildPageData(pageInfo, item -> {
	PmsProductVo pmsProductVo = new PmsProductVo();
	BeanUtils.copyProperties(item, pmsProductVo);
	return pmsProductVo;
});

这边用lambda表达式操作一波

public static <T,R> PageVo<R> rebuildPageData(PageInfo<T> pageInfo, Function<T, R> function) {
	List<T> list = pageInfo.getList();
	List<R> returnList = list.stream().map(function).collect(Collectors.toList());
	return new PageVo<R>(pageInfo.getPageNum(),pageInfo.getPageSize(),pageInfo.getTotal(), pageInfo.getPages(),returnList);
}

请求返回

看一下分页查询的参数

  • pagehelper.helperDialect:指定数据库方言,PageHelper 根据不同的数据库方言生成不同的分页查询语句。常见的取值有 mysqloraclesqlserver 等。

  • pagehelper.reasonable:设置为 true 时,启用合理化参数,默认为 false。当设置为 true 时,如果 pageNum 参数小于 1,则自动将其设置为 1;如果 pageNum 大于总页数,则自动将其设置为总页数。

  • pagehelper.supportMethodsArguments:设置为 true 时,支持通过 Mapper 接口中的方法参数传递分页参数,默认为 false。如果设置为 true,在 Mapper 接口中的方法中可以直接传递 pageNumpageSize 参数,而不需要通过 PageHelper.startPage() 方法来设置分页参数。

  • pagehelper.params:设定的参数可以传递到具体的数据库方言进行解析,默认为空。该属性可以用于传递一些特殊的参数给数据库方言解析器。

这些属性可以通过在配置文件中使用 <property> 标签进行设置,或者通过代码中的属性配置进行设置。例如,在 Spring Boot 中可以在 application.properties 或 application.yml 文件中进行配置:

# PageHelper 配置
pagehelper.helperDialect=mysql
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params= count=countSql

`count=countSql` 是 MyBatis 中配置分页插件 PageHelper 时的一个常见设置,用于指定在进行分页查询时,PageHelper 使用的 SQL 语句是否是通过 `countSql` 属性指定的 SQL 语句来获取总记录数。

默认情况下,PageHelper 会通过拦截原始的查询 SQL 语句,自动生成一个对应的统计总记录数的 SQL 语句。这个生成的 SQL 语句会将原始的查询 SQL 语句作为子查询,并在外层进行 count 操作。

然而,在某些复杂的查询场景下,生成的统计总记录数的 SQL 语句可能无法正确地获取到正确的结果,或者性能较差。为了解决这种情况,可以将 `countSql` 设置为 `true`,即 `count=countSql`。

当设置为 `countSql` 时,PageHelper 会使用用户自定义的 SQL 语句获取总记录数。用户需要在分页插件的配置中指定 `countSql` 属性,并提供一个 SQL 语句来获取总记录数。这个 SQL 语句可以是自定义的,一般情况下是针对原始的查询 SQL 语句进行改造得到。

通过指定 `countSql` 来获取总记录数可以解决一些特殊情况下的问题,但同时也需要注意确保自定义的 SQL 语句能够正确地获取到正确的总记录数,并且性能较好。在大多数情况下,使用 PageHelper 自动生成的统计总记录数的 SQL 语句就可以满足需求。只有在遇到特殊情况时才需要使用 `countSql` 来自定义获取总记录数的 SQL 语句。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/800081.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot集成 Swagger

Spring Boot 集成 Swagger 在线接口文档 1、Swagger 简介 1.1 解决的问题 随着互联网技术的发展&#xff0c;现在的网站架构基本都由原来的后端渲染&#xff0c;变成了前后端分离的形态&#xff0c;而且前端技术和后端技术在各自的道路上越走越远。前端和后端的唯一联系变成…

LeetCode647.Palindromic-Substrings<回文子串>

题目&#xff1a; 思路&#xff1a; 错误代码&#xff1a;&#xff08;缺少部分判断&#xff09; 使用的是寻找回文子串的方法。以一个点为中心向两边扫描。但是有一点小问题。 因为回文子串是分奇偶的&#xff0c;所以需要两种判断方式。 看了下答案后发现我的代码距离答案一…

创建一个简单的 Servlet 项目

目录 1.首先创建一个 Maven 项目 2.配置 maven 仓库地址 3.添加引用 4.配置路由文件 web.xml 5.编写简单的代码 6.配置 Tomcat 7.写入名称,点击确定即可 8.访问 1.首先创建一个 Maven 项目 2.配置 maven 仓库地址 3.添加引用 https://mvnrepository.com/ 中央仓库地址…

入门篇——了解数据库

一、数据库是什么&#xff1f; 数据库是存放数据的仓库。它的存储空间很大&#xff0c;可以存放百万条、千万条、上亿条数据。但是数据库并不是随意地将数据进行存放&#xff0c;是有一定的规则的&#xff0c;否则查询的效率会很低。当今世界是一个充满着数据的互联网世界&…

给jupter设置新环境

文章目录 给jupternotebook设置新环境遇到的报错添加路径的方法 给jupternotebook设置新环境 # 先在anaconda界面新建环境 conda env list # 查看conda prompt下的有的环境变量 带星号的是当前活跃的 activate XXXX pip install ipykernel ipython ipython kernel install --u…

AI编程常用工具 Jupyter Notebook

点击上方蓝色字体&#xff0c;选择“设为星标” 回复”云原生“获取基础架构实践 深度学习编程常用工具 我们先来看 4 个常用的编程工具&#xff1a;Sublime Text、Vim、Jupyter。虽然我介绍的是 Jupyter&#xff0c;但并不是要求你必须使用它&#xff0c;你也可以根据自己的喜…

C++中deque的底层讲解

1.前言 1.了解过queue和stack底层的或许了解过&#xff0c;库里面的底层实现&#xff0c;选择的默认容器就是deque&#xff0c;那他有什么好处呢&#xff1f; 2.先前了解过deque的接口会发现&#xff0c;他感觉像是vector和list的合体&#xff0c;什么接口都有&#xff1a; 很…

14.Netty源码之模拟简单的HTTP服务器

highlight: arduino-light 简单的 HTTP 服务器 HTTP 服务器是我们平时最常用的工具之一。同传统 Web 容器 Tomcat、Jetty 一样&#xff0c;Netty 也可以方便地开发一个 HTTP 服务器。我从一个简单的 HTTP 服务器开始&#xff0c;通过程序示例为你展现 Netty 程序如何配置启动&a…

CMU 15-445 -- Logging Schemes - 17

CMU 15-445 -- Logging Schemes - 17 引言IndexFailure ClassificationTransaction FailuresSystem FailuresStorage Media Failures Buffer Pool PoliciesShadow Paging: No-Steal ForceWrite-Ahead Log (WAL): Steal No-ForceLogging SchemesCheckpoints小结 引言 本系列为…

CoTracker跟踪器 - CoTracker: It is Better to Track Together

论文地址&#xff1a;https://arxiv.org/pdf/2307.07635v1.pdf 官方地址&#xff1a;https://co-tracker.github.io/ github地址&#xff1a;https://github.com/facebookresearch/co-tracker/tree/main 引言 在计算机视觉领域&#xff0c;光流估计是历史最久远的问题之一&a…

TCP如何保证服务的可靠性

TCP如何保证服务的可靠性 确认应答超时重传流量控制滑动窗口机制概述发送窗口和接收窗口的工作原理几种滑动窗口协议1比特滑动窗口协议&#xff08;停等协议&#xff09;后退n协议选择重传协议 采用滑动窗口的问题&#xff08;死锁可能&#xff0c;糊涂窗口综合征&#xff09;死…

大数据Flink(五十一):Flink的引入和Flink的简介

文章目录 Flink的引入和Flink的简介 一、Flink的引入 1、第1代——Hadoop MapReduce

60 # http 的基本概念

什么是 HTTP&#xff1f; 通常的网络是在 TCP/IP 协议族的基础上来运作的&#xff0c;HTTP 是一个子集。http 基于 tcp 的协议&#xff0c;在 tcp 的基础上增加了一些规范&#xff0c;就是 header&#xff0c;学习 http 就是学习每个 header 它有什么作用。 TCP/IP 协议族 协…

RN 设置背景图片(使用ImageBackground组件)

在RN版本0.46版本的时候添加了ImageBackground控件。ImageBackground可以设置背景图片&#xff0c;使用方法和image一样&#xff0c;里面嵌套了其他的组件 import React from "react"; import { ImageBackground, StyleSheet, Text, View } from "react-native…

【项目6 UI Demo】前端代码记录

前端代码记录 1.GridListItem中的布局 在这个Item中的布局采用的是VBox和HBox相结合的方式。相关的代码如下&#xff1a; <VBox class"sapUiTinyMargin"><HBox justifyContent"SpaceBetween"><Titletext"{ToolNumber}"wrapping…

C++之lambda表达式/function/using/typedef用法总结(一百六十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

Linux基础以及常用命令

目录 1 Linux简介1.1 不同应用领域的主流操作系统1.2 Linux系统版本1.3 Linux安装1.3.1 安装VMWare1.3.2 安装CentOS镜像1.3.3 网卡设置1.3.4 安装SSH连接工具1.3.5 Linux和Windows目录结构对比 2 Linux常用命令2.0 常用命令&#xff08;ls&#xff0c;pwd&#xff0c;cd&#…

LinuxC语言-网络通信tcp/ip errno获取错误描述字符串

目录 服务端代码&#xff1a; 获取errno错误码&#xff1a; 客户端代码&#xff1a; 运行结果: 服务端代码&#xff1a; #include <stdio.h> #include<sys/types.h> #include<sys/socket.h> #include<string.h> #include<netinet/in.h> #in…

在Mac上搭建Gradle环境

在Mac上搭建Gradle环境&#xff1a; 步骤1&#xff1a;下载并安装Java开发工具包&#xff08;JDK&#xff09; Gradle运行需要Java开发工具包&#xff08;JDK&#xff09;。您可以从Oracle官网下载适合您的操作系统版本的JDK。请按照以下步骤进行操作&#xff1a; 打开浏览器…

性能提升,SpringBoot 3.2虚拟线程来了

spring boot 3.2 会提供默认支持&#xff0c;必须Java19。 在以往的项目中&#xff0c;我们面临了这样一种情况&#xff1a;我们收到了数千个认证请求。为了确保安全性&#xff0c;我们依靠第三方系统发送短信 OTP 进行验证。然而&#xff0c;有时候第三方系统花费的时间比预期…