目录
[3.1 什么是数据库连接池?](#3.1 什么是数据库连接池?)
[3.2 数据库连接池的原理](#3.2 数据库连接池的原理)
[4.1 删除用户-delete](#4.1 删除用户-delete)
[4.2 新增用户-insert](#4.2 新增用户-insert)
[4.3 查询用户-select](#4.3 查询用户-select)
一、什么是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来配置映射语句。