快速入门Web开发(中)后端开发(有重点)(3)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 快速入门Web开发(中)后端开发(有重点)(3)

快速入门Web开发(中)后端开发(有重点)(2):https://developer.aliyun.com/article/1548585


表关系及对应

一对多

  • 多的一方添加外键
一对一

多对多

多表设计的流程

  • 步骤一画er图

多表查询

内连接

外连接

  • 左外连接会包含左表中的所有数据
  • 右外连接会包含右表中的所有数据
  • 可以解决一方值为空,对应不到对方的情况
  • 基本用左外,右外可以替换成左外

子查询

  • 以上出现了两种方式

-- 查询每个分类下最贵的菜品,展示出分类的名称、最贵的菜品的价格
select c.name,max(d.price)-- 不一定要用子查询,可以直接筛选出最贵的
from category c,
     dish d
where d.category_id = c.id
group by c.id;

事物

索引

  • 索引将原本的挨个查询变成使用数据结构来查询

写MySQl代码的方式(重点)

1、分析需要用到那几张表(提前做好er图),然后再开始写代码

2、先写查询条件再写查询显示项

mysql语句的难点(重点)

优先级,你需要知道每个语句的优先级

-- 查询每个分类下最贵的菜品,展示出分类的名称、最贵的菜品的价格
select c.name,max(d.price)
from category c,
     dish d
where d.category_id = c.id
group by c.id;
  • 比如以上的案列,我以为是先执行语句是从左边执行到右边,于是认为先查询最贵的价格了,而最贵的价格只有一个,因此只会出现一个拥有最贵的分类。但代码不是这么运作的。

一个用的到的函数—concat()

  • 函数格式是CONCAT(‘参数1’,’参数2’,’参数3’)
  • 使用该函数可以将括号中的参数拼接在一起,用于sql的预编译

JDBC

  • sun公司提供的api

数据库链接池

  • 用户使用数据库连接池用完了还回去

切换数据库链接池

在配置文件中增加德鲁伊数据库链接池即可

//德鲁伊数据库链接词
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>druid-spring-boot-starter</artifactId>
   <version>1.2.8</version>
</dependency>

lombik(注解简化代码)

  • 写在类的前面
  • 原理就是根据注解生成相应的方法

Mybatis基于注解来配置sql

  • 只需要定义接口就好不需要定义实现类
#配置数据库中的链接信息
# mysql项目的application.properties配置
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=123456

@Mapper

@Mapper是一个MyBatis注解,用于标注DAO层的Mapper接口。

MyBatis是一个支持定制化SQL、存储过程以及高级映射的优秀持久层框架。在MyBatis中,DAO层的Mapper接口负责与数据库交互,封装各种CRUD操作。

@Mapper注解用于告诉MyBatis框架,该接口需要被自动实现为Mapper代理。MyBatis会在应用启动时自动扫描带有@Mapper注解的接口,并为这些接口生成实现类。

  • 标注在类上面,即可使用
  • 也是交给loc容器管理

@Select与其他的语句映射

查询就是@select,删除就是@delete

MyBatis通过注解的方式,可以直接将SQL语句映射到DAO方法上,无需编写XML映射文件。

//根据ID删除数据
    @Delete("delete from emp where id=#{id}")
    //mybatis实现了根据 #{} 来实现注释绑定的注释方法传参
    public void delete(Integer id);
  //public int delete(Integer id);
 //可以有返回值。返回值意思是影响的记录数

Test

  • 使用@test注解可以进行测试

日志与预编译

  • 通过?(预编译)使得能够高性能的工作

  • 登录的本质就是将输入的用户名和密码拿去查询,看是否能查到

其中count(*)能够统计查询到的总行数

  • 使用$()是直接拼接字符串
  • 使用#()是使用预编译

SQL注入

  • 没有使用预编译的SQL可以通过输入密码或者账号时,改为mysql语句的形式,来修改。
  • 使用预编译,将把输入的字符都变为一个参数,代替问号

Mybatis使用

  • 注意,上面的链接那边要填写自己的数据库名称

配置sql

增加员工(涉及主键返回问题)

  • 出现以上数据过多时,可以通过列多个参数,也可以通过使用一个对象

  • 以上字母是emp中的属性名称

多对多关系(两张表)

  • 需要使用共通的id,使用@Options

更新数据

  • 以上想要实现模糊查询,但是#{}会被替换成?,所以不能使用。而是要用 ${}

  • 使用concat函数解决
//方式二
   @Select("select * from emp where name like concat('%',#{name},'%') and gender = #{gender} and " +
          "entrydate between #{begin} and #{end} order by update_time desc ")
   public List<Emp> list(String name, Short gender, LocalDate begin , LocalDate end);

