连接建立之后,如何进行通讯呢?MySQL定义了数据交换的格式也就是帧格式,定义了通讯协议的交互流程,我们的程序需要遵循MySQL规定的规章制度,才能正确的读写数据。
看到图中复杂的交互流程,我们不禁有些恼火,唯有牢记初心,才能坚持下去。我们的初衷是从数据库读写数据,在Mysql命令行客户端,我们只需要运行一些SQL语句就可以了。然而,我们在这里却要处理这么复杂的事情,这完全偏离了我们的重点。如果再这样下去,我们将无法完成任何项目。
幸好我们有JDBC,它可以把上图简化成下图的过程,也就是我们只需要关注SQL语句就可以了。

也就是说JDBC帮我们完成了通信过程以及通信协议的处理。所以我们需要在Java中直接使用JDBC来与数据库进行通信。典型的过程代码如下:
// 在 pom.xml中添加 mysql驱动依赖库 <dependency> <groupId>mysqlgroupId> <artifactId>mysql-connector-javaartifactId> <version>5.1.47version> dependency>
public static void main(String[] args) throws Exception {// 将JDBC驱动加载到DriverManagerClass.forName("com.mysql.jdbc.Driver");// 从DriverManager处获取数据库连接Connection conn = DriverManager.getConnection("jdbc:mysql://数据库ip/数据库名称","账号","密码" );// The object used for executing a static SQL statement and returning the results it produces. 也就是创建出执行sql语句的对象Statement st = conn.createStatement(); // 只查找一行数据ResultSet rs = st.executeQuery("SELECT id, username, password FROM sys_user LIMIT 1");SysUser user = new SysUser();// 遍历每一行数据while (rs.next()) {user.setId(rs.getString("id"));user.setName(rs.getString("username"));user.setPassword(rs.getString("password"));}System.out.println(user.toString());rs.close();st.close();conn.close();
其中,SysUser类如下:
@Datapublic class SysUser {private String id;private String name;private String password;}
该程序的输出是:
SysUser(id=1140466515787780089, name=admin, password=9d947539b4374770df2a52f6e357829d3e625cd78bc05451218e7b5b3361000b)
可以看到,这就是将数据库数据信息映射到后端程序对象上。我们来仔细看一下上面的程序。
Java 数据库连接 (JDBC) 是 Java 语言中的应用程序编程接口,用于指定客户端程序如何访问数据库。
– 引自维基百科
接口就是规范,我们说JDBC帮我们做了那么多,其实它并没有帮我们连接数据库,转换协议等等,这些功能都是由数据库驱动,也就是我们引入的mysql-connector-java包来完成的,这中间JDBC的层次结构如图所示:
最底层就是各种数据库了,所以只要实现了JDBC规范的驱动接口,就可以集成到Java中直接使用。对于上面程序使用过程中涉及到的各种对象,这里就不细说了,网上有很多不错的资料,比如这篇博客,讲的挺清楚的。
这里我们关心的核心是后端如何理解数据库的信息,其实上面代码中,最终的ResultSet中保存的是每行数据的信息,我们只要像上面程序一样,将它们一一复制到相关对象中就可以了。
但是这样太麻烦了,而且上面只是静态SQL,没有添加where语句,没有执行任何复杂查询,也没有执行任何插入操作。有兴趣的可以尝试一下,具体如何执行这些东西网上有很多说明。
那么我们该怎么办呢?
我们需要一个工具,可以自动将ResultSet中的信息映射到对象,也可以将对象中的信息映射到SQL语句中的参数。
我们把这种工具称为ORM框架,ORM的意思是Object Relational Mapping,在之前的文章《Java后端开发(三):开发框架解读》中提到过这种框架,具体为:
我们采用mybatis框架来实现,添加mybatis之后结构变成:
因此在我们的Maven项目也就是pom.xml中,除了需要导入上面提到的mysql-connector-java,还需要导入mybatis的依赖包。
至于图中的数据库连接池,我们暂时先忽略,加上mybatis之后,数据映射就简单多了,基本原理还是如上代码所示,这个大家应该都清楚了。
接下来我们将继续:
mybatis的使用整个web开发框架的整体结构,从全方位的角度审视数据库连接池的描述mybatis-plus的使用,彻底解放了基础CURD的生产力