Mybatis 知识总结1(入门、JDBC、数据库连接池、lombok介绍)

news2024/10/5 19:21:29

Mybatis 知识总结(一)

3.1 Mybatis 介绍

什么是 Mybatis ?

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

3.2 MyBatis 入门

快速入门

  • 需求说明

  使用 MyBatis 查询所有的用户数据。

  要查询所有的用户数据,可以在图形化界面工具中写 select * form user; 查询 sql 语句,然后把这条语句发送给数据库服务器执行,数据库然后将查询的结果返回给图形化界面工具展示。而 MyBatis 操作数据库其实就是在 java 程序中编写 sql 语句发送给数据库执行,然后数据库将查询结果返回给 java 程序。

图形化界面工具查询数据库 MyBatis查询数据库
  • 1、准备工作(创建 springboot 工程、数据库表 user、实体类 User)

  创建 springboot 工程:File >> new >> module… 进入到新建模块弹窗,选择 Spring Initializr 及模块的 JDK 版本和模块的相关基本信息,在选择依赖时需要添加 SQL 中的 MyBatis FrameworkMySQL Driver(JDBC 的实现类) 依赖。

1 2 3

  创建数据库表 user

-- 建表语句
CREATE TABLE user(
id int PRIMARY KEY auto_increment COMMENT 'ID,唯一标识',
name VARCHAR(20) not null unique COMMENT '用户名',
age INT COMMENT '年龄',
gender TINYINT DEFAULT '1' COMMENT '性别',
phone char(11) COMMENT '手机号'
)COMMENT '用户表';
-- 插入数据
INSERT INTO `user` (id,name,age,gender,phone)VALUES (1,'张三',17,1,'11199990000');
INSERT INTO `user` (id,name,age,gender,phone)VALUES (2,'李四',34,1,'22299998888');
INSERT INTO `user` (id,name,age,gender,phone)VALUES (3,'王五',34,1,'33399993333');
INSERT INTO `user` (id,name,age,gender,phone)VALUES (4,'麻子',24,1,'44499994444');
INSERT INTO `user` (id,name,age,gender,phone)VALUES (5,'小如',20,2,'55599995555');

  创建实体类Usersrc/main/java/com/ganming/pojo/User.java

public class User {
    private Integer id;
    private String name;
    private Short age;
    private Short gender;
    private String phone;
	// 自动生成 Getter and Setter、Constructor、toString方法
}
  • 2、引入 MyBatis 的相关依赖,配置 MyBatis (数据库连接信息)

  在创建 springboot 项目时已经引入了 MyBatis 的相关依赖,相关依赖如下:pom.xml

...
<dependencies>
    <!--MyBatis 的起步依赖-->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.3.0</version>
    </dependency>
    <!--Mysql 驱动包,刚刚发布的最新版的驱动包-->
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <scope>runtime</scope>
    </dependency>
    <!--Mysql 驱动包,上一个版本的驱动包-->
    <!-- <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-jave</artifactId>
        <scope>runtime</scope>
    </dependency>-->

    <!--springboot 单元测试依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
... 

  在 src/main/resources/application.properties 配置文件(创建 springboot 工程时自带该文件)中配置连接数据库四要素

连接数据库配置文件
  • 3、编写 SQL 语句(注解/XML)

  需要定义 UserMapper 持久层的接口src/main/java/com/ganming/mapper/UserMapper.java

package com.ganming.mapper;

import com.ganming.pojo.User;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;

import java.util.List;

@Mapper     // 在运行时,框架会自动的生成该接口的实现类对象(代理对象),并且将该对象交给 IOC 容器管理
public interface UserMapper {
    // 查询全部用户信息
    @Select("select * from user")
    public List<User> list();
}

  @Mapper 注解:在运行时,框架会自动的生成该接口的实现类对象(代理对象),并且将该对象交给 IOC 容器管理。

  @Select 注解:表示下面的方法要执行一个查询语句。里面的值就是要执行的 sql 语句。

  配置 SQL 提示:12行中的 select * from user 在程序中只是一个字符串,没有输入提示,写错了 idea 也不会有报错提示。可通过下面图中设置来配置 SQL 提示。

  选中 sql 语句 >> Show Context Actions >> Inject language or reference >> MySQL(SQL)。

1 2 3
4 5 6

  配置数据库表的提示:在上述 sql 语句中指定表名 user 时没有提示,是因为 Idea 和数据库之间米有建立连接,不识别表信息;可在 Idea 中配置 MySQL 数据库连接。

