mybatis使用(简单易上手)

news2024/11/25 22:48:57

mybatis使用

  • 一、mybatis介绍
    • 1、mybatis是什么
    • 2、mybatis支持的数据库
    • 3、~~mybatis插件机制~~
  • 二、springboot集成mybatis
    • 1、引入依赖
    • 2、配置mybatis
  • 三、使用mybatis
    • 1、注解方式使用mybatis
    • 2、XML文件方式

一、mybatis介绍

1、mybatis是什么

MyBatis是一个开源的Java持久层框架,它通过简单的XML或注解配置,实现了对关系数据库的操作。MyBatis优点在于它可以自定义SQL语句,将程序代码与SQL语句分离,避免了在Java代码中写SQL语句的不便和繁琐,同时还能提供动态SQL的支持。

2、mybatis支持的数据库

MyBatis支持的数据库包括MySQL、Oracle、DB2、SQLServer、Sybase、PostgreSQL、H2等常见的关系型数据库,它提供了丰富的映射标签和查询标签,可以使开发人员使用MyBatis进行各种复杂的SQL操作。

3、mybatis插件机制

这一部分可直接跳过

MyBatis还提供了插件的扩展机制,可以通过插件来增强MyBatis的功能,比如实现分页查询、记录SQL语句执行时间等。
MyBatis的插件机制基于拦截器模式,开发人员可以通过实现Interceptor接口来创建自定义插件,并在MyBatis的配置文件中配置插件。
插件的核心是实现拦截器接口中的intercept方法。该方法接收一个Invocation对象作为参数,Invocation对象封装了要执行的SQL语句以及执行该语句的对象。通过拦截器可以对该SQL语句进行修改,或者在执行前后执行一些其他逻辑。
下面是一个简单的插件实现示例:

@Intercepts({
    @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class})
})
public class ExamplePlugin implements Interceptor {

    @Override
    public Object intercept(Invocation invocation) throws Throwable {
        // 获取原始的参数
        Object[] args = invocation.getArgs();
        // 执行原始的SQL语句
        Object result = invocation.proceed();
        // 对查询结果进行加工
        return result;
    }

    @Override
    public Object plugin(Object target) {
        // 使用MyBatis提供的Plugin.wrap方法来生成代理对象
        return Plugin.wrap(target, this);
    }

    @Override
    public void setProperties(Properties properties) {
        // 可以在这里读取配置文件中的参数
    }

}

在配置文件中配置插件非常简单,只需要将插件类的全限定名添加到标签中即可:

<configuration>
  <plugins>
    <plugin interceptor="com.example.ExamplePlugin">
      <!-- 配置插件需要的参数 -->
    </plugin>
  </plugins>
</configuration>

需要注意的是,插件的拦截器类型和方法需要和被拦截的对象对应。比如上面的示例中,@Signature注解中指定的是Executor类的query方法,那么该插件就只能拦截Executor对象的query方法。

二、springboot集成mybatis

springboot集成mybatis的过程很简单,如下简单的几步。

1、引入依赖

直接将下面的依赖引入springboot的pom文件中:

<!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>3.0.1</version>
        </dependency>

注意我这个mybatis版本为3.0.1,如果需要选择合适自己的版本可以点击链接跳转选择合适版本,点击跳转
然后点击相应的版本,选择maven,复制依赖粘贴到pom文件即可。
在这里插入图片描述

2、配置mybatis

