SSM学习10:整合MyBatis、MyBatisPlus

SpringBoot整合MyBatis

与创建spring web项目类型,添加上相应依赖
在这里插入图片描述
实体类

public class Account {private int id;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}private String name;private double money;
}

接口

@Mapper
public interface AccountDao {@Select("select * from account where id = #{id}")public Account getAccount(int id);
}

@Mapper 注解主要用于标记数据访问层(DAO 层或称为 Mapper 层)的接口。这个注解是 MyBatis 框架的一部分,用于与 Spring 框架集成时自动创建这些接口的实现类,并将其作为 Bean 注入到其他需要的地方。

数据库配置
resources/application.yml

# 数据源配置
spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/testusername: rootpassword: 123abc!@#

测试类中运行

@SpringBootTest
class BootMpApplicationTests {@Autowiredprivate AccountDao accountDao;@Testvoid contextLoads() {Account account = accountDao.getAccount(1);System.out.println(account.getName());}
}

在这里插入图片描述

MyBatisPlus

简介

MyBatisPlus是基于Mybatis框架基础上开发的增强型工具,用于简化开发、提高效率。

项目搭建

在上面项目的基础上添加对应的依赖,在dependencies中添加

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3</version>
</dependency>

AccountDao2.class

// 需要使用mybatis-plus提供的的BaseMapper
@Mapper
public interface AccountDao2 extends BaseMapper<Account> {
}

测试类中运行

