java后端开发(六):后端如何理解数据库的数据

在最开始的数据库设计章节 我们已经提到过,我们想要和 mysql 进行交互,首先重要的事情是 建立数据通路 ,如果你看过 《图解TCP/IP》的章节,应该知道,这个数据通路就是TCP连接。

建立了连接以后,如何进行通信呢?mysql 自定义了数据交互的格式也就是 帧格式 ,并且定义了通信协议的交互过程,我们的程序需要按照 mysql 规定好的规章制度才能够正确的读写数据。

在这里插入图片描述

看到图中麻烦的交互过程我们不禁烦躁,不忘初心方能始终。我们的初心就是从数据库中读写数据,Mysql命令行客户端里面,我们只要运行一些 sql 语句就行了。但是这里还要处理这么麻烦的东西,完全偏离了我们的关注点。这样下去什么项目也做不成了。

万幸的是,我们拥有 JDBC 这个好东西,他可以把上图简化成下图的过程,即我们只要关注 sql 语句就行了。

在这里插入图片描述

也就是说 JDBC 帮我们完成通信过程的处理,通信协议的处理。所以我们要在 java 中直接使用 JDBC 来和数据库通信。典型的过程代码如下:

        // 在 pom.xml中添加 mysql驱动依赖库
	    <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.47</version>
        </dependency>
	public static void main(String[] args) throws Exception {
		// 将JDBC驱动加载到DriverManager
		Class.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类如下:

@Data
public class SysUser {

	private String id;

	private String name;

	private String password;
}

程序的输出是:

SysUser(id=1140466515787780089, name=admin, password=9d947539b4374770df2a52f6e357829d3e625cd78bc05451218e7b5b3361000b)

可以看到,这就是把数据库的数据信息映射到了后端程序对象上。下面我们再稍微看下上述程序。


Java数据库连接,(Java Database Connectivity,简称JDBC)是Java语言中用来规范客户端程序如何来访问数据库应用程序接口

– 引自维基百科

接口就是规范,我们说JDBC帮助我们做了那么多,实际上他并没有帮助我们处理连接数据库,协议转换之类的。这些功能都是数据库驱动帮助做的,也就是我们引入的 mysql-connector-java 包。JDBC在这中间的层次结构如图所示:

最下层是各种数据库,所以只要实现了JDBC规范的驱动接口,都可以被java集成进来直接使用。对于上述程序中的使用过程中涉及到的各种对象,这里不再详细赘述,网上有很多好的资料,比如这篇 博客 ,讲的蛮清晰的。

我们这里关注的核心是 后端如何理解数据库的信息, 其实上述代码里面,最后的 ResultSet 里面保存的就是每行数据的信息,我们就如同上述程序一样,将其一一拷贝到相关对象里面就可以了。

但是,这样子也太麻烦了,而且上文还只是静态SQL,都没加 where 语句,也没有执行复杂查询,也没有执行插入操作。感兴趣的可以试试看,如何执行这些东西,网上很多说明的。

那我们该怎么办?

我们需要一个工具,它能够把 ResultSet 中的信息自动映射到对象上,也能够把对象中的信息映射到 SQL 语句中的参数上。

这种工具,我们叫做 ORM 框架 。ORM 也即:Object Relational Mapping ,对象关系映射。这样的框架在前文的java后端开发(三):开发框架解读 中已经提到了,就是:

  • mybatis
  • hibernate

我们使用 mybatis 框架来做。那么加入 mybatis 以后,结构就变成了:

所以呢,在我们的 maven 工程,也即 pom.xml 里面,不仅要引入上文的 mysql-connector-java ,还要引入 mybatis 依赖包。

至于图中的数据库连接池,我们先暂时忽略。加入 mybatis 以后呢,数据映射就变得简单多了。基本原理还是上述代码所示,所以这点大家心里要清楚。

接下来,我们后续会进行:

  1. mybatis的使用
  2. 整个 web 开发框架的总体结构,从一个全面的视角来考察
  3. 数据库连接池的说明
  4. mybatis-plus 的使用,完全解放基础CURD的生产力
发布了39 篇原创文章 · 获赞 74 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/zhou307/article/details/102792637