MyBatisMyBatis plus

整合 MyBatis 到 Spring 或 Spring Boot 项目中,可以极大地简化开发流程,尤其是当使用 Spring Boot 时,它提供了自动配置功能,使得集成更加简便。


在 Spring Boot 中整合 MyBatis

1. 添加依赖

首先,在 pom.xml 文件中添加必要的依赖项。对于 Spring Boot 项目,你可以使用 spring-boot-starter-mybatis

<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>2.2.0</version> <!-- 请根据需要调整版本 -->
</dependency><!-- 数据库驱动 -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency>

2. 配置数据源

application.ymlapplication.properties 文件中配置数据库连接信息:

spring:datasource:url: jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTCusername: rootpassword: passworddriver-class-name: com.mysql.cj.jdbc.Drivermybatis:mapper-locations: classpath:mapper/*.xml # XML 映射文件的位置type-aliases-package: com.example.demo.model # 实体类所在的包

3. 创建实体类和 Mapper 接口

假设我们有一个用户表 users,我们需要创建对应的实体类和 Mapper 接口。

User.java

package com.example.demo.model;public class User {private Long id;private String name;private Integer age;// Getters and Setters...
}

UserMapper.java

package com.example.demo.mapper;import com.example.demo.model.User;
import org.apache.ibatis.annotations.*;@Mapper // 标记这是一个 MyBatis 的 Mapper 接口
public interface UserMapper {@Select("SELECT * FROM users WHERE id = #{id}")User findById(@Param("id") Long id);@Insert("INSERT INTO users(name, age) VALUES(#{name}, #{age})")void insert(User user);
}

4. 使用 Mapper

在服务层或控制器中注入并使用 UserMapper

UserService.java

package com.example.demo.service;import com.example.demo.mapper.UserMapper;
import com.example.demo.model.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public User getUserById(Long id) {return userMapper.findById(id);}public void createUser(User user) {userMapper.insert(user);}
}

5. 运行应用程序

确保你的数据库已经准备好,并且与配置中的数据库名称、用户名和密码相匹配。然后运行 Spring Boot 应用程序,尝试调用服务方法来验证是否能够正常工作。


在传统 Spring 项目中整合 MyBatis

如果你正在使用传统的 Spring 项目而非 Spring Boot,则需要手动进行更多的配置。

1. 添加依赖

pom.xml 文件中添加 MyBatis 和 Spring 的相关依赖:

<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.5.7</version>
</dependency>
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>2.0.6</version>
</dependency>

2. 配置 SqlSessionFactoryBean

在 Spring 配置文件中配置 SqlSessionFactoryBean

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"><property name="dataSource" ref="dataSource"/><property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean><bean id="userMapper" class="org.mybatis.spring.mapper.MapperFactoryBean"><property name="mapperInterface" value="com.example.mapper.UserMapper"/><property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>

3. 编写 Mapper XML 文件

src/main/resources/mapper/ 目录下创建 UserMapper.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.example.mapper.UserMapper"><select id="findById" parameterType="long" resultType="com.example.model.User">SELECT * FROM users WHERE id = #{id}</select><insert id="insert" parameterType="com.example.model.User">INSERT INTO users(name, age) VALUES(#{name}, #{age})</insert>
</mapper>

4. 注入并使用 Mapper

在服务层或其他地方通过 Spring 注解或 XML 配置注入并使用 Mapper。


无论是 Spring Boot 还是传统的 Spring 项目,MyBatis 提供了灵活的接口和配置选项来满足不同的需求。Spring Boot 由于其自动配置特性,通常会使集成过程更为简洁快速。希望这些示例能帮助你更好地理解和实施 MyBatis 与 Spring/Spring Boot 的整合。

MyBatis-Plus 简介

MyBatis-Plus 是 MyBatis 的增强工具,旨在简化开发、提高效率的同时不损失灵活性。它在 MyBatis 的基础上只做增强而不做改变,为简化开发工作、提高效率而生。下面将详细介绍 MyBatis-Plus 的核心功能、使用方法以及与 Spring Boot 的整合。


核心特性

  1. 无侵入:引入 MyBatis-Plus 不会对现有的 MyBatis 结构造成任何影响。
  2. 低损耗:启动即会自动注入基本 CURD,性能几乎无损耗,直接面向对象操作。
  3. 通用 CRUD:内置通用 Mapper、通用 Service,仅需简单配置即可实现单表大部分 CRUD 操作,更有强大的条件构造器,满足各类使用需求。
  4. 多种主键策略:支持多达 7 种主键策略(内含分布式唯一 ID 生成器 - Sequence),可自由配置,完美解决主键问题。
  5. 支持 Lambda 形式调用:通过 Lambda 表达式,方便地编写查询条件,无需担心字段名写错。
  6. 内置分页插件:基于 MyBatis 物理分页,开发者无需关心具体操作。
  7. 代码生成器:支持根据数据库表结构自动生成实体类、Mapper、Service、Controller 等相关代码,减少重复劳动。
  8. 自定义全局通用操作:支持通用接口注入,可以在不修改原有代码的情况下扩展功能。

快速入门

1. 添加依赖

pom.xml 文件中添加 MyBatis-Plus 的依赖:

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.2</version> <!-- 请根据需要调整版本 -->
</dependency>

2. 配置数据源

application.yml 中配置数据源信息:

spring:datasource:url: jdbc:mysql://localhost:3306/your_database?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaiusername: rootpassword: your_passworddriver-class-name: com.mysql.cj.jdbc.Drivermybatis-plus:mapper-locations: classpath:/mapper/*.xmltype-aliases-package: com.your.package.model

3. 创建实体类和 Mapper 接口

假设有一个用户表 users,我们可以创建对应的实体类和继承了 BaseMapper 的 Mapper 接口。

User.java

package com.example.model;import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;@TableName("users")
public class User {@TableIdprivate Long id;private String name;private Integer age;// Getters and Setters...
}

UserMapper.java

package com.example.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.model.User;
import org.apache.ibatis.annotations.Mapper;@Mapper
public interface UserMapper extends BaseMapper<User> {// 继承 BaseMapper 后已经包含了基本的 CRUD 方法,无需额外定义
}

4. 使用 Mapper

在服务层或控制器中注入并使用 UserMapper

UserService.java

package com.example.service;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.mapper.UserMapper;
import com.example.model.User;
import org.springframework.stereotype.Service;@Service
public class UserService extends ServiceImpl<UserMapper, User> {// 直接继承 ServiceImpl 即可获得基础的 CRUD 能力
}

5. 测试

可以通过编写测试用例来验证是否能够正常进行数据库操作:

@Autowired
private UserService userService;@Test
void testCRUD() {// 新增User user = new User();user.setName("John");user.setAge(25);userService.save(user);// 查询User retrievedUser = userService.getById(user.getId());System.out.println(retrievedUser.getName());// 更新retrievedUser.setAge(26);userService.updateById(retrievedUser);// 删除userService.removeById(user.getId());
}

高级功能

条件构造器(Wrapper)

MyBatis-Plus 提供了强大的条件构造器 QueryWrapperUpdateWrapper,可以用来构建复杂的查询和更新条件。

QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "John").gt("age", 20);
List<User> userList = userService.list(queryWrapper);

分页插件

MyBatis-Plus 内置了分页插件,使用起来非常方便。

Page<User> page = new Page<>(currentPage, pageSize);
IPage<User> userPage = userService.page(page, queryWrapper);
System.out.println("总记录数:" + userPage.getTotal());
System.out.println("当前页数据:" + userPage.getRecords());

自动填充功能

对于创建时间、更新时间等字段,可以使用自动填充功能来避免手动设置。

首先,在实体类中使用注解指定填充策略:

@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;

然后,创建一个处理器类实现 MetaObjectHandler 接口,并重写相应的方法:

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());}@Overridepublic void updateFill(MetaObject metaObject) {this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());}
}

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

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

相关文章

Stable Diffusion 实战-手机壁纸制作 第二篇:优化那些“崩脸”和“马赛克”问题,让图像更加完美!

欢迎回来!在《StableDiffusion实战-手机壁纸制作》系列的第一篇中,我们成功完成了基础操作,制作出了令人炫目的手机壁纸。 今天,我们将进入一个更高阶的领域——优化处理。因为谁不想让生成的艺术品更完美呢?尤其是避免“崩脸”和“马赛克”这种让人抓狂的问题! 创作的路…

408第一季 - 数据结构 - B树与B+树

B树 性质 可以看见一个节点可以有多个数字了 然后也满足左小右大的特征 然后所有的叶子节点都在同一层&#xff0c;然后2个数字的节点就可以有3个分支 然后呢&#xff0c;每个节点里面到底有几个数字是有规定的公式的 就这个公式&#xff0c;m是5阶的&#xff0c;算出来是2和…

SSRF5 Gopher 协议对内网 Web 服务进行 sql 注入 GET 类型和POST类型

实验环境&#xff1b; Centos7.6上同时安装sqli-lib和pikachu 一.Gopher 协议对内网 Web 服务进行 sql 注入 GET 类型 我们先访问sqli-lib第1关 然后我们构造URL&#xff1a; http://192.168.112.12/pikachu-master/vul/ssrf/ssrf_curl.php?urlhttp://192.168.112.12/sql…

Python打卡DAY31

DAY31&#xff1a;文件的规范拆分和写法 恩师浙大疏锦行 知识点&#xff1a; 规范的文件命名规范的文件夹管理机器学习项目的拆分编码格式和类型注解 一、机器学习项目流程&#xff1a; 1、数据加载&#xff1a;从文件、数据库、API 等获取原始数据。 - 命名参考&#xff1a;…

字符串大数 -减法

描述 以字符串的形式读入两个数字&#xff0c;编写一个函数计算它们的和&#xff0c;以字符串形式返回。 代码实现 大小判断&#xff1a;a - b 与 b - a 的绝对值相等将大的数放前面&#xff0c;抽离出结果的符号 import random s, t str(random.randint(1000, 9999)), s…

android google tts如何不联网内部预置多国语音包

在内置Google GMS服务的设备中&#xff0c;可以正常使用TTS&#xff0c;并且可以联网下载多国的语音包。然而&#xff0c;对于未通过GMS认证&#xff0c;只能使用基础的TTS英语播报&#xff0c;而且联网后是无法下载语音包的&#xff0c;会提示需要google service。本文基于以上…

Java 全栈开发学习:从后端基石到前端灵动的成长之路

目录 一、开篇&#xff1a;与 Java 全栈的初遇 二、后端学习&#xff1a;SpringBoot 构建稳健基石 &#xff08;一&#xff09;SpringBoot3 入门&#xff1a;简约而不简单的启程 &#xff08;二&#xff09;Spring Boot Web 应用开发&#xff1a;构建交互桥梁 &#xff08;…

AquaCrop模型源代码分析、模型优化与敏感性分析、未来气候变化影响分析

AquaCrop是由世界粮食及农业组织&#xff08;FAO&#xff09;开发的一个先进模型&#xff0c;旨在研究和优化农作物的水分生产效率。这个模型在全球范围内被广泛应用于农业水管理&#xff0c;特别是在制定农作物灌溉计划和应对水资源限制方面显示出其强大的实用性。AquaCrop 不…

开源模型应用落地-让AI更懂你的每一次交互-mem0-QDrant-Streamlit(一)

一、前言 在人工智能迅猛发展的今天,大型语言模型(LLM)已经成为各行各业的重要工具。然而,尽管这些模型在生成文本、理解语义等方面表现出色,但它们仍然面临一个关键挑战——缺乏持久的记忆能力。传统的对话系统往往只能基于当前对话轮次进行回应,无法有效保留和利用历史…

RPC - Response模块

Requestor 类是一个请求-响应管理器&#xff0c;负责发送请求并处理响应&#xff0c;支持三种交互模式&#xff1a;同步、异步和回调。它跟踪所有发出的请求&#xff0c;当响应到达时将其匹配到对应的请求并进行处理。 newDescribe 函数解析 newDescribe 函数负责创建和注册一…

超高速10G采集卡

超高速10G采集卡是一款高端14位数据采集平台&#xff0c;旨在满足最具挑战性的测量环境。 特性: 单通道和双通道操作 单通道10GSPS或双通道5GSPS 7 GByte/s持续数据传输速率开放式FPGA支持实时DSP 脉冲检测固件选项波形平均固件选项 特征 单通道和双通道工作模式双通道5G…

One-Hot、BOW、TF-IDF、N-Gram区别

1. One-Hot Encoding (独热编码) 核心思想&#xff1a; 为语料库&#xff08;所有文档的集合&#xff09;中的每个唯一单词创建一个维度。对于一个特定的单词&#xff0c;在其对应的维度上标记为1&#xff0c;在所有其他维度上标记为0。 表示&#xff1a; 一个非常长的二进制向…

产品经理如何做用户调研和访谈

用户调研和访谈是产品经理挖掘用户需求、优化产品设计的核心环节。在一个完整的产品流程里面&#xff0c;用户调研和访谈是非常重要的。 当年史玉柱推出脑白金时&#xff0c;就曾带领团队在江苏很多城市进行了大量的走访&#xff08;用户调研&#xff09;&#xff0c;和一帮老…

【python 读取抖音/小红书/微博今日头条/百度热点等平台的热点新闻】

轻松获取全网热点&#xff0c;Python助你掌握实时舆情 在信息爆炸的时代&#xff0c;抖音、小红书、微博、今日头条和百度热点等平台每天都会产生海量热门内容。无论是品牌营销、竞品分析还是舆情监控&#xff0c;掌握这些热点新闻至关重要。利用Python的强大爬虫技术&#xff…

【1.3 MySQL知识库 - 轻松理解版】

&#x1f680; MySQL知识库 - 轻松理解版 一、MySQL核心知识顺口溜 &#x1f3b5; &#x1f3a4; 经典记忆口诀 MySQL数据库&#xff0c;InnoDB引擎强 ACID事务特性&#xff0c;隔离级别四档 索引加速查询&#xff0c;B树是主梁 主从复制备份&#xff0c;读写分离扛 锁机制防…

计算机网络期末速成 网络层 判断及单选题

判断题 路由器和链路层交换机都被称为分组交换机。路由器与链路层交换机间的根本区别是:路由器在网络层存储转发IP数据报&#xff0c;链路层交换机在链路层存储转发帧。 A. 对 B. 错 答案: 对 解析: 路由器和链路层交换机确实都是分组交换机&#xff0c;但工作层次不同。路由器…

代理 AI 时代的隐私重构:从边界控制到信任博弈

过去&#xff0c;我们将隐私等同于边界与权限控制&#xff0c;依赖墙壁、锁和规则构筑防线。而如今&#xff0c;随着代理 AI 深度介入生活&#xff0c;成为能感知、决策的自主实体&#xff0c;它不仅处理数据&#xff0c;更在重塑我们的数字形象与内在认知。在此背景下&#xf…

C++实现手写strstr函数

strstr 函数用于在主字符串中查找子字符串的首次出现位置,以下是高效的实现方案: KMP算法优化版本 #include <iostream> #include <string> #include <vector> using namespace std; // 计算KMP算法的部分匹配表(PMT) vector<int> getNext(const…

Linux操作系统网络服务模块一SSH带外管理概述

前言&#xff1a; 在复杂的网络运维环境中&#xff0c;​SSH带外管理&#xff08;Out-of-Band Management&#xff09;​​ 是确保系统高可用性的核心技术手段。区别于依赖业务网络的“带内管理”&#xff0c;带外管理通过独立物理通道​&#xff08;如专用管理网口或串…

org.springframework.cloud.gateway 组件解释

org.springframework.cloud.gateway 是 Spring Cloud 生态系统中的一个新一代的、功能强大的 API 网关。 1. 什么是 API 网关 (API Gateway)&#xff1f; 在讲解 Spring Cloud Gateway 之前&#xff0c;我们先要理解它扮演的角色——API 网关。 在一个微服务架构中&#xff0…