初学者指南:MyBatis 入门教程

news2024/12/27 15:53:03

主要介绍了Mybatis的基本使用、JDBC、数据库连接池、lombok注解!

文章目录

前言

什么是Mybatis?

快速入门

使用Mybatis查询所有的用户信息

配置SQL提示

JDBC介绍 

Mybatis

 数据库连接池

lombok

总结


前言

主要介绍了Mybatis的基本使用、JDBC、数据库连接池、lombok注解!


提示:以下是本篇文章正文内容,下面案例可供参考

什么是Mybatis?

  • MyBatis是一款优秀的 持久层 框架,用于简化JDBC的开发。
  • MyBatis本是 Apache的一个开源项目iBatis, 2010年这个项目由apache迁移到了google code,并且改名为MyBatis 。2013年11月迁移到Github。
  • 官网:https://mybatis.org/mybatis-3/zh/index.html 

MyBatis是一个持久化框架,用于简化Java与数据库的交互。它通过XML或注解定义SQL语句,映射查询结果到Java对象。MyBatis提供了灵活的SQL配置和动态查询能力,适合复杂查询和自定义SQL的场景。

快速入门

使用Mybatis查询所有的用户信息

准备工作(创建springboot工程、数据库表user、实体类User)

public class User {
    private Integer id;
    private String name;
    private Short age;
    private Short gender;
    private String phone;
}

引入Mybatis的相关依赖,配置Mybatis(数据库连接信息) 

 application.properties文件中:

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
spring.datasource.username=root
spring.datasource.password=1234

编写SQL语句(注解/XML) 

@Mapper
public interface UserMapper {
    @Select("select *  from user")
    public List<User> list();
}

单元测试

@SpringBootTest
class SpringbootMybatisQuickstart1ApplicationTests {
    @Autowired
    private UserMapper userMapper;
    
    @Test
    public void test1(){
        List<User> userList = userMapper.list();
        userList.stream().forEach(user -> {
            System.out.println(user);
        });
    }
}

 @SpringBootTest 是 Spring Boot 提供的一个注解,主要用于测试 Spring Boot 应用程序。它的主要作用是启动整个 Spring 容器,这样你可以在测试中使用 Spring 的各种功能,包括依赖注入和应用上下文管理。

配置SQL提示

默认在mybatis中编写SQL语句是不识别的。可以做如下配置:

  • 产生原因:Idea和数据库没有建立连接,不识别表信息
  •  解决方式:在Idea中配置MySQL数据库连接 

 

JDBC介绍 

JDBC: ( Java DataBase Connectivity ),就是使用Java语言操作关系型数据库的一套API。

 

本质:

  • sun公司官方定义的一套操作所有关系型数据库的规范,即接口。
  • 各个数据库厂商去实现这套接口,提供数据库驱动jar包。
  • 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。 

 

String url = "jdbc:mysql://localhost:3306/mydb";
String user = "root";
String password = "password";

try (Connection connection = DriverManager.getConnection(url, user, password);
     Statement statement = connection.createStatement();
     ResultSet resultSet = statement.executeQuery("SELECT * FROM users")) {

    while (resultSet.next()) {
        int id = resultSet.getInt("id");
        String name = resultSet.getString("name");
        System.out.println("ID: " + id + ", Name: " + name);
    }
} catch (SQLException e) {
    e.printStackTrace();
}

 

Mybatis

 application.properties文件中

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=1234

mapper接口

@Mapper
public interface UserMapper {
    @Select("select *  from user")
    public List<User> list();
}

 数据库连接池

数据库连接池:

  • 数据库连接池是个容器,负责分配、管理数据库连接(Connection)
  • 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
  • 释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏

优势:

  • 资源重用
  • 提升系统响应速度
  • 避免数据库连接遗漏 

 

标准接口:DataSource

  •  官方(sun)提供的数据库连接池接口,由第三方组织实现此接口。
  • 功能:获取连接 

 常见产品:

Druid(德鲁伊)

  • Druid连接池是阿里巴巴开源的数据库连接池项目
  • 功能强大,性能优秀,是Java语言最好的数据库连接池之一 

切换Druid数据库连接池

官方地址:https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter 

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.8</version>
</dependency>
spring.datasource.druid.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.druid.username=root
spring.datasource.druid.password=password
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=20

 HikariCP 是一个高性能的 JDBC 连接池实现,默认情况下适用于大多数场景。