@SpringBootTest
class BootMpApplicationTests {@Autowiredprivate AccountDao accountDao;@Autowiredprivate AccountDao2 accountDao2;@Testvoid contextLoads() {Account account = accountDao.getAccount(1);System.out.println(account.getName());// 使用mybatis-plus提供的方法Account account1 = accountDao2.selectById(1);System.out.println("使用mybatis-plus获取:" + account1.getName());}}

在这里插入图片描述

补充
使用lombok简化实体类,在pom.xml中添加

<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.22</version>
</dependency>

简化前:

public class Account {private int id;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public double getMoney() {return money;}public void setMoney(double money) {this.money = money;}private String name;private double money;
}

简化后

@Getter
@Setter
@ToString
public class Account {private int id;private String name;private double money;
}

或者

@Data
public class Account {private int id;private String name;private double money;
}

@Data 为当前实体类在编译期设置对应的get/set方法,无惨/有惨 构造方法,toString方法等

分页功能

配置
config/MpConfig .class

@Configuration
public class MpConfig {// 设置mybatis-plus的分页功能@Beanpublic MybatisPlusInterceptor paginationInterceptor() {// 1、创建拦截器MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();// 2、添加分页拦截器interceptor.addInnerInterceptor(new PaginationInnerInterceptor());return interceptor;}
}

使用

// 设置当前页码和每页显示的条数IPage page = new Page(1, 2);accountDao2.selectPage(page, null);System.out.println("总页:" + page.getPages());System.out.println("总条数:" + page.getTotal());

在这里插入图片描述
在控制台开始执行日志

application.yml

# 开启日志输出(输出到控制台)
mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

在这里插入图片描述

条件查询

mybatis-plus将书写复杂的sql查询条件进行了封装,使用编程的形式完成查询条件的组合

QueryWrapper

QueryWrapper qw = new QueryWrapper();
// 查询金钱大于1000的
qw.gt("money", 1000);
List<Account> list = accountDao2.selectList(qw);System.out.println("总条数是:" + list.size());

在这里插入图片描述

lambda表达式方式

QueryWrapper<Account> qw = new QueryWrapper();
// 查询金钱大于1000的
qw.lambda().gt(Account::getMoney, 1000);
List<Account> list = accountDao2.selectList(qw);System.out.println("总条数是:" + list.size());

或者

LambdaQueryWrapper<Account> qw = new LambdaQueryWrapper<>();
qw.gt(Account::getMoney, 1000);
List<Account> list = accountDao2.selectList(qw);System.out.println("总条数是:" + list.size());
LambdaQueryWrapper<Account> qw = new LambdaQueryWrapper<>();
// 多条件查询,查询金额大于1000并且姓名为张三
qw.gt(Account::getMoney, 1000).eq(Account::getName, "张三");
List<Account> list = accountDao2.selectList(qw);System.out.println("总条数是:" + list.size());

在这里插入图片描述
查询投影

用于指定查询时返回哪些字段

LambdaQueryWrapper<Account> qw = new LambdaQueryWrapper<>();
// 查询投影,只查询name和money
qw.select(Account::getName, Account::getMoney);
List<Account> list = accountDao2.selectList(qw);System.out.println("总条数是:" + list.size());

或者

QueryWrapper<Account> qw = new QueryWrapper<>();// 查询投影,只查询name和moneyqw.select("id", "money");List<Account> list = accountDao2.selectList(qw);System.out.println("总条数是:" + list.size());

在这里插入图片描述

映射匹配兼容

表字段与编码属性设计不同步
正常情况下实体类中的属性名与数据库中的字段名称时一致的。但也会出现不一致的情况,这时候可以使用TableField去进行关联

public class User{@TableField(value = "username")private String name;private int age;
}

编码中添加了数据库中未定义的属性
数据库中不需要改字段,但是实体类中需要该属性

public class User{@TableField(value = "username")private String name;private int age;// 该字段,表中不存在@TableField(exist = false)private int isOnline;
}

设置属性是否参与查询

// 查询数据时不返回密码
@TableField(select = false)
private String password;

数据库表名与实体类类名不一致

@TableName("t_user")
public class User{}

id生成策略

public class Account {// 使用雪花算法生成id@TableId(type = IdType.ASSIGN_ID)private int id;
}
  • AUTO:使用数据库id自增控制id的生成
  • NONE:不设置id生成策略
  • INPUT:用户手工输入
  • ASSIGN_ID:雪花算法生成id
  • ASSIGN_UUID:以UUID生成算法作为id生成策略

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

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

相关文章

Educational Codeforces Round 168 (Rated for Div. 2)(A~D题题解)

A. Strong Password 思路&#xff1a;想要最长的时间&#xff0c;那么肯定就是如果存在前后相同的字母的时候&#xff0c;在中间插入一个不同的字符 &#xff0c;如果不存在前后相同的字符&#xff0c;直接在最后插入一个和原字符串最后一个字符不同的字符 #include <bits/…

Go语言入门进阶语法 | 数据结构 |指针|结构体|数组|切片|Map|方法|接口|错误|io库|泛型

✅作者简介&#xff1a;CSDN内容合伙人、信息安全专业在校大学生&#x1f3c6; &#x1f525;系列专栏 &#xff1a; &#x1f4c3;新人博主 &#xff1a;欢迎点赞收藏关注&#xff0c;会回访&#xff01; &#x1f4ac;舞台再大&#xff0c;你不上台&#xff0c;永远是个观众。…

QGIS 缓冲区交集信息提取

目标 计算出靠近河道的农田数量及位置&#xff0c;具体方法为使用QGIS 中计算出距离线图层&#xff08;代表河道&#xff09;100 米范围内的点&#xff08;代表水田&#xff09;图层中的点。 具体步骤 步骤 1: 创建缓冲区 首先需要基于线图层创建一个缓冲区图层。 打开 QGIS…

JavaScript基础——JavaScript调用的三种方式

JavaScript简介 JavaScript的作用 JavaScript的使用方式 内嵌JS 引入外部js文件 编写函数 JavaScript简介 JavaScript&#xff08;简称“JS”&#xff09;是一种具有函数优先的轻量级&#xff0c;解释型或即时编译型的编程语言。它是Web开发中最常用的脚本语言之一&#x…

软件测试:动态黑盒测试的过程

要成为一个成功的软件测试员&#xff0c;需要采用更结构化的、目标明确的方法继续测试。 本文粗略描述动态黑盒测试的结构化过程 目录 1.动态黑盒测试 拿到需求文档或产品说明书 定义测试用例 test-case 2. 通过性测试和时效性测试 3. 等价类划分 4. 数据测试 边界条件…

【Redis】 拓展:Redis - BigKey方案探讨

BigKey: 用户越多&#xff0c;redis数据越多&#xff0c;bigkey会使得缓存数据更大&#xff0c;网络带宽会被占用&#xff0c;执行效率就低下&#xff0c;高并发的时候吞吐量QPS也会下降。 产生原因&#xff1a; 看如下list&#xff1a; 一个key的内容太大&#xff0c;比如1M&…

【宝藏系列】物联网中常用的十种通信协议

【宝藏系列】物联网中常用的十种通信协议 文章目录 【宝藏系列】物联网中常用的十种通信协议1️⃣MQTT2️⃣CoAP3️⃣AMQP4️⃣XMPP5️⃣LwM2M6️⃣HTTP7️⃣DDS8️⃣Bluetooth Low Energy9️⃣LoRaWAN1️⃣0️⃣NB-IoT 1️⃣MQTT MQTT&#xff08;Message Queuing Telemetry T…

JNDI注入-高版本绕过

参考博客&#xff1a; JNDI注入与动态类加载 探索高版本 JDK 下 JNDI 漏洞的利用方法 - 跳跳糖 (tttang.com) 分析版本 jdk8u201 分析流程 修复 在ldap绕过中&#xff0c;我们讲了LDAP的修复&#xff0c;下面用jdk8u201具体来看下修复。 修复之前&#xff0c;利用是在L…

英文文献翻译方法哪个好?高效率的翻译方法分享

三伏天的酷热也抵挡不住学术人探索知识的脚步&#xff0c;阅读和翻译英文文献几乎已经成为了许多研究者和学者的日常。然而在面对浩如烟海的英文资料时&#xff0c;如何高效准确地进行翻译&#xff0c;成为了亟待解决的问题。 今天我便挖掘到了5款实用的英文文献翻译工具&…

【论文共读】【翻译】【GPT】Improving Language Understanding by Generative Pre-Training

GPT 原论文地址 翻译&#xff1a; Improving Language Understanding by Generative Pre-Training 通过生成式预训练提高语言理解能力 0. 摘要 自然语言理解包括各种不同的任务&#xff0c;例如文本蕴涵、问答、语义相似性评估和文档分类。尽管大量未标记的文本语料库很丰富…

《昇思25天学习打卡营第24天》

接续上一天的学习任务&#xff0c;我们要继续进行下一步的操作 构造网络 当处理完数据后&#xff0c;就可以来进行网络的搭建了。按照DCGAN论文中的描述&#xff0c;所有模型权重均应从mean为0&#xff0c;sigma为0.02的正态分布中随机初始化。 接下来了解一下其他内容 生成…

科普文:万字梳理高性能 Kafka快的8个原因

概叙 科普文&#xff1a;万字详解Kafka基本原理和应用-CSDN博客 科普文&#xff1a;万字梳理31个Kafka问题-CSDN博客 我们都知道 Kafka 是基于磁盘进行存储的&#xff0c;但 Kafka 官方又称其具有高性能、高吞吐、低延时的特点&#xff0c;其吞吐量动辄几十上百万。 在座的…

苹果safari历史记录如何恢复?4大秘籍,重访历史足迹

作为苹果设备上的默认浏览器&#xff0c;Safari为我们提供了便捷、快速的网页浏览体验。但是&#xff0c;如果出现意外删除或其他情况&#xff0c;我们可能会丢失Safari历史记录&#xff0c;这无疑给我们工作和学习带来了诸多不便。本文旨在帮助广大iPhone用户解决这一难题。通…

【音频识别】十大数据集合集,宝藏合集,不容错过!

本文将为您介绍10个经典、热门的数据集&#xff0c;希望对您在选择适合的数据集时有所帮助。 1 RenderMe-360 发布方&#xff1a; 上海人工智能实验室 发布时间&#xff1a; 2023-05-24 简介&#xff1a; RenFace是一个大规模多视角人脸高清视频数据集&#xff0c;包含多样的…

便携移动工作站,端侧 AI 大模型设备折腾笔记:ROG 幻 X 和 4090 扩展坞

为了本地测试和开发更丝滑&#xff0c;最近入手了一套新设备 ROG 幻 X Z13 和 ROG XG Mobile 4090 扩展坞。 基于这套设备&#xff0c;我搭了一套 Windows x WSL2 x CUDA 的开发环境。分享一下折腾记录&#xff0c;或许对有类似需求的你也有帮助。 写在前面 最近因为各种事情…

学习web前端三大件之HTML篇

HTML的全称为超文本标记语言&#xff0c;是一种标记语言。它包括一系列标签&#xff0c;通过这些标签可以将网络上的文档格式统一&#xff0c;使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本&#xff0c;HTML命令可以说明文字&#xff0c;图形…

单链表习题——快慢指针类习题详解!(2)

前言&#xff1a; 正如标题所言&#xff0c;小编今天要讲述快慢指针的相关习题&#xff0c;可能有些读者朋友会有些疑问了&#xff0c;这快慢指针是个什么东西&#xff1f;不要着急&#xff0c;下面紧跟小编的步伐&#xff0c;开启我们今天的快慢指针之旅&#xff01; 目录&…

安全基础学习-CRC理解与计算

由于一些任务要求需要了解CRC校验&#xff0c;于是来学习一下。 新人学习&#xff0c;大佬绕路。 前言 CRC即循环冗余校验码&#xff1a;是数据通信领域中最常用的一种查错校验码&#xff0c;其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查&#xff08;CRC&…

Seata 入门与实战

一、什么是 Seata Seata 是一款开源的分布式事务解决方式&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式事务解决方案。 二、Seata 组成 事务协调者&#xff08;Transacti…

Potree点云可视化库在Vue项目中的应用

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 Potree点云可视化库在Vue项目中的应用 应用场景介绍 Potree是一个用于大规模点云渲染和交互的开源JavaScript库。它提供了高效的点云可视化和处理功能&#xff0c;广泛应用于地理信息系统&#xff08;GIS&…