加入依赖之后需要在配置文件中配置数据源和mybatis,在yaml文件或者properties文件中添加如下模板:

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver  #mysql8的驱动
    url: jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8&allowPublicKeyRetrieval=true&useSSL=false
    username: root
    password: root
  mybatis:
    mapper-locations: classpath:mapper/*.xml

然后需要在启动类添加一个注解@MapperScan("com.example.mapper")

@SpringBootApplication
@MapperScan(basePackages = "com.example.mapper")
public class GdFApplication {

    public static void main(String[] args) {
        SpringApplication.run(GdFApplication.class, args);
    }

}

到此基本的配置已经完成。

三、使用mybatis

对于在springboot中使用mybatis有以下几种方式:

  • 注解方式:使用MyBatis提供的注解(如@Select、@Insert等)在Mapper接口中定义SQL语句,Spring Boot会自动扫描Mapper接口并注入实现类。

  • XML方式:在MyBatis的XML文件中编写SQL语句,通过在Mapper接口中定义方法名和参数映射XML文件中的SQL语句。

  • 注解和XML方式混合使用:可以在Mapper接口中同时使用注解和XML方式定义SQL语句,但需要注意方法名不能重复。

对于我个人来说,我是比较喜欢使用注解方式使用mybatis的,这里两种方式都简单的说一下吧。

1、注解方式使用mybatis

定义Mapper接口并使用注解定义SQL语句:

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM user WHERE id=#{id}")
    User findById(Long id);

    @Insert("INSERT INTO user(name, age) VALUES(#{name}, #{age})")
    int insert(User user);

    @Update("UPDATE user SET name=#{name}, age=#{age} WHERE id=#{id}")
    int update(User user);

    @Delete("DELETE FROM user WHERE id=#{id}")
    int delete(Long id);
}

在应用程序中使用Mapper接口:

@Service
public class UserService {
  @Autowired
  private UserMapper userMapper;

  public User findById(Long id) {
    return userMapper.findById(id);
  }

  public int insert(User user) {
    return userMapper.insert(user);
  }

  public int update(User user) {
    return userMapper.update(user);
  }

  public int delete(Long id) {
    return userMapper.delete(id);
  }
}

  • 以上就是在Spring Boot中使用注解方式使用MyBatis的基本步骤。
  • 需要注意的是,在Mapper接口上需要添加@Mapper注解,以便Spring Boot能够扫描并注入Mapper接口的实现。
  • 同时,需要在配置文件中指定mapper-locations属性,MyBatis会自动扫描指定路径下的Mapper接口。
  • 另外,MyBatis还提供了其他注解,如@Results、@ResultMap、@Options等,可以用来定制查询结果的映射方式、设置自增主键等。

2、XML文件方式

这里推荐使用IDEA中的一款插件better-mybatis-generator,使用步骤如下:

  1. 首先在IDEA插件中心下载better-mybatis-generator插件,如下图所示:
    在这里插入图片描述
    注意下载后启用该插件。

  2. 然后在IDEA的database中配置数据库,如下图所示
    在这里插入图片描述
    按上图步骤点击MySQL之后,按下图所示操作:
    在这里插入图片描述
    注意在点击Test Connection弹出success提示后再点击apply和OK。

  3. 之后在打开IDEA的database,按下图所示操作
    在这里插入图片描述
    前提是你选中的数据库中已有数据表,然后鼠标右键该表,在弹出的内容中,选择mabatis-generate。然后进入下一步。
    这里咱也不知道问什么mybatis-generator插件怎么变成了mabatis-generate了。

  4. 在上一步之后进入了Toos页,配置生成的实体类的包、mapper的包和xml的包,如下图所示:
    在这里插入图片描述
    在根据自己的需要之后,就可以点击ok进行代码生成,生成前可能会弹出输入数据库的账号密码,输入即可。
    注意:如果输入账号密码后出现Failed to connect…则检查一下配置的数据库中的url是否有时区设置,如下图所示。在这里插入图片描述

若没有,则加上?serverTimezone=GMT&useSSL=false

之后重新按照以上步骤生成代码即可,生成成功的代码如下所示。
在这里插入图片描述

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

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

相关文章

第十七章 预制件prefab(下)

本章节我们来讲解如何编辑预制体文件。这里介绍三种打开编辑预制件的方式。第一就是通过预制件的实例游戏对象的Inspector检视面板上面的预制件“打开”按钮。 第二就是在Project工程面板中选中预制件文件&#xff08;Cube.prefab&#xff09;&#xff0c;然后在Inspector检视面…

山东专升本计算机第八章-多媒体技术基础

多媒体技术基础 多媒体技术 考点 7 图形/图像处理软件 图形/图像文件格式 • BMP • windows系统下的标准位图格式 • 未经压缩 • JPEG&#xff08;联合图像专家组&#xff09; • 有损压缩格式&#xff0c;色数量高达24位&#xff0c;广泛应用于Internet上的主页或图片…

excel实战小测第四

【项目背景】 本项目为某招聘网站部分招聘信息&#xff0c;要求对“数据分析师”岗位进行招聘需求分析&#xff0c;通过对城市、行业、学历要求、薪资待遇等不同方向进行相关性分析&#xff0c;加深对数据分析行业的了解。 结合企业真实招聘信息&#xff0c;可以帮助有意转向数…

【艾特淘】淘宝“客服3分钟响应率”考核调整

淘宝商家“客服3分钟响应率”考核调整&#xff0c;还不知道的商家赶紧来看看&#xff0c;具体都有哪些变化哦~ 一、考核范围 考核范围对象为店铺正常状态&#xff0c;达到一定经营模式的淘宝卖家。 此对象定义为&#xff1a;卖家的商家层级达到5以上&#xff0c;同时还将考虑…

C++实现二叉搜索树

文章目录 前言1.二叉树搜索树的相关介绍2.二叉搜索树的实现1.二叉搜索树插入数据的实现2.二叉搜索树的查找实现3.二叉搜索树的删除实现4.构造函数和析构函数以及赋值重载的实现 3.二叉搜索树的应用1.将之前的K模型二叉搜索树改造成KV模型2.代码演示 4.二叉搜索树的性能分析 前言…

本地Linux服务器安装宝塔面板,并公网远程登录【内网穿透】

文章目录 前言1. 安装宝塔2. 安装cpolar内网穿透3. 远程访问宝塔4. 固定http地址5. 配置二级子域名6. 测试访问二级子域名 前言 宝塔面板作为建站运维工具&#xff0c;它支持一键LAMP/LNMP/集群/监控/网站/FTP/数据库/JAVA等100多项服务器管理功能&#xff0c;可提高运维效率。…

人工智能导论:模型与算法,附录实验三:线性回归模型

本人研一&#xff0c;简单记录下上课的大作业&#xff0c;如果你不会自己写&#xff0c;相信你有缘能找到这篇博客 线性回归模型 1.实验内容 图像是一种非常常见的信息载体&#xff0c;但是在图像的获取、传输、存储过程中可能由于各种原因使得图像受到噪声的影响。如何去除…

程序员如何通过创作图文项目实现自己的代码价值

本文阅读适合人群&#xff1a; 1.程序员 2.图文赛道创业者 项目背景&#xff1a; 毫无疑问&#xff0c;这是一个优质内容的时代&#xff0c;从某种意义上说&#xff0c;优质内容Money。优质内容的形式包含很多&#xff0c;在头条的定义中包括&#xff1a;纯文字&#xff08;…

存储资源调优技术——SmartTier智能分级技术、SmartQoS智能服务质量控制技术

目录 SmartTier智能分级技术 基本概述 工作原理 实现SmartThier数据迁移的三个阶段 应用场景 SmartQoS智能服务质量控制 基本概念 两种关键技术 应用场景 SmartTier智能分级技术 基本概述 自动将不同活跃的数据和不同特点的存储介质动态匹配&#xff0c;提高性能。 NL…

ETL工具 - Kettle 转换算子介绍

一、Kettle 转换算子 上篇文章对 Kettle 中的输入输出算子进行了介绍&#xff0c;本篇文章继续对转换算子进行讲解。 下面是上篇文章的地址&#xff1a; ETL工具 - Kettle 输入输出算子介绍 转换是ETL里面的T&#xff08;Transform&#xff09;&#xff0c;主要做数据转换&am…

开放式基金净值估算数据 API 数据接口

开放式基金净值估算数据 API 数据接口 全量基金数据&#xff0c;实时数据&#xff0c;所有基金数据。 1. 产品功能 返回实时开放式基金净值估值可定义所有基金估值数据&#xff1b;多个基金属性值返回&#xff1b;多维指标&#xff0c;一次查询毫秒级返回&#xff1b;数据持续…

领域驱动设计事件驱动框架命令查询责任分离测试驱动开发

领域驱动设计: DDD 事件驱动框架: Event Driven Architecture 命令查询责任分离: CQRS(Command Query Responsibility Segregation) 测试驱动开发: TDD 先睹为快&#xff1a;架构图 入口&#xff1a;entrypoint 入口是系统外部客户访问系统内部的端口。常见的入口如http, …

算法刷题|647.回文子串、516.最长回文子序列

回文子串 题目&#xff1a;给你一个字符串 s &#xff0c;请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符…

【redis】redis分布式锁(三)自动续期

系列文章目录 【redis】redis分布式锁&#xff08;一&#xff09;手写分布式锁1.0~6.0 【redis】redis分布式锁&#xff08;二&#xff09;可重入锁设计模式 文章目录 系列文章目录前言一、CAPredis集群 APZooKeeper集群 CP 数据一致性Eureak集群 APnacos集群 AP 二、lua脚本脚…

1 认识仿真工具Packet Tracer【实验】【计算机网络】

1 认识仿真工具Packet Tracer【实验】【计算机网络】 前言推荐1 认识仿真工具Packet Tracer1.1账号注册与Packet Tracer软件下载1.1.1 下载1.1.2 安装 1.2 Packet Tracer界面简介1.2.1 总述1.2.2 详细 1.3网络拓扑构建与设备模块添加1.3.1如何往工作区中添加设备1.3.2添加连线1…

【计算机网络】1.1——因特网概述

因特网概述&#xff08;了解&#xff09; 网络、互联网和因特网 网络由若干结点和连接这些结点的链路组成 多个网络还可以通过路由器互连起来&#xff0c;互联网是"网络的网络“ internet 和 Internet internet&#xff08;互联网或互连网&#xff09;是通用名词 泛指…

Java 基础入门篇(四)——— 方法的重载与参数传递机制

文章目录 一、方法的定义二、方法的参数传递机制 ★2.1 基本类型的参数传递2.2 引用类型的参数传递 三、方法重载 一、方法的定义 方法的作用&#xff1a;封装一段代码的语法结构&#xff0c;可以被重复调用&#xff0c;以此提高代码的复用性&#xff0c;提高开发效率&#xf…

操作系统之线程

线程 一、产生原因 最开始的并发&#xff0c;只能更具切换进程的方式去交替执行进程来宏观上并发&#xff0c;但是切换进程需要切换执行进程的环境&#xff0c;有很大的系统开销&#xff0c;所以产生了线程&#xff0c;让其可以不用频繁的切换进程&#xff0c;使得线程成为CPU…

【论文笔记 fintune 】羊驼

1.论文 这些开发由两个关键组件提供动力&#xff1a;大型预训练语言模型&#xff08;LM&#xff09;和人工编写的指令数据。 1.1 背景 目前的训练太吃数据了&#xff0c;需要使用一些替代方法减少对数据的依赖有微调过的数据集效果远好于没有微调 用什么数据集微调呢&#x…

Collaborative Metric Learning(www 2017)

Background 传统基于MF的模型&#xff0c;将特征向量的点积作为预测结果&#xff0c;这存在一个很大的问题&#xff0c;即dot product 不满足三角不等式&#xff09;&#xff0c;这会导致学到的特征向量次优&#xff08;难以捕捉用户细粒度的偏好&#xff09;。本文提出了一种…