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

Springboot+MyBatis使用

目录

依赖

配置信息

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.Driverurl: jdbc:mysql://127.0.0.1:3306/wddatabase?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=trueusername: rootpassword: 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/*.xmlconfig-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 语句。

相关文章:

Springboot+MyBatis使用

目录 依赖 配置信息 xml文件 mapper接口 打印日志 分页查询 依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependency><dependency><groupId>my…...

WebSocketServer的使用(@ServerEndpoint)

前端代码 function initWebSocket() {if (typeof WebSocket "undefined") {console.log("您的浏览器不支持WebSocket");} else {console.log("您的浏览器支持WebSocket");//实现化WebSocket对象&#xff0c;指定要连接的服务器地址与端口 建立连…...

【yolov8系列】将yolov8-seg 模型部署到瑞芯微RK3566上

前言 之前记录过【yolov5系列】将模型部署到瑞芯微RK3566上&#xff0c;整体比较流畅&#xff0c;记录了onnx转rknn的相关环境配置&#xff0c;使用的rk版本为rknn-toolkit2-v1.4.0。当前库已经更新为1.5&#xff0c;这里还是沿用1.4的版本进行记录。本篇博客是在上篇博客&…...

Java类的默认构造函数

什么情况下存在默认构造函数 说明 如果一个Java类没有显式包含构造函数的声明&#xff0c;那么隐含着有一个默认构造函数。 示例 定义一个类B&#xff0c;没有显式声明构造函数&#xff0c;所以存在一个默认构造函数&#xff1a; package com.thb;public class B {public …...

华为openGauss数据库入门 - gsql用法

目录 1.1 gsql的语法 1.2 gsql常用选项 1.2.1 最常用的必要选项 1.2.2 -r选项 1.2.3 -E选项 1.2.4 -t选项 1.2.5 -A选项 1.2.6 -v选项 1.2.7 -c选项 1.2.8 -f选项 1.2.9 -q选项 1.3 gsql的元命令 1.3.1 \l命令 1.3.2 \du命令和\dg命令 1.3.3 \db命令 1.3.4 \d…...

The Sandbox 重新上线,带来全新体验!

在经历了一个充满史诗般新回忆的全力开局后&#xff0c;我们短暂休息了片刻&#xff0c;为玩家准备了全新的、惊心动魄的游戏活动。 我们已经完成了功能的微调&#xff0c;准备将您的游戏体验提升到一个全新高度&#xff01; 想知道我们正在做什么吗&#xff1f;现在还无法公开…...

动态内存管理面试题

动态内存管理面试题 文章目录 动态内存管理面试题一、第一题此代码存在的问题运行结果分析原因修改 二、第二题此代码存在的问题运行结果分析原因修改 一、第一题 代码如下&#xff08;示例&#xff09;&#xff1a; #include<stdio.h> #include<string.h> #incl…...

树莓派外设开发编程

目录 一、树莓派的接口&#xff1a;驱动 二、wiringPi 库 1.在使用wiringPi库的时候&#xff0c;需要包含头文件 2.wiringPi库API 一、树莓派的接口&#xff1a;驱动 IO口&#xff1a;input output 对于主控来说 Input &#xff1a;人体、烟雾、振动 output: 继电…...

Java从入门到精通(一)

Java从入门到精通&#xff08;一&#xff09; 前言 温故而知新&#xff0c;闲着没事干&#xff0c;准备将Java编程语言的知识点从头梳理一遍&#xff0c;整理成笔记&#xff0c;逐篇发布。 部分图片素材来源与B站“黑马程序员”的课程。 一 Java背景 Java是1995年 由Sun公司…...

Electron从构建到打包程exe应用

Electron从构建到打包程exe应用 Electron文档搭建网页装载到 BrowserWindow中定义全局对象进程之间通信渲染器进程到主进程&#xff08;单向&#xff09;渲染器进程到主进程&#xff08;双向&#xff09;主进程到渲染器进程 打开调试器打包应用程序对代码进行签名 Electron文档…...

3分钟学会设计模式 -- 单例模式

►单例模式 ►使用场景 在编写软件时&#xff0c;对于某些类来说&#xff0c;只有一个实例很重要。例如&#xff0c;一个系统中可以存在多个打印任务&#xff0c;但是只能有一个正在工作的任务&#xff1b;一个系统中可以多次查询数据库&#xff0c;但是只需要一个连接&#x…...

《面试1v1》Kafka与传统消息系统区别

&#x1f345; 作者简介&#xff1a;王哥&#xff0c;CSDN2022博客总榜Top100&#x1f3c6;、博客专家&#x1f4aa; &#x1f345; 技术交流&#xff1a;定期更新Java硬核干货&#xff0c;不定期送书活动 &#x1f345; 王哥多年工作总结&#xff1a;Java学习路线总结&#xf…...

【算法第十三天7.27】平衡二叉树,二叉树所有路径,左叶子之和

链接力扣110-平衡二叉树 思路 1、左右子树高度差不超过1 2、左子树、右子树均为平衡二叉树 3、需要获得树高&#xff0c;如果不是平衡的就返回-1&#xff1b;如果是平衡&#xff0c;就返回对应的高 class Solution {public boolean isBalanced(TreeNode root) {return getH…...

arm架构cloudstack的agent报错No more available PCI slots如何解决

当ARM架构的CloudStack代理报错"No more available PCI slots"时&#xff0c;这通常表示ARM实例已用尽可用的PCI插槽。PCI插槽用于连接网络接口卡&#xff08;NIC&#xff09;和其他扩展设备到虚拟机实例。 解决此问题的方法可以考虑以下几点&#xff1a; 调整实例的…...

day43-Feedback Ui Design(反馈ui设计)

50 天学习 50 个项目 - HTMLCSS and JavaScript day43-Feedback Ui Design&#xff08;反馈ui设计&#xff09; 效果 index.html <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport&q…...

TypeScript基础篇 - TS日常类型 上篇

目录 TS的常见用法介绍 example01.ts 逃避类型检查&#xff1a;any 思考一下~&#xff1a;不知道类型 类型标注 函数&#xff08;参数和返回值&#xff09; 匿名函数 TS如何知道匿名函数的类型&#xff1f; TS是一种标注式语言&#xff0c;不侵入JS的设计 TS的常见用法…...

量化交易——python数据分析及可视化

该项目分为两个部分&#xff1a;一是数据计算&#xff0c;二是可视化&#xff0c;三是MACD策略 一、计算MACD 1、数据部分 数据来源&#xff1a;tushare 数据字段包含&#xff1a;日期&#xff0c;开盘价&#xff0c;收盘价&#xff0c;最低价&#xff0c;最高价&#xff0c…...

微服务网关

1.网关是如何演化来的&#xff0c;在微服务中有什么作用&#xff1f; 随着单体架构转化为微服务架构的时候&#xff0c;由一个后台服务由一个单一的服务变成了多个微服务&#xff0c;前端应用需要调用多个服务的接口&#xff0c;为了解决这个问题&#xff0c;网关就产生了。网…...

【打卡】Datawhale暑期实训ML赛事

文章目录 赛题描述任务要求数据集介绍评估指标 赛题分析基于LightGBM模型Baseline详解改进baseline早停法添加特征 赛题描述 赛事地址&#xff1a;科大讯飞锂离子电池生产参数调控及生产温度预测挑战赛 任务要求 初赛任务&#xff1a;初赛提供了电炉17个温区的实际生产数据&…...

【python脚本】python实现:目标检测裁剪图片样本,根据类标签文件进行裁剪保存

python实现&#xff1a;目标检测裁剪图片样本&#xff0c;根据类标签文件进行裁剪保存 我在进行目标检测时候&#xff0c;比如红绿灯检测&#xff0c;目标区域很小&#xff0c;样本杂乱。 想要筛选错误样本的话&#xff0c;很困难。可以把目标区域裁剪出来。人大脑处理对于这…...

零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?

一、核心优势&#xff1a;专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发&#xff0c;是一款收费低廉但功能全面的Windows NAS工具&#xff0c;主打“无学习成本部署” 。与其他NAS软件相比&#xff0c;其优势在于&#xff1a; 无需硬件改造&#xff1a;将任意W…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

论文浅尝 | 基于判别指令微调生成式大语言模型的知识图谱补全方法(ISWC2024)

笔记整理&#xff1a;刘治强&#xff0c;浙江大学硕士生&#xff0c;研究方向为知识图谱表示学习&#xff0c;大语言模型 论文链接&#xff1a;http://arxiv.org/abs/2407.16127 发表会议&#xff1a;ISWC 2024 1. 动机 传统的知识图谱补全&#xff08;KGC&#xff09;模型通过…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

麒麟系统使用-进行.NET开发

文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的&#xff0c;如果需要进行.NET开发&#xff0c;则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET&#xff0c;所以要进…...