这是Web第一天的课程大家可以传送过去学习 http://t.csdnimg.cn/K547r
前言
在前面我们学习MySQL数据库时,使用图形化客户端工具(如:idea、MySQL Workbench),来操作数据库的。
在客户端工具中,编写增删改查的SQL语句,发给MySQL数据库管理系统,由数据库管理系统执行SQL语句并返回执行结果。
增删改操作:返回受影响行数
查询操作:返回结果集(查询的结果)
我们做为后端程序开发人员,通常会使用Java程序来完成对数据库的操作。Java程序操作数据库的技术呢,有很多啊。
-
JDBC:(Java DataBase Connectivity),就是使用Java语言操作关系型数据库的一套API。 【是操作数据库最为基础、底层的技术】
那现在在企业项目开发中呢,一般都会使用基于JDBC的封装的高级框架,比如:Mybatis、MybatisPlus、Hibernate、SpringDataJPA。 而这些技术,目前的市场占有份额如下图所示:
从上图中,我们也可以看到,目前最为主流的就是Mybatis,其次是MybatisPlus。
所以,在我们的课程体系中呢,这两种主流的操作数据库的框架我们都要学习。 而我们在学习这两个主流的框架之前,还需要学习一下操作数据库的基础基础 JDBC。 然后接下来,再来学习Mybatis。 而在我们后面的课程中,我们还要学习MybatisPlus框架。 那么今天呢,我们就先来学习 JDBC 和 Mybatis。
我们今天的课程安排如下:
-
JDBC
-
Mybatis基础
-
部门列表查询
1. JDBC
1.1 概述
JDBC:(Java DataBase Connectivity),就是使用Java语言操作关系型数据库的一套API。
本质:
sun公司官方定义的一套操作所有关系型数据库的规范,即接口。
各个数据库厂商去实现这套接口,提供数据库驱动jar包。
我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。
1.2 快速入门
需求:通过JDBC程序,执行update语法,更新用户表中的数据
步骤:
-
准备工作:
-
创建项目,引入mysql的驱动、junit依赖
-
注册驱动
-
获取连接对象 Connection
-
获取SQL语句执行对象 Statement
-
-
执行SQL语句
-
释放资源
演示:
-
准备数据库
web
,及数据库表user
create database web; use web; create table user( id int unsigned primary key auto_increment comment 'ID,主键', username varchar(20) comment '用户名', password varchar(32) comment '密码', name varchar(10) comment '姓名', age tinyint unsigned comment '年龄' ) comment '用户表'; insert into user(id, username, password, name, age) values (1, 'daqiao', '123456', '大乔', 22), (2, 'xiaoqiao', '123456', '小乔', 18), (3, 'diaochan', '123456', '貂蝉', 24), (4, 'lvbu', '123456', '吕布', 28), (5, 'zhaoyun', '12345678', '赵云', 27);
-
创建一个普通的maven项目(非springboot项目),引入mysql的驱动、junit依赖
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.33</version> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter</artifactId> <version>5.9.3</version> <scope>test</scope> </dependency>
-
在
src/test
目录下创建一个包com.itheima.test
,并在其中创建一个测试类JDBCTest
,编写入门程序 ,具体如下:@Test public void testUpdate() throws Exception { //1.准备工作 //1.1 注册驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //1.2 获取连接 String url = "jdbc:mysql://localhost:3306/web"; Connection connection = DriverManager.getConnection(url, "root", "1234"); //1.3 获取SQL语句执行对象 Statement statement = connection.createStatement(); //2.执行SQL statement.executeUpdate("update user set password = '1234567890' where id = 1"); //3.释放资源 statement.close(); connection.close(); }
在上述的步骤中,注册驱动、获取链接Connection、获取SQL语句执行对象 Statement 、释放资源 这几步都是固定步骤,使用JDBC程序操作数据库时,这几步都需要做的。
-
运行单元测试,查看数据库中数据的执行结果。
1.3 API详解
1.3.1 DriverManager
作用:
-
注册驱动
-
获取数据库链接 Connection
1.3.1.1 注册驱动
而通过上述的代码,大家可以看到注册驱动,我们是通过 Class.forName("com.mysql.cj.jdbc.Driver")
来注册的,看似和DriverManager没什么联系。其实不然,Class.forName("com.mysql.cj.jdbc.Driver")
只是将 Driver
这个类加载到JVM中。 而在 Driver
这个类中定义了静态代码块,内容如下:
当 Driver
这个类被加载时,就会自动执行静态代码块中的代码,然后就完成了注册驱动的操作。
备注:
而其实啊,Class.forName("com.mysql.cj.jdbc.Driver")
这句代码呢,是可以省略的,省略了,也可以正常的完成驱动的注册。 原因是因为在MySQL的驱动jar包中,在 META-INF/services 目录中提供了一个文件 java.sql.Driver
,在这个文件中编写了一行内容,就是驱动类的全类名 :
当在程序需要用到这个类时,java会自动加载这个类,这个类一加载 就会自动执行静态代码块中的内容,就完成了注册驱动的操作 ,而java中的这个机制称之为 SPI。
SPI机制:Service Provider Interface,JDK内置的一种服务提供发现机制,可以轻松的扩展你得程序(切换实现),实现接口与实现类之间的解耦。
1.3.1.2 获取链接
DriverManager.getConnection(url, username, password);
-
url: 数据库连接url
-
语法:jdbc:mysql://ip地址(域名):端口号/数据库名?参数键值对1&参数键值对2
-
说明:如果连接的是本机的默认端口的mysql,url可以简写为:jdbc:mysql:///数据库名?参数键值对…
-
-
user:用户名
-
password:密码
1.3.2 Connection & Statement
-
Connection的作用:获取执行SQL的对象
-
执行普通SQL对象的Statement:
connection.createStatement();
-
执行预编译SQL对象PreparedStatement:
connection.preparedStatement();
【后面单独讲解】
-
-
Statement的作用:执行SQL
-
执行DDL、DML语句:
executeUpdate(sql);
如果是执行DML语句完毕,返回值int代表 DML 语句影响的函数 。 -
执行SQL语句:
executeQuery(sql);
返回值为ResultSet,里面封装了查询结果。
-
1.3.3 ResultSet
-
需求:请根据 用户名 与 密码 查询用户的信息,来模拟用户登录