开发者学堂课程【5天实战 Spring Boot 2.5:Spring 平台与新特性介绍】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/780/detail/13691
自动化配置原理与实战 MySQL 数据库
数据库 MySQL 使用比较多,互联网公司基本都是 MySQL 数据库,MySQL 数据库诞生时间比较早,属于关系型数据库。还有几个数据库比如 Oracle 主要是在银行大型国企中使用,Oracle 数据库比较强,是收费的,费用特别高,早期淘宝也使用过一段时间,后面慢慢将Oracle 去掉了换成了 MySQL,因为 MySQL 便宜且是开源的。从技术角度培养人员,开源数据库好处在于可以查看源代码并修改。国内互联网公司包括腾讯、阿里、华为都有前期使用 MySQL,修改代码,培养自己的人才,包括后期自己仿制的过程。如果一个公司愿意开放源代码,那这个公司是道德水平比较高的,相对来说贡献比较大,将自己最核心的东西贡献。还有一些公司不开源比如IDM 或者 Oracle 和微软基本上都不开源,微软现在开源的项目基本都是无关紧要的,最核心的东西都不开源,苹果操作系统也不开源,开源或者不开源从程序员角度肯定希望对方开源,对企业来说,只要有能力形成垄断一样可以赚钱,本质上对公司来说需要赚钱要产生商业利益。Spring Boot 访问数据库底层讲过一个 JDBC,是 Java 提供数据库访问的一个框架,语句比较原始。Spring 后面出了一个框架叫 Spring Data,将接口再进行简化,对数据库的操作变得更简单,不用写复杂的 SQL 语句,不写不代表没有,只是框架帮助生成了,它里面是一些底层的数据库驱动,做了封装,report 对象主要实现对各个数据库的操作、增删改查的封装。这个思想翻译成仓库仓储,之前的概念为了处理系统的业务逻辑的复杂度,提了一个概念叫领域,里面 report 的概念现在也是新的设计模式,本质是做数据库数据代码的封装,本质上也是封装概念,对原始数据库操作的封装。注意操作的数据源更多了,底层用到了 JDBC,不需要自己去控制 JDBC 的原始代码,只需完成其他代码的编写工作。Spring Data 经过很多框架的迭代,Spring Boot 将之前很多框架做了一个集成做了一个铺垫。MySQL 提供了比较多的以数据库为例的,就不讲 Oracle,Oracle 很多国企在使用,但是相信慢慢会被淘汰,现在国内大国企银行也在说软件安全,如果不知道源代码,数据库没法审查代码,也控制不了任何东西,核心技术都没有,理论上不符合国企技术定位的要求,理论上国企都应该换成开源数据库,开源数据库后期有能力能够控制,这是一个方向。操作数据库使用 Spring Data,主要使用 report,底层实际还是做了封装,如果照抄代码没问题,但是底层东西需要知道,包括其他类型其他接口,看起来比较简单。注意很多词汇,JPA 是 Java底层框架的缩写。
六.例子
数据库新建一个表,然后创建一个对象一个类型,比如一个订单,然后定义几个字段和数据库的订单的表里面的字段进行对应关系。定义一个类型扩展一个接口,直接增删改查默认全部已生成。如果要进行特殊字段的查询,比如根据用户名或密码查询,这些需要自己定义,需要看一下这个代码是接口还是类型,比如是一个接口,接口怎么具备增删改查功能,这个框架背后基于它生成了一个对象,之前自定义接口有一个实现代码,接口不能直接创建一个对象,按照约定的规则写代码去定义一个接口,Spring 框架可以基于接口创建对象,Spring 框架能帮成员完成很多工作,尽量省掉繁琐的工作,背后用的还是基础代码的封装。
七.实例
链 MySQL 需要用户密码,配置文件里会放 MySQL 的地址。比如数据库叫阿里巴巴或者淘宝,使用安全链接链 MySQL, string 是使用 utc 是通用时间的时间格式,链接字符串写在 Java 代码中,那时方式比较原始,这里放在配置文件中,项目生成部署时文件可以修改,比如网站放在一个机器上,数据库放另一台机器上,数据库 IP 地址可以提供用户名、域名、密码比较简单,Spring Data 中参数配置的方式,不知道参数,可以使用文档查,还可以指定驱动,这个驱动实际也是 JDBC 中的驱动。pom 文件原功能加了一个依赖,JPA 的依赖默认添加了 JDBC 的依赖。Tomcat 默认 RM 框架是做对象和数据库的映射。数据库一般向后兼容,这里面还有测试的等就不介绍了,需要什么菜夹什么菜,类似吃自助餐。注意仓储类型,自定义方法数据库基于接口已经生成了增删改查,这是自定义的几个特殊的参数查询的方法这些功能的接口,这简单很多因为默认接口在其他地方可以使用,对应数据库的叫实体类型,有的叫模型,别名一定要和数据库的表涉及的变量对应哪个列,注解表示对应列,标明列是不是自增的,标识有用户名、ID、年龄、城市等字段,假设在 MySQL中有这样一个表,应该按照这个格式进行配置来对应数据库的表。怎么链接比如查询所有用户,自动装配。例如购买的喂养猫狗的器皿以及自动洗衣机具有自动装配的功能,假设该方法要查询所有的用户数据,保存所有用户数据,需要写 SQL 语句查询,或者使用其他比如仓储功能的接口创建对象进行查找。定义一个接口类型的变量,@AutoWired 的注解是 Spring 框架提供的,它能够自动创建对象,具备增删改查功能,可以直接调用。findAll 是查找所有用户,这句话主要就是 Spring 造个对象然后使用即可,也就是说 Spring 框架充当一个角色,你需要什么依赖,由 Spring 框架完成,程序员很多工作都被 Spring 框架完成了,基础的代码工作都已经完成了,只需要写与工作相关比较复杂的代码比如业务逻辑的各种判断,这里给了查询。
数据库重新创建,新建表,添加 ID,name 可变长度100。age 是整数类型,城市可变长度100,地址长度200,然后点击保存为 users。手动插入数据,建一个 users 表,name。比如叫 Java,密码1234,年龄26岁,城市杭州,地址阿里巴巴,点击 go,就添加完成一条数据。启动程序,这里做登录账号相关的,同理做用户密码查询然后比对,端口是8088,访问阿里巴巴,用户密码都没有错误,然后添加偏移 home,添加测试方法,浏览器测试访问 localhost:8088/home/getAll,这是方法的偏移地址与类偏移地址,通过浏览器给后台网站发送请求,控制器会创造一个对象通过调用查找数据并返回。测试结果为上面插入的数据。手动再次添加一条数据,比如2,MySQL,密码1111,MySQL 给30,城市USA,地址JDBC,刷新重新发送请求,回车返回两条数据,为 JSON 数据格式。同理可以根据用户名查找,这里只演示 JDBC 已经封装,Spring 能够提供更好的更方便的数据库开发模式。自定义的语句叫类 SQL 命令,最终会转换成数据库命令,没写的方法代码默认已经生成了。例子代码作为参考练习,大家新建表,一定要和字段对应起来,和定义的类型比如定义一个订单,订单类几个字段参考该思路复制,学会模仿,照参考,比如 ID,前提是表设计时有该字段可以对应。变量、类型等的概念不需要死记硬背,注解完成特殊的功能扩展,目前公司多用 mybatis,这里面是参数化可以传参,传的是定义的参数比如 ID穿的是1或者100,这是个变量参数,最终会被编译至语句中,比如最终替换成99、1000、5000。底层是封装的,实际是这几个框架的融合,今天的编程方式在设计模式中叫仓储模式,不管使用什么设计模式不管怎么封装,这得符合实际情况,有可能需要根据手机号查询,系统并不知道手机号这种默认生成的查询功能方法,这只是一个思路,特殊情况参考这个例子进行改动。