<!-- application.properties -->
spring.datasource.hikari.jdbc-url=jdbc:mysql://localhost:3306/mydb
spring.datasource.hikari.username=root
spring.datasource.hikari.password=password
spring.datasource.hikari.maximum-pool-size=10

lombok

 

Lombok是一个实用的Java类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashcode、toString等方法,并可以自动化生成日志变量,简化java开发、提高效率。

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

 

注解作用
@Getter/@Setter为所有的属性提供get/set方法
@ToString会给类自动生成易阅读的 toString 方法
@EqualsAndHashCode根据类所拥有的非静态字段自动重写 equals 方法和 hashCode 方法
@Data提供了更综合的生成代码功能(@Getter + @Setter + @ToString + @EqualsAndHashCode)
@NoArgsConstructor为实体类生成无参的构造器方法
@AllArgsConstructor为实体类生成除了static修饰的字段之外带有各参数的构造器方法。

注意事项:

  • Lombok会在编译时,自动生成对应的java代码。我们使用lombok时,还需要安装一个lombok的插件(idea自带)。 

 


总结

本博客总结了 MyBatis、JDBC、数据库连接池及 Lombok 注解的基本使用。MyBatis 是一个简化 SQL 操作的框架,提供了通过 XML 或注解映射 SQL 语句的能力。JDBC 作为 Java 的原生数据库访问 API,负责加载驱动、建立连接、执行查询及处理结果。数据库连接池(如 HikariCP 和 Druid)通过管理连接提高了数据库操作的性能。Lombok 是一个简化 Java 代码的库,利用注解自动生成常用的代码如 getter/setter、构造函数和 toString 方法。

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

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

相关文章

Prometheus 监控平台(Prometheus Monitoring Platform)

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:Linux运维老纪的首页…

使用TableGeneration生成表格数据集

使用TableGeneration生成表格数据集 1.TableGeneration介绍2.TableGeneration使用2.1配置环境2.2下载Chrome驱动2.3将驱动放入指定目录2.4 验证环境 3参数说明 1.TableGeneration介绍 TableGeneration是一个可以生成多种格式表格图片的工具&#xff0c;主要用于批量生成给AI训…

Element UI入门笔记(个人向)

Element UI入门笔记 将页面分割为一级菜单、二级菜单、导航栏三个部分&#xff1b;使用npm下载安装&#xff0c;使用语句npm i element-ui -s; 布局组件 el-form 用于创建和管理表单&#xff1b;从属性上看&#xff1a; :model&#xff1a;用于双向数据绑定&#xff0c;将表单…

轮询解决方案

概述 轮询的使用场景&#xff1a; 股票 K 线图聊天重要通知&#xff0c;实时预警 这些场景都是都要实时性的。 http 是请求响应模式&#xff0c;一定需要先请求&#xff0c;后响应。 解决方案&#xff1a; 短轮询&#xff1a;interval 定时发送请求。问题&#xff1a;大量…

18 C语言实现深度优先搜索

#include "stdio.h" #include "stdlib.h" #include "stdbool.h"#define MaxVertex 10typedef char ElemType;typedef struct Node { //链表中的值int nextVertex;//指向的位置struct Node *next; } Node;struct HeadNode {//链表头ElemType data…

第309题|证明函数单调有界的核心思路 |武忠祥老师每日一题

解题思路&#xff1a;两个极限存在准则&#xff1a;1.夹闭。 2.单调有界。 这里题目告诉了我们f(x)的导数,如果我们判断出了 导数的正负&#xff0c;就能得出f&#xff08;x&#xff09;的单调性。 显然是大于0的&#xff0c;看后半部分:是否大于0&#xff0c;这里直接比较和…

借助大模型将文档转换为视频

利用传统手段将文档内容转换为视频&#xff0c;比如根据文档内容录制一个视频&#xff0c;不仅需要投入大量的时间和精力&#xff0c;而且往往需要具备专业的视频编辑技能。使用大模型技术可以更加有效且智能化地解决上述问题。本实践方案旨在依托大语言模型&#xff08;Large …

[001-03-007].第26节:分布式锁迭代1->基于setnx命令实现分布式锁:

我的博客大纲 我的后端学习大纲 1、setnx命令&#xff1a; 2、逻辑梳理&#xff1a; 1.借助于redis中的命令setnx(key, value)&#xff0c;key不存在就新增&#xff0c;存在就什么都不做。同时有多个客户端发送setnx命令&#xff0c;只有一个客户端可以成功&#xff0c;返回1&…

