目录
[JDBC VS Mybatis](#JDBC VS Mybatis)
练习:在application.yml配置文件中配置相关的配置项
JAVA程序操作数据库
JDBC(Java DataBase Connectivity),使用Java语言操作关系型数据库的一套API
JDBC-介绍

JDBC-入门程序
JDK版本和Maven版本要匹配,否则会报错
java
package com.itheima;
import org.junit.jupiter.api.Test;
import java.sql.*;
public class JdbcTest1 {
/**
* JDBC入门程序
*/
@Test
public void testUpdate() throws Exception {
//1. 注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2. 获取数据库连接
String url = "jdbc:mysql://localhost:3306/web01";
String username = "root";
String password = "123456";
Connection connection = DriverManager.getConnection(url, username, password);
//3. 获取SQL语句执行对象
Statement statement = connection.createStatement();
//4. 执行SQL
int i = statement.executeUpdate("update user set age = 25 where id = 1");//DML
System.out.println("SQL执行完毕影响的记录数为: " + i);
//5. 释放资源
statement.close();
connection.close();
}
}

JDBC-查询数据
**需求:**基于JDBC执行如下select语句,将查询结果封装到User对象中(AI辅助)
**SQL:**select * from user where username = 'daqiao' and password = '123456'
**ResultSet(结果集对象):**ResultSet rs = statement.executeQurey()
**next():**将光标从当前位置向前移动一行,并判断当前行是否为有效行,返回值为boolean
- **true:**有效行,当前行有数据
- **false:**无效行,当前行没有数据
**getXxx():**获取数据,可以根据列的编号获取,也可以根据列名获取(推荐)
java
/**
* JDBC查询程序
*/
@Test
public void testSelect() throws Exception {
//1. 注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2. 获取数据库连接
String url = "jdbc:mysql://localhost:3306/web01";
String username = "root";
String password = "123456";
Connection connection = DriverManager.getConnection(url, username, password);
//3. 定义SQL语句
String sql = "select id,username,password,name,age from user where username = 'daqiao' and password = '123456'";
//4. 获取SQL语句执行对象
Statement statement = connection.createStatement();
//5. 执行SQL查询,返回结果集
ResultSet resultSet = statement.executeQuery(sql);
//6. 处理结果集
while (resultSet.next()) {
//获取每一列的值
int id = resultSet.getInt("id");
String user = resultSet.getString("username");
String pwd = resultSet.getString("password");
String name = resultSet.getString("name");
int age = resultSet.getInt("age");
//创建User对象并封装数据
User userObj = new User(id, user, pwd, name, age);
//输出User对象信息
System.out.println(userObj);
}
//7. 释放资源
resultSet.close();
statement.close();
connection.close();
}

预编译SQL

优势一:可以防止SQL注入,更安全
**SQL注入:**通过控制输入来修改事先定义好的SQL语句,以达到代码对服务器进行攻击的方法
优势二:性能更高


Mybatis
Mybatis是一款优秀的持久层框架,用于简化JDBC的开发


使用Mybatis查询所有用户数据


辅助配置-配置SQL提示
**产生原因:**idea和数据库没有建立连接,不识别表信息
**解决方式:**在idea中配置MySQL数据库连接

辅助配置-配置Mybatis的日志输出
默认情况下,在Mybatis中,SQL语句执行时,我们并看不到SQL语句的执行日志。加入如下配置,即可查看日志:

JDBC VS Mybatis

数据库连接池
- 数据库连接池是个容器,负责分配、管理数据库连接(Connection)
- 它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个
- 释放空闲空间超过最大空闲时间的连接,来避免因为没有释放连接而引起的数据库连接遗漏
优势
1、资源重用
2、提升系统响应速度
3、避免数据库连接遗漏
标准接口:DataSource
官方提供的数据库连接池接口,由第三方组织实现此接口
功能:获取连接
Connection getConnection()throws SQLException;
常见产品

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

增删改查操作
删除用户-delete
需求:根据ID删除用户信息
SQL:delete from user where id = 5;
Mapper接口:

DML语句执行完毕的返回值,表示该DML语句执行完毕影响的行数
Mybatis中的#号与$号:



新增用户-insert
需求:添加一个用户
SQL:insert into user(username,password,name,age) values ('zhouyu','123456','周瑜',20);
Mapper接口:

修改用户-update
需求:根据ID更新用户信息
SQL:update user set username = 'zhouyu',password = '123456',name = '周瑜',age = 20) where id = 1;
Mapper接口:

查询用户-select
需求:根据用户名和密码查询用户信息
SQL:select * from user where username = 'zhouyu' and password = '888666';
Mapper接口:

@Param注解的作用是为接口的方法形参起名字的


XML映射配置
在Mybatis中,既可以通过注解配置SQL语句也可以通过XML配置文件配置SQL语句
默认规则
1、XML映射文件的名称与Mapper接口名称一致,并且将XML映射文件和Mapper接口放置在相同包下(同包同名)
2、XML映射文件的namespace属性为Mapper接口全限定名一致
3、XML映射文件中sql语句与Mapper接口中的方法名一致,并保持返回类型一致


XML映射文件-辅助配置
配置XML映射文件的位置:

MybatisX 是一款基于IDEA的快速开发Mybatis的插件,为效率而生

SpringBoot配置文件
SpringBoot项目提供了多种属性配置方式(properties、yaml、yml)

yaml配置文件
格式:
- 数值前边必须有空格,作为分隔符
- 使用缩进表示层级关系,缩进时,不允许使用tab键,只能用空格(idea中会自动将tab转换为空格)
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- #表示注释,从这个字符一直到行尾,都会被解析器忽略
定义对象/Map集合:

定义数组/List/Set集合:

在yaml格式的配置文件中,如果配置项的值是以0开头的,需要使用''引起来,因为以0开头在yml中表示8进制的数据
练习:在application.yml配置文件中配置相关的配置项
java
spring:
application:
name: springboot-mybatis-quickstart
#数据库的连接信息
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://localhost:3306/web01
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
mybatis:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
mapper-locations: classpath:mapper/*.xml