1 2
1
  • 4、编写单元测试

  在 src/test/java/com/ganming/MybatisApplicationTests.java 单元测试文件中编写测试查询全部用户信息的方法 testListUser() 代码。

import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.util.List;

@SpringBootTest     // springboot 整合单元测试的注解
class MybatisApplicationTests {
    @Resource       // 完成依赖注入
    private UserMapper userMapper;

    @Test
    public void testListUser(){
        List<User> userList = userMapper.list();
        userList.stream().forEach(user -> {
            System.out.println(user);
        });
    }
}

  运行测试方法,检验输出:

1

JDBC 介绍

  前面介绍 MyBatis 简化 JDBC 的开发,接下来介绍下 JDBC。

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

  JDBC本质

  sun 公司官方定义的一套操作所有关系型数据库的规范,即接口

  各个数据库厂商去实现这套接口,即数据库驱动 jar 包

  我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动 jar 包中的实现类。

  在 src/test/java/com/ganming/MybatisApplicationTests.java 单元测试文件中编写测试 JDBC 的方法:

@Test
public void testJDBC() throws Exception{
    // 1. 注册驱动
    Class.forName("com.mysql.cj.jdbc.Driver");
    // 2. 获取连接对象
    String url = "jdbc:mysql://localhost:3306/mybatis";
    String username = "root";
    String password = "xxxx";
    Connection connection = DriverManager.getConnection(url,username,password);
    // 3. 获取执行 SQL 的对象 Statement,执行 SQL,返回结果
    String sql = "select * from user";
    Statement statement = connection.createStatement();
    ResultSet resultSet = statement.executeQuery(sql);
    // 4. 封装结果数据
    List<User> userList = new ArrayList<>();
    while(resultSet.next()){
        int id = resultSet.getInt("id");
        String name = resultSet.getString("name");
        short age = resultSet.getShort("age");
        short gender = resultSet.getShort("gender");
        String phone = resultSet.getString("phone");
        User user = new User(id,name,age,gender,phone);
        userList.add(user);
    }
    // 5. 释放资源
    statement.close();
    connection.close();
	// 6. 结果展示
    userList.stream().forEach(user -> {
        System.out.println(user);
    });
}

  上面的测试方法同样输出预期信息。

1

  直接使用 JDBC 驱动编程会有如下问题:

1 1

  使用 SpringBoot + MyBatis 可以解决上述问题,MyBatis 将数据库的连接信息写在配置文件 application.properties 中,修改不用改 java 代码。MyBatis 用一个 mapper 接口类实现自动的数据封装工作。其次 MyBatis 使用数据库连接池技术解决了频繁创建和释放资源的问题,当要执行 sql 语句时,从数据库连接池中获取一个连接资源,执行完后自动归返资源实现资源的复用。

数据库连接池

  • 1、什么是数据库连接池

  数据库连接池是个容器,负责分配管理数据库连接(Connection);

  数据库连接池允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;

  释放空闲时间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏;

  数据库连接池与 JDBC 创建连接对比:

1
  • 2、优势:

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

  • 3、标准接口:DataSource

  官方(sun公司)提供的数据库连接池接口,由第三方组织实现接口。

  功能:要实现获取连接的接口:Connection getConnection() throws SQLException;

  实现了数据库连接池接口的产品:C3P0、DBCP、DruidHiKari(springboot 默认)

  执行前面编写的 testListUser() 测试方法,观察控制台输出的信息 springboot 默认的连接池实现类为 HikarDataSource,查看 HikariDataSource 实现类。

1 2 3

  Druid(德鲁伊):Druid 连接池是阿里巴巴开源的数据库连接池项目,功能强大,性能优秀,是 java 语言最好的数据库连接池之一。

  • 4、切换 Druid 数据库连接池

  引入 Druid 数据库连接池的依赖,坐标通过官方地址查询:   https://github.com/alibaba/druid/tree/master/druid-spring-boot-starter。

  在 pom.xml 引入 Druid 的依赖,然后运行前面编写的 testListUser() 测试方法,观察控制台输出的数据池实现类的改变。

<!-- https://mvnrepository.com/artifact/com.alibaba/druid-spring-boot-starter Druid 连接池依赖-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid-spring-boot-starter</artifactId>
    <version>1.2.8</version>
</dependency>
切换数据库连接池

  JDBC 配置:保持原先的配置或者如下

spring.datasource.druid.url= # 或spring.datasource.url= 
spring.datasource.druid.username= # 或spring.datasource.username=
spring.datasource.druid.password= # 或spring.datasource.password=
spring.datasource.druid.driver-class-name= #或 spring.datasource.driver-class-name=