变量映射

方案一: 给字段起别名, 让别名与实体类属性一致
    @Select("select id, username, password, name, gender, image, job, entrydate, " +
            "dept_id deptId, create_time createTime, update_time updateTime from emp where id = #{id}")
    public Emp getById(Integer id);
方案二: 通过@Results, @Result注解手动映射封装
    @Results({
            @Result(column = "dept_id", property = "deptId"),
            @Result(column = "create_time", property = "createTime"),
            @Result(column = "update_time", property = "updateTime")
    })
    @Select("select * from emp where id = #{id}")
    public Emp getById(Integer id);
  • 方案三配置application.properties文件
#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库链接的url
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis
#3306后面内容是要链接数据库的名称
#链接数据库的用户名
spring.datasource.username=root
#链接数据库的密码
spring.datasource.password=123456
#开启mybatis的驼峰命名自动映射开关  a_bbb ----> aBbb
mybatis.configuration.map-underscore-to-camel-case=true
#配置mybatis的日志 指定输出到控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

XML文件定义的三种规范

一、同包同名

比如我要配置com.example.webcase下mapper的xml,那么便要如以下一样

二、一个xml文件对应一个接口,且名称完全一致

如图

三、xml中SQL语句的id要与mapper接口中的方法名保持一致,并且放回类型也是一致的

  • mapper接口中的方法名为list,返回值是List

  • xml中的id也为list,返回值为List

XML映射文件来配置sql

  • 一个接口与一个映射文件相对应
  • 红色是要求一,紫色是要求二
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  • 每次配置xml文件时候,根据配置东西的不同要选择不同的约束。比如以上就是mysql的约束

访问mybatis中文网获得

https://mybatis.net.cn/getting-started.html

动态SQL

  • 指查询条件随着用户所填变化而变化
  • 以上if有一个缺陷,当name为空而gender有值的时候,会出现语法错误
动态查询

  • 使用where解决
动态更新

  • 通过Alt+回车可以自动生成动态sql代码

  • 不同的关键字能生成不同
  • 也会if限制,多个 ,

批量删除

代码复用

  • 用于代码的复用性

配置文件

使用application.properties配置文件

不同的配置文件

011)]

XML映射文件来配置sql

[外链图片转存中…(img-x4YKjqVs-1714007817011)]

  • 一个接口与一个映射文件相对应
  • 红色是要求一,紫色是要求二
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  • 每次配置xml文件时候,根据配置东西的不同要选择不同的约束。比如以上就是mysql的约束

访问mybatis中文网获得

https://mybatis.net.cn/getting-started.html

[外链图片转存中…(img-x1DGCwa8-1714007817011)]

[外链图片转存中…(img-pyMgdDtU-1714007817012)]

[外链图片转存中…(img-ns5YgnHb-1714007817012)]

动态SQL

[外链图片转存中…(img-TMZ5N4Z2-1714007817012)]

  • 指查询条件随着用户所填变化而变化
  • 以上if有一个缺陷,当name为空而gender有值的时候,会出现语法错误
动态查询

[外链图片转存中…(img-7qvdoCno-1714007817013)]

  • 使用where解决
动态更新

[外链图片转存中…(img-POn4JMiQ-1714007817014)]

  • 通过Alt+回车可以自动生成动态sql代码

[外链图片转存中…(img-1361I06g-1714007817014)]

  • 不同的关键字能生成不同
  • 也会if限制,多个 ,

[外链图片转存中…(img-LuWRjqH0-1714007817014)]

[外链图片转存中…(img-DHfKCUpS-1714007817015)]

批量删除

[外链图片转存中…(img-IYeQxTWd-1714007817015)]

代码复用

[外链图片转存中…(img-lSHub1Zt-1714007817016)]

  • 用于代码的复用性

配置文件

使用application.properties配置文件

[外链图片转存中…(img-c56FDcEe-1714007817016)]

[外链图片转存中…(img-Tr1oaWUZ-1714007817016)]

不同的配置文件

[外链图片转存中…(img-3gaN4fAv-1714007817017)]

[外链图片转存中…(img-uM9nInYb-1714007817017)]

[外链图片转存中…(img-cXZyXj6a-1714007817018)]

