【JavaWeb | 第六篇】Mybatis

目录

一、什么是Mybatis?

二、Mybatis入门程序

三、数据库连接池

[3.1 什么是数据库连接池?](#3.1 什么是数据库连接池?)

[3.2 数据库连接池的原理](#3.2 数据库连接池的原理)

四、基于Mybatis的增删改查操作

[4.1 删除用户-delete](#4.1 删除用户-delete)

[4.2 新增用户-insert](#4.2 新增用户-insert)

[4.3 查询用户-select](#4.3 查询用户-select)

五、XML映射配置


一、什么是Mybatis?

在上一篇文章中, 我们介绍了JDBC可以通过Java语言来操作Mysql等数据库,但是操作步骤过于繁琐(需要创建连接,创建sql语句执行对象......)

MyBatis是 Java 中常用的持久层****框架,主要用于操作数据库。它可以把 Java 方法和 SQL 语句对应起来,帮助我们减少大量重复的 JDBC 代码

官方文档对 MyBatis 的定位是:支持自定义 SQL、存储过程和高级映射的持久层框架,可以使用 XML 或注解把 Java 对象映射到数据库记录。

简单理解:

MyBatis = 帮你更方便地写 SQL、执行 SQL、把查询结果封装成 Java 对象的框架。

二、Mybatis入门程序

1.创建SpringBoot工程、引入Mybatis相关依赖

2.准备数据库表user、实体类User

实体类User:

java 复制代码
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {

    private Integer id;
    private String username;
    private String password;
    private String name;
    private Integer age;

}

3.配置Mybatis(在application.properties中配置数据库连接信息)

bash 复制代码
#配置数据库的连接信息
spring.datasource.url=jdbc:mysql://localhost:3306/web01
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456

4.编写Mybatis程序:编写Mybatis的持久层接口,定义SQL(注解/XML)

Mapper注解:应用程序在运行时,会自动为该接口创建一个实现类对象(代理对象),并且会自动将该实现类对象存入IOC容器-Bean。

测试运行结果:

三、数据库连接池

3.1 什么是数据库连接池?

在使用JDBC操作数据库之前,需要获取与MySQL数据库的连接Connection,每运行一次都需要连接一次,会造成资源的浪费、性能的下降;而Mybatis是如何优化这一资源和性能问题的呢?

Mybatis针对上述问题引入了数据库连接池,类似于Java SE当中学习的线程池。

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

3.2 数据库连接池的原理

标准接口:DataSource

官方提供的数据库连接池接口,由第三方组织实现此接口。

功能:获取连接Connection getConnection()

常见产品:C3P0、DBCP、Druid、Hikari(springboot默认)

Druid

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

如何切换连接池?

XML 复制代码
#pom.xml

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.2.19</version>
        </dependency>
XML 复制代码
#application.properties

spring.datasource.type=com.alibaba.druid.pool.DruidDataSource

成功切换为Druid连接池:

四、基于Mybatis的增删改查操作

4.1 删除用户-delete

需求:根据id删除用户信息

SQL:delete from user where id = 5;

代码:**#{}**代表占位符,表示使用的预编译SQL。

java 复制代码
    @Delete("delete from user where id = #{id}")
    public Integer deleteById(Integer id);

4.2 新增用户-insert

需求:添加一个用户

SQL:insert into user(username, password, name, age) values ('zhouyu', '123456', '周瑜', 20);

注意:在新增操作需要传递多个属性值时,可以将这些属性值封装到一个对象中,占位符当中的属性为对象中的属性名,而不是数据库中的字段名。

4.3 查询用户-select

需求:根据用户名和密码查询用户信息。

SQL :select * from user where username = 'zhouyu' and password='666888';

代码:

java 复制代码
    @Select("select * from user where username = #{username} and password = #{password}")
    public User findByUsernameAndPassword(@Param("username") String username,@Param("password") String password);

注意:使用@Param("......")注解,因为如果只声明形参,在将程序编译成字节码文件后,形参名称不会保留,因此无法匹配到上面select语句的占位符,要使用@Param注解为形参起一个名字。

如果项目是基于官方SpringBoot项目骨架创建的则无需添加@Param注解。

五、XML映射配置

在Mybatis中,既可以通过注解配置SQL语句,也可以通过XML配置文件配置SQL语句。

使用XML映射配置文件的默认规则:

  • 1.XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
  • 2.XML映射文件的namespace属性为Mapper接口全限定名一致。
  • 3.XML映射文件中sql语句的id与Mapper接口中的方法名一致,并保持返回类型一致。

UserMapper.xml:

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.sprneft.mapper.UserMapper">

    <select id="findAll" resultType="com.sprneft.pojo.User">
        select id, username, password, name, age from user
    </select>

</mapper>

那在Mybatis的开发中,到底使用注解开发还是使用XML开发呢?

  • 使用Mybatis的注解,主要是来完成一些简单的增删改查功能。
  • 如果需要实现复杂的SQL功能,建议使用XML来配置映射语句。
相关推荐
拙野18 小时前
工作中Mybatis动态SQL的使用
java·sql·mybatis
布局呆星21 小时前
Spring Boot+MyBatis-Plus+Vue3前后端协作Note
spring boot·typescript·vue·mybatis
空中海1 天前
MyBatis 知识框架图、性能优化与面试题
性能优化·mybatis
Devin~Y1 天前
大厂Java面试:Spring Boot + Redis/Kafka + Spring Cloud + JVM + RAG/向量检索(小Y翻车实录)
java·jvm·spring boot·redis·spring cloud·kafka·mybatis
Java成神之路-2 天前
面试题:MyBatis延迟加载的底层原理
mybatis
敖正炀2 天前
Spring Boot + MyBatis 企业级数据访问层实战:从选型到分库分表的深度演进
mybatis
敖正炀2 天前
多数据源与读写分离中间件
mybatis
胡楚昊2 天前
BUU WEB之旅(1)
java·数据库·mybatis
敖正炀2 天前
MyBatis 通用插件库与性能监控平台
mybatis