【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来配置映射语句。
相关推荐
momo19 小时前
Java+WebAI黑马知识点
java·spring boot·mybatis
snow@li1 天前
MyBatis:动态 SQL 全景梳理
数据库·sql·mybatis
就改了1 天前
Mybatis快速入门大全(详细版)
java·spring boot·mybatis
qq_171538851 天前
深入浅出 MyBatis XML:从入门到精通
xml·java·mybatis
万亿少女的梦1681 天前
基于SSM、JSP与MySQL的秦皇岛旅游服务管理系统设计与实现
mysql·mybatis·ssm·jsp·spring mvc
jaysee-sjc1 天前
【JavaWeb】JDBC与Mybatis零基础入门详解
java·开发语言·前端·mybatis
dear_bi_MyOnly2 天前
【MyBatis 操作数据库】
java·数据库·学习·mybatis·学习方法
用户3126874877202 天前
分页插件到底怎么拦截 SQL?MyBatis-Plus 插件机制原理一次讲透
mybatis
马优晨2 天前
pring Boot + MyBatis + Redis 项目分层架构详解 —— 各层职责、关系与工作流程
架构·mybatis·spring项目分层架构详解·spring项目架构详解·spring各层职责·spring关系与工作流程
Listen·Rain2 天前
用AI开发出一个AI
java·人工智能·spring boot·tomcat·intellij-idea·mybatis·visual studio