[外链图片转存中…(img-uhWTISOU-1714007817018)]

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1天前
|
设计模式 弹性计算 监控
后端开发中的微服务架构:优势、挑战与实施策略
在现代软件开发中,微服务架构已成为一种流行的设计模式,特别是在后端开发领域。该架构风格通过将应用程序分解为一组小型、松耦合的服务,旨在提升可维护性、可扩展性和敏捷性。本文深入探讨了微服务架构的关键优势,面临的主要挑战,以及成功实施微服务的策略。通过引用业界案例和最新研究,文章提供了对微服务架构综合理解的视角,并讨论了如何在不断变化的技术环境中保持其有效性。
|
1天前
|
设计模式 安全 持续交付
探索微服务架构下的后端开发实践
在现代软件开发领域,微服务架构已成为一种流行的设计模式,它通过将应用程序分解为一组小的服务来促进敏捷开发和可扩展性。本文深入探讨了微服务架构的核心概念、技术选型、数据一致性挑战以及安全性考虑,旨在为后端开发人员提供一份全面的微服务开发指南。文章结合最新的研究成果和业界最佳实践,分析了微服务架构的优势和面临的挑战,并提出了相应的解决方案。读者将了解到如何在实际项目中应用微服务原则,以及如何克服实施过程中的技术和组织障碍。
|
2天前
|
存储 设计模式 监控
后端开发中的微服务架构实践与挑战
在数字化时代背景下,微服务架构作为现代软件工程的典范,被广泛应用于后端开发领域。本文将深入探讨微服务架构的核心概念、实施策略及其面临的主要挑战,同时提供一系列针对性的解决方案和最佳实践。通过引用最新的研究成果和行业案例,文章旨在为后端开发者提供一个全面的微服务架构指南,帮助他们在构建和维护复杂系统时做出明智的决策。
8 1
|
1天前
|
编译器 PHP 开发者
探索PHP 8的新特性及其对现代Web开发的影响
【7月更文挑战第3天】随着PHP 8的发布,这个广受欢迎的服务器端脚本语言迎来了一系列创新的功能和性能提升。本文将深入探讨PHP 8中的新特性,分析它们如何优化代码编写流程、提高应用程序性能,并讨论这些变化给现代Web开发带来的深远影响。从联合类型到JIT编译器,我们将一窥PHP未来的发展蓝图。
|
2天前
|
安全 编译器 测试技术
PHP 8新特性深度解析及其对现代Web开发的影响
本文旨在深入探讨PHP 8的新增特性及其在现代Web开发中的应用与影响。通过分析PHP 8引入的类型系统、性能改进、语言结构更新等关键变化,文章将展示这些新特性如何提升代码质量、加快执行速度,以及简化开发流程。引用权威数据和案例研究,结合科学方法论,本文将论证PHP 8为开发者带来的具体益处,并预测其对未来Web技术趋势的潜在影响。
|
2天前
|
消息中间件 监控 API
后端开发中的微服务架构实践与挑战
在现代软件开发中,微服务架构因其灵活性和可扩展性而受到广泛推崇。本文将深入探讨微服务的核心概念、实施步骤以及面临的技术挑战,同时结合最新的研究数据和行业案例,分析微服务在实际应用中的表现和优化策略,为后端开发人员提供一份实用的指南。
6 0
|
7天前
|
IDE Java 开发工具
Spring Boot:加速Java后端开发的现代化利器
在当今快速迭代的软件开发环境中,Spring Boot 已成为Java后端开发领域的首选框架。作为Spring家族的一员,它以“约定优于配置”的设计理念,极大地简化了传统Spring应用的配置和部署过程,让开发者能够更加专注于业务逻辑的实现。本文将探讨Spring Boot的核心优势,并通过一个简单的示例展示如何快速启动一个基于Spring Boot的Java Web应用。
26 1
|
2天前
|
弹性计算 运维 Kubernetes
探索后端开发的未来:微服务架构与容器化技术
在数字化时代的浪潮中,后端开发正经历着前所未有的变革。微服务架构的兴起和容器化技术的普及,不仅重新定义了软件的开发、部署和管理方式,还为后端开发带来了新的挑战和机遇。本文将深入探讨微服务架构和容器化技术如何影响后端开发的未来,通过数据支撑和逻辑推理,揭示这些技术趋势背后的科学原理和实际应用价值。
|
3天前
|
监控 Kubernetes 持续交付
后端开发中的微服务架构:原理、优势与实践
本文深入探讨了在现代后端开发中,微服务架构如何成为提升系统可维护性、扩展性和敏捷性的关键技术。文章首先定义了微服务并解释了其核心原理,随后通过数据和案例分析,展示了微服务架构如何优化开发流程和提高系统性能。最后,文中提供了实施微服务架构的实用建议,旨在帮助开发者更好地理解和应用这一架构模式。
|
8天前
|
JSON 前端开发 Java
一文读Web开发 之接口后端接口、类与前端请求、拦截器编写
一文读Web开发 之接口后端接口、类与前端请求、拦截器编写
22 6