lombok

  • 问题分析:定义 User 实体类时,需要给属性添加 getter、setter、equals、hashCode、toString 及构造器方法,代码比较臃肿。
问题分析
  • lombok 介绍:lombok 是一个使用的 Java 类库,能通过注解的形式自动生成构造器、getter/setter、equals、hashCode、toString等方法,并可以自动化生成日志变量,简化 Java 开发、提高效率。
lombok注解
  • 使用 lombok:

  在 pom.xml 中引入 lombok 的依赖

<!-- lombok 依赖-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
</dependency>

  给实体类 src/main/java/com/ganming/pojo/User.java 添加注解

package com.ganming.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private Integer id;
    private String name;
    private Short age;
    private Short gender;
    private String phone;
}

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

  settings…>>Plugins>>Marketplace

lombok插件

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

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

相关文章

Chapter 6 :CDC Constraints(ug903)

6.1 About CDC Constraints 跨时钟域&#xff08;CDC&#xff09;约束适用于具有不同发射和捕获时钟的时序路径。根据发射和捕获时钟的关系以及在CDC路径上设置的时序异常&#xff0c;有同步CDC和异步CDC。例如&#xff0c;同步时钟之间但被错误路径约束覆盖的CDC路径…

活动目录域服务

域用户能够使用[username]csk.cn进行登录。 创建一个名为“CSK”的OU&#xff0c;并新建以下域用户和组&#xff1a; sa01-sa20&#xff0c;请将该用户添加到sales用户组。 ma01-ma10&#xff0c;请将该用户添加到manager用户组。 除manager 组以外的所有用户隐藏C盘。 除…

深入理解 Linux 内核

文章目录 前言一、内存寻址1、内存地址2、硬件中的分段&#xff08;1&#xff09;段选择符 3、Linux 中的分段&#xff08;1&#xff09;Linux GDT&#xff08;2&#xff09;Linux LDT 4、硬件中的分页5、Linux 中的分页&#xff08;1&#xff09;进程页表&#xff08;2&#x…

CRLF注入漏洞、URL重定向、资源处理拒绝服务详细介绍(附实例)

目录 一、CRLF注入漏洞 漏洞简介 演示介绍 漏洞检测工具&#xff1a;CRLFuzz 二、URL重定向漏洞 漏洞简介 漏洞相关业务 演示介绍 创建重定向虚假钓鱼网站 三、WEB 拒绝服务 简介 漏洞相关业务 演示介绍 一、CRLF注入漏洞 漏洞简介 CRLF 注入漏洞&#xff0c;是因…

centos7 firewall-cmd主机之间端口转发

目录 1. firewalld1.1 firewalld守护进程1.2 控制端口/服务1.3 伪装IP1.4 端口转发 2. 案例2.1 配置ServerA2.2 安装nginx测试 &#xff08;可选&#xff09;2.3 开启端口2.4 伪装IP2.5 端口转发2.6 配置ServerB2.7 修改nginx页面显示内容2.8 访问ServerB2.9 访问ServerA 1. fi…

低代码是开发的未来,还是只能解决边角问题的鸡肋?

随着互联网行业寒冬期的到来&#xff0c;降本增效、开源节流几乎成为了全球互联网厂商共同的应对措施&#xff0c;甚至高薪酬程序员的“35岁危机”一下子似乎变成了现实。程序员的高薪吸引了各行各业的“跨界选手”&#xff0c;是编程门槛降低了吗&#xff1f;不全是&#xff0…

搭建linux邮件服务器

参考&#xff1a;企业级邮件服务器实战_哔哩哔哩_bilibili Linux 平台开源免货的邮件服务器包括: Sendmail、Postix、Omail ; 邮件服务器构成了电子邮件系统的核心&#xff0c;每个收信人都有一个位于某个邮件服务器上的邮箱(mailbox)&#xff0c;一个邮件消息的典型旅程是从…

管道命令(cut、grep、sort、wc、uniq、tee、tr、col、join、paste、expand/unexpand、split、xargs)

文章目录 管道命令(pipe)选取命令&#xff1a;cut、grepcut使用案例cut的优点缺点 grep使用案例 排序命令&#xff1a;sort、wc、uniqsort使用案例 uniq使用案例 wc使用案例 双向重定向&#xff1a;tee使用案例 字符转换命令&#xff1a;tr、col、join、paste、expandtr使用案例…

非量表数据应该如何分析?

问卷中的非量表数据应该怎么分析&#xff1f; 样本特征分析 对于非量表题的描述可以使用频数分析或者可视化图形进行描述&#xff0c;比如单选题也可以使用柱形图等进行展示&#xff0c;通过结果展示了解样本的基本情况&#xff0c;最后结合分析结果提出建议等。差异分析 除此之…

mybatis中进行时间范围查询

一 oracle数据库 数据库时间类型为DATE TO_CHAR 把日期或数字转换为字符串 TO_DATE 把字符串转换为数据库中的日期类型 TO_DATE(char, ‘格式’) TO_NUMBER 将字符串转换为数字 TO_NUMBER(char, ‘格式’) 1、入参是String类型的数据 mybatis 处理时间范围 使用TO_DATE函数…

2023个税验证Excel表

根据北京市工资计算公式制作该表格&#xff0c;用来验证每月发放工资是否有误&#xff0c;统计年度总收入等。 下载链接如下&#xff08;提升等级用&#xff09;&#xff1a; https://download.csdn.net/download/wayright/87732783 不下载&#xff0c;按照上面表格数据自己制作…

下载高清图片素材,就上这6个网站,免费还能商用

图片素材网站我已经推荐过很多了&#xff0c;今天就再给大家推荐6个高清图片素材网&#xff0c;免费下载哦~建议收藏起来。 1、菜鸟图库 https://www.sucai999.com/pic.html?vNTYwNDUx 我推荐过很多次的一个设计素材网站&#xff0c;除了设计类&#xff0c;还有很多自媒体可…

el-input-number 输入框添加单位

需求 使用 element-ui 的 InputNumber 控件,实现金额填写,需要在数字后面添加一个单位:元 实现效果 代码部分 <template><el-dialogclass="morendialog":title="(formData.id ? 修改 : 新增) + title":visi

没有什么比破除束缚更自由的事情了

我发现&#xff0c;我时常处于一种自我消耗、内耗的状态中&#xff0c;令我难以振作起来去改变现状。因此&#xff0c;“拒绝内耗&#xff0c;提升表达力&#xff0c;努力提升自我”成为了我必须完成的小目标。 在高中和大学的的时候&#xff0c;有一段时间&#xff0c;我曾经…

【牛客网】迷宫问题与年终奖

目录 一、编程题 1.迷宫问题 2.年终奖 二、选择题 1、将N条长度均为M的有序链表进行合并&#xff0c;合并以后的链表也保持有序&#xff0c;时间复杂度为()? 2、大小为MAX的循环队列中&#xff0c;f为当前对头元素位置&#xff0c;r为当前队尾元素位置(最后一个元素的位…

Ansys Zemax | 设计抬头显示器时要使用哪些工具 – 第一部分

本文演示了如何使用OpticStudio工具设计分析抬头显示器(HUD)性能&#xff0c;即全视场像差(FFA)和NSC矢高图。(联系我们获取文章附件) 初始结构 HUD简介 以下为HUD的示意图。液晶显示器作为光源发光&#xff0c;光线被HUD的两个反射镜反射&#xff0c;然后通过风挡玻璃反射&am…

零死角玩转stm32中级篇3-SPI总线

一.基础知识 1.什么是SPI SPI&#xff08;Serial Peripheral Interface&#xff0c;串行外设接口&#xff09;是一种同步的串行通信协议&#xff0c;它被用于在微控制器、存储器芯片、传感器和其他外围设备之间传输数据。SPI通常由四个线组成&#xff1a;时钟线&#xff08;SC…

对git的简单总结

Git的基本使用 配置用户名和邮箱常见的操作查看仓库的状态远端仓库整体流程分支本地分支命令远端分支命令 这几天在做毕业设计&#xff0c;需要用到git&#xff0c;所以简单总结一下git的基本使用。 配置用户名和邮箱 git config --global user.name "Your Name" g…

【Vue】Vue-cli,创建项目设置自定义默认配置

Vue2.0&#xff0c;Vue-cli项目配置 步骤一&#xff0c;打开文件夹&#xff0c;导航栏输入cmd&#xff0c;打开命令行窗口步骤二&#xff0c;输入命令步骤三&#xff0c;选择第三个自定义新建项目步骤四&#xff0c;选择需要的项目模块&#xff0c;空格选择完&#xff0c;回车步…

Semaphore详解

Semaphore的基本使用场景是限制一定数量的线程能够去执行. 举个简单的例子: 一个单向隧道能同时容纳10个小汽车或5个卡车通过(1个卡车等效与2个小汽车), 而隧道入口记录着当前已经在隧道内的汽车等效比重. 比如1个小汽车和1个卡车, 则隧道入口显示3. 若隧道入口显示10表示已经…