velero v1.14.1迁移kubernetes集群

1 概述 velero是vmware开源的一个备份和恢复工具&#xff0c;可作用于kubernetes集群下的任意对象和应用数据&#xff08;PV上的数据&#xff09;。github地址是https://github.com/vmware-tanzu/velero。 对于应用数据&#xff0c;可分文件级别的复制和块级别的复制。文件级…

大模型国产化算力方案

方案1 - 摩尔线程 MTT S4000 | 摩尔线程 大模型训练平台架构 摩尔线程大模型训练平台&#xff0c;完全兼容 CUDA 和 Pytorch 训练系统&#xff0c;支持 Megatron-LM、DeepSpeed、FSDP 和 Colossal-AI 等大模型分布式训练框架。具有全兼容、高性能、高灵活性和简单易用等特点…

【算法系列】双指针:283.移动零

目录 双指针介绍 283.移动零 1.题目介绍 2. 解决思路&#xff1a; 动图演示 代码&#xff1a; 双指针介绍 常⻅的双指针有两种形式&#xff0c;⼀种是对撞指针&#xff0c;⼀种是快慢指针。 对撞指针&#xff1a;一般用于顺序结构中&#xff0c;也称左右指针。 1、对撞指…

dp+观察,CF 1864 D. Matrix Cascade

目录 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 二、解题报告 1、思路分析 2、复杂度 3、代码详解 一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 https://codeforces.com/problemset/problem/1864/D 二、解题报告 1、思路…

在虚拟机安装mysql数据库

一、安装步骤&#xff08;下载包-传输软件包-安装包-启用仓库-使用yum安装服务器&#xff09; 1、要在mysql官网下载yum仓库包 2、下载好rpm包后&#xff0c;将其通过xftp传输到root目录下 3、使用sudo yum install yum的仓库名&#xff08;sudo yum install mysql-community-…

当人工智能聊天机器人出现问题时

在快速发展的人工智能领域&#xff0c;出现了一项新的挑战。“人工智能私语者”正在通过说服行为良好的聊天机器人打破自己制定的规则来探索人工智能伦理的界限。 这些漏洞被称为即时注入或“越狱”&#xff0c;它们暴露了人工智能系统的漏洞&#xff0c;引发了人们对其安全性…

如何使用python中的math

首先&#xff0c;导入math函数库。 一、计算平方根 输入一个数值&#xff0c;保存在变量n中。 用函数sqrt&#xff0c;计算变量平方根的值。 二、计算幂 可以用函数exp&#xff0c;计算e的x次幂。 三、计算对数 设置两个数&#xff0c;保存在变量n和a中。 接着&#xff0c;用…

Xcode报错:No exact matches in reference to static method ‘buildExpression‘

Xcode报错1&#xff1a;No exact matches in reference to static method buildExpression Xcode报错2&#xff1a;Type () cannot conform to View 这两个报错都是因为在SwiftUI的View的Body里面使用了ForEach循环,却没有在ForEach循环闭包的内部返回视图&#xff0c;而是做了…

云服务器Jenkins部署Springboot项目以及Vue项目

一、创建Springboot项目并且上传git 在gitee上创建一个仓库 点击初始化仓库 在idea克隆gitee仓库 创建一个普通的Springboot项目只需要勾选springweb 上传创建的新模块到gitee仓库 二、安装Maven maven的官网地址&#xff1a;https://maven.apache.org/download.cgi 点击下载…

OJ 括号生成

题目&#xff1a; 数字 n 代表生成括号的对数&#xff0c;请你设计一个函数&#xff0c;用于能够生成所有可能的并且 有效的 括号组合。 示例&#xff1a; 代码分析&#xff1a; class Solution { public://进行回溯调用vector<string> generateParenthesis(int n) {if(…

形式向好、成本较低、可拓展性较高的名厨亮灶开源了

简介 AI视频监控平台, 是一款功能强大且简单易用的实时算法视频监控系统。愿景在最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;减少企业级应用约 95%的开发成本&#xff0c;在强大视频算法加…

你的 Java 对象占用了多少内存

在本文中&#xff0c;我们将讨论 JVM 如何在内存中存储对象&#xff1a;它们的对齐方式。 对象表示是理解 JVM 底层机制的重要主题&#xff0c;它提供了有助于应用程序调优的见解。 这里&#xff0c;我们主要关注填充和对齐&#xff0c;而不是 JVM 如何在内存中表示对象。要获…