Java阶段四Day03

news2024/11/15 13:26:48

Java阶段四Day03

文章目录

  • Java阶段四Day03
    • 数据处理基本流程
    • 代码编写顺序
    • 开发DAO层,添加的依赖项
    • 配置数据源
    • 任务拆解
    • 内容管理
    • MySQL中的数据类型和Java属性的类型对照
    • 关于MyBatis Plus
      • MyBatis Plus的基本使用
      • 关于MyBatis Plus的使用建议汇总如下
      • 自动更新时间
    • 关于Profile配置
    • 关于YAML配置

数据处理基本流程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AS12OfKt-1686649353370)(C:\Users\DELL\AppData\Roaming\Typora\typora-user-images\image-20230613094230053.png)]

Controller、Service、DAO(Mapper)通常是MVC框架中最常见的三个层级。

  • Controller主要负责接收请求,处理请求,将请求交给Service层。
  • Service层主要负责业务逻辑的处理,处理Service层中的方法的时候,往往需要与数据库进行交互,通常是通过Mapper层来实现。
  • Mapper层主要负责数据库的读写操作,如增删改查等,通常使用Mybatis作为ORM框架。

基本的流程如下:

  1. Controller层接收请求并调用相应的Service层方法。

  2. Service层接收Controller层传来的请求,处理业务逻辑,并调用Mapper层进行数据操作。

  3. Mapper层根据Service层传来的请求,进行数据库操作。

  4. Mapper层将操作结果返回给Service层。

  5. Service层接收到Mapper层的返回结果,进一步处理并将结果返回给Controller层。

  6. Controller层接收到Service层返回的结果,将结果展示给用户。

代码编写顺序

  • 通常,应该先开发DAO层,再开发Service层,再开发Controller层
  • 由于Controller是Service的调用者,应该先开发Service层,再开发Controller层
  • 由于Service是DAO的调用者,应该先开发DAO层,再开发Service层

开发DAO层,添加的依赖项

pom.xml中添加以下依赖项

<dependencies>
    <!--SpringBoot基础依赖项-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <!-- Lombok:便捷的编写POJO类 -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.20</version>
    </dependency>
    <!-- MySQL -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.27</version>
    </dependency>
    <!-- Druid:数据库连接池框架 -->
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.2.16</version>
    </dependency>
    <!-- MyBatis整合Spring Boot的依赖项 -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.2.2</version>
    </dependency>
    <!-- MyBatis Plus整合Spring Boot的依赖项 -->
    <dependency>
        <groupId>com.baomidou</groupId>
        <artifactId>mybatis-plus-boot-starter</artifactId>
        <version>3.3.0</version>
    </dependency>
    <!-- PageHelper:专用于MyBatis的分页框架 -->
    <dependency>
        <groupId>com.github.pagehelper</groupId>
        <artifactId>pagehelper-spring-boot-starter</artifactId>
        <version>1.3.0</version>
    </dependency>

    <!--SpringBoot测试依赖项-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

配置数据源

spring.datasource.url=jdbc:mysql://localhost:3306/teashop?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
spring.datasource.username=root
spring.datasource.password=root

# 设置MyBatis框架的映射(Mapper)配置文件的位置
mybatis.mapper-locations=classpath:mappers/*.xml

任务拆解

  • 多张数据表,应该先开发基础数据的相关功能,再开发其它数据的相关功能

    • 例如:类别是文章的基础数据,必须先有类别,再有文章;例如文章是评论的基础数据,必须先有文章,再有评论
  • 每种数据,大多情况下,先开发增加相关的功能,再开发查询相关的功能,再开发删除相关的功能,最后开发修改相关的功能

  • 每个功能,大多情况下,先开发DAO层,再开发Service层,再开发Controller

内容管理

内容管理的开发任务大致是:

  • 标签管理:新增标签 / 查询标签列表 / 查询某标签详情 / 删除标签 / 修改标签 / 其它
  • 类别管理:新增类别 / 查询类别列表 / 查询某类别详情 / 删除类别 / 修改类别 / 其它
  • 文章管理:文章标签 / 查询文章列表 / 查询某文章详情 / 删除文章 / 修改文章 / 其它
  • 评论管理:(暂无)
  • 文章、评论顶踩管理:(暂无)

MySQL中的数据类型和Java属性的类型对照

MySQL中的数据类型Java属性的类型
tinyintsmallintintInteger
bigintLong
charvarchartext系列String
datatimeLocalDateTime
decimailBigDecimal
  • POJO类型的编写规范有:
    • 各属性均是private权限
    • 各属性均存在规范命名且public权限的Setters & Getters
    • 存在基于全部属性的hashCode()equals()方法,且,如果2个对象的类型相同、各属性值也全部相同,则必须返回相同的hashCode(),且equals()对比结果为true
    • 实现Serializable接口
  • 许多框架都会默认你的代码是遵守这些规范的,所以,有些框架在实现有些效果时,会自动的调用Setters & Getters方法,或其它方法,或转换类型为Serializable
  • 另外,为了便于查看对象的各属性值,还建议添加toString()方法

关于MyBatis Plus

  • MyBatis Plus(简称MP)是一个MyBatis的增强工具,已连续5年 (2017、2018、2019、2020、2021)获得“OSC年度最受欢迎中国开源软件”奖,MyBatis PlusMyBatis的基础上只做增强,不做改变
  • 其主要特性有:
    • 无侵入:只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑
    • 损耗小:启动即会自动注入基本CURD,性能基本无损耗,直接面向对象操作
    • 强大的CRUD操作:内置通用Mapper、通用Service,仅仅通过少量配置即可实现单表大部分CRUD操作,更有强大的条件构造器,满足各类使用需求
  • MyBatis Plus主要特性有(续):
    • 支持Lambda形式调用:通过Lambda表达式,方便的编写各类查询条件,无需再担心字段写错
    • 支持主键自动生成:支持多达4种主键策略(内含分布式唯一ID生成器―Sequence) ,可自由配置,完美解决主键问题
    • 支持ActiveRecord模式:支持ActiveRecord形式调用,实体类只需继承Model类即可进行强大的CRUD操作
    • 支持自定义全局通用操作:支持全局通用方法注入(write once, useanywhere)
    • 内置代码生成器:采用代码或者Maven插件可快速生成Mapper、ModelService.Controller层代码,支持模板引擎,更有超多自定义配置等您来使用

MyBatis Plus的基本使用

MyBatis Plus默认会在classpath下的mapper文件夹中查找配置SQL语句的XML文件,如果你使用其它名称的文件夹,需要在配置文件中通过mybatis-plus.mapper-locations属性来指定,例如:

mybatis-plus:
 mapper-locations: classpath: mappers/**/*.xml

关于MyBatis Plus的使用建议汇总如下

  • 插入单条数据时,使用MyBatis Plus提供的方法
  • 批量插入数据时,自定义方法并配置映射的SQL语句
  • 根据id删除单条数据时,使用MyBatis Plus提供的方法
  • 根据id批量删除数据时,使用MyBatis Plus提供的方法
  • 更新数据时,使用MyBatis Plus提供的方法
  • 统计查询时,使用MyBatis Plus提供的方法
  • 除了统计查询以外的所有查询,都自定义方法并配置映射的SQL语句

自动更新时间

使用MyBatis Plus 自动更新创建时间、修改时间

//___________添加时间组件___________
@Component
public class TimeMetaObjectHandler implements MetaObjectHandler {

    public static final String FIELD_CREATE_TIME = "gmtCreate";
    public static final String FIELD_UPDATE_TIME = "gmtModified";


    @Override
    public void insertFill(MetaObject metaObject) {
        LocalDateTime now = LocalDateTime.now();
        this.setFieldValByName(FIELD_CREATE_TIME,now,metaObject);
        this.setFieldValByName(FIELD_UPDATE_TIME,now,metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        LocalDateTime now = LocalDateTime.now();
        this.setFieldValByName(FIELD_UPDATE_TIME,now,metaObject);
    }
}


//___________实体类中添加___________

/**
  * 数据创建时间
  */
@TableField(fill = FieldFill.INSERT)
private LocalDateTime gmtCreate;

/**
  * 数据最后修改时间
  */
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime gmtModified;

关于Profile配置

  • 以连接数据库的配置为例,localhost、3306、用户名、密码等,当开发完成后,可能会有专门的测试人员对此项目进行测试,测试时使用的MySQL基本上不会是当前开发使用的MySQL,则以上属性的值都需要修改,当测试通过后,项目正式上线,使用的MySQL又会不同,则各属性值需要再次修改…即使全部改完了,项目可能需要进入下一阶段的开发,以上各属性值又需要改回成开发时的配置值!在开发实践中,除了连接数据库的配置信息以外,其它配置也可能会根据项目的运行环境不同,而使用不同的配置值

  • Spring框架提供了Profile配置的机制,允许同时存在好几套配置文件,这些配置文件默认是可以不激活的(默认是无效的),当需要使用哪套配置,就激活哪套配置文件即可,这样的配置文件称之为Profile配置

  • Spring Boot框架很好的支持了Profile配置,其规则是:

    • application.properties是主配置文件,其中的所有配置都是默认加载的
    • application-自定义名称.properties作为文件名的全部是Profile配置,默认是不加载的,必须激活这些文件中的配置才会被加载
    • application.properties (主配置文件)中,使用spring.profiles.active属性,可以激活Profile配置,此属性的值就是Profile配置的文件名的自定义部分,如果有多个Profile配置需要激活,使用逗号分隔即可
    • 如果在application.properties (主配置文件)中,与在Profile配置中,存在完全相同的属性的配置,则以Profile配置为准,根据使用经验,对于多个Profile配置,作用域范围越小越优先

关于YAML配置

YAML是一种编写配置文件的语法,表现为以.yml.yaml作为扩展名的文件相比.properties文件,其语法的改变有:

  • 原属性名中有小数点的部分,改为使用冒号+换行后空2格
  • 原属性名与属性值使用等于号分隔,改为使用冒号+1个空格
  • 如果多个配置中, 属性名有相同的部分,则不必配置相同的部分,保持对应的空格(缩进)即可

在Spring Boot中,关于配置文件的优先级,一般遵循以下规则:

  1. application.properties文件的优先级高于application.yml文件。
  2. 同一配置属性在不同配置文件中的优先级,以第一个被加载的文件为准。
  3. 配置文件中的配置属性可以通过Spring Boot提供的多种方式进行覆盖,例如命令行参数、环境变量等。

如果既有application.properties文件又有application.yml文件,并且两个文件中都配置了spring.profiles.active属性,那么在启动应用程序时,spring.profiles.active属性的值将总是以application.properties文件中的配置值为准。但是,如果使用了命令行参数或环境变量对spring.profiles.active属性进行了设置,那么这会覆盖application.propertiesapplication.yml文件中的配置值。

其实,Spring系列框架并不支持YAML语法的配置文件,需要添加snakeyaml工具包,在Spring Boot的基础依赖项中,已经包含此工具包,所以,在基于Spring Boot框架的项目中可以支持使用YAML配置时,也支持Profile配置, 规则完全相同,只是文件扩展名与文件内的配置语法不同

application.properties

spring.datasource.url=jdbc:mysql://localhost:3306/teashop?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=50
mybatis-plus.mapper-locations=classpath:mappers/**/*.xml

application.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/teashop?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
    username: root
    password: root
    druid:
      initial-size: 5
      max-active: 50

mybatis-plus:
  mapper-locations: classpath:mappers/**/*.xml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/642871.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一种不停服的数据迁移方案

一、前言 好的方案是一步步演进出来的。当前最优的系统方案&#xff0c;可能在下一个月、三个月或半年后&#xff0c;就会遇到瓶颈&#xff0c;需要调整自身以便适应新的业务场景。系统的演进就是一个快进版的人类进化史。 我之前负责的一个系统&#xff0c;一开始基本没啥数…

46 最佳实践-性能最佳实践-内存大页

文章目录 46 最佳实践-性能最佳实践-内存大页46.1 概述46.2 操作指导 46 最佳实践-性能最佳实践-内存大页 46.1 概述 相比传统的4K内存分页&#xff0c;openEuler也支持2MB/1GB的大内存分页。内存大页可以有效减少TLB miss&#xff0c;显著提升内存访问密集型业务的性能。ope…

证券行业异构系统众多,微服务和网格如何全都要

在携手网易数帆取得中间件云原生化的创新成果之后&#xff0c;安信证券已在谋划大规模微服务化的布局&#xff0c;以确保信息系统架构走在现代金融科技的前列&#xff0c;支撑业务在未来数智金融竞争中把握主动权。 架构未动&#xff0c;思想先行。安信证券近日在内部组织了一…

安全左移DevSecOps开源工具链建设

开发安全相关技术和产品受到越来越多的关注。行业共识认为&#xff0c;应用系统上线之后进行软件漏洞修复&#xff0c;其修复成本是需求设计阶段修复成本的几十倍。因此&#xff0c;在开发环节&#xff0c;引入相应的安全工具&#xff0c;能够有效的降低漏洞的修复成本&#xf…

vue+el-select下拉实现:全选、反选、清空功能

问题描述&#xff1a; el-select下拉框要求实现全选功能。具体功能包括&#xff1a; 当选择【全选】时&#xff0c;所有选项全部被勾选&#xff1b;当选择【反选】时&#xff0c;已选择选项变为未选择选项&#xff0c;未选项变为已选项当选择【清空】时&#xff0c;所有选项变…

SpringBoot进阶学习?看这篇就够了

相信从事Java开发的朋友都听说过SSM框架&#xff0c;老点的甚至经历过SSH&#xff0c;说起来有点恐怖&#xff0c;比如我就是经历过SSH那个时代未流。当然无论是SSM还是SSH都不是今天的重点&#xff0c;今天要说的是Spring Boot&#xff0c;一个令人眼前一亮的框架&#xff0c;…

作用域详解

作用域详解 1、概念2、分类2.1 全局作用域2.2 局部作用域2.2.1 函数作用域2.2.2 块级作用域2.2.3 块级作用域与函数声明 1、概念 JavaScript中的作用域是指变量、函数和对象在代码中可访问的范围。作用域规定了代码中的标识符&#xff08;变量名、函数名等&#xff09;在何处和…

ansible自动部署zabbix监控平台

目录 ansible端部署 使用ansible配置zabbix-mysql端 使用ansible配置zabbix-server端 使用ansible配置zabbix-agent端 一键部署zabbix Ansible是一款开源的自动化运维工具&#xff0c;可以通过SSH协议远程自动化地执行一些复杂的IT工作&#xff0c;例如程序部署、配置管理、…

Python自动化测试——postman,jmeter接口测试

关于众所postman&#xff0c;jmeter&#xff0c;做自动化测试的我想对这两个词并不陌生。大家都知道postman用来做接口测试很方便,下面我们就用一些例子来演示一下它该如何进行接口测试&#xff1a; 首先我们来介绍一下接口测试的概念&#xff1a; 1、什么是接口测试&#xf…

【裸机开发】内核时钟 PLL1 配置实验(一)—— 寄存器分析篇

本章主要会回答以下问题 &#xff1f; imx6u 的时钟源来自于哪 &#xff1f;为什么一个起始时钟源&#xff0c;最终分成了多路&#xff1f;不同的时钟源是如何与外设对应起来的&#xff1f;&#xff08;时钟树&#xff09;要配置内核时钟频率 有哪些步骤 &#xff1f;涉及到哪…

NLP学习笔记十一-word2vec模型

NLP学习笔记十一-word2vec模型 再介绍word2vec模型之前&#xff0c;我们需要先介绍一些背景知识。 我们只知道&#xff0c;NLP这一领域在ward2vec出现之前肯定也是有很大程度发展的&#xff0c;那么想要用将自然语言用计算机进行处理&#xff0c;进行计算&#xff0c;我们必须…

JQuery全部详细笔记-下

JQuery全部详细笔记-下 jQuery 的 DOM 操作 查找节点, 修改属性 查找属性节点: 查找到所需要的元素之后, 可以调用 jQuery 对象的 attr() 方法来获取它的各种属性值 应用实例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UT…

RK3288 Android8.1添加lvds以及gt9触摸屏(二)

现在先说gt9触摸屏如何配置 首先拿到硬件厂商提供的cfg以及gt9xx文件夹 驱动源码路径&#xff1a;kernel/drivers/input/touchscreen/gtxx 注&#xff1a;可以自己定义最后把gt9xx.h以及gt9xx.c文件放在哪&#xff0c;放在哪就在makefile里指定对应位置 1.touchscreen文件夹…

耗时108天,阿里P8总结了 1000 道 Java 工程师面试题

半年前还在迷茫该学什么&#xff0c;怎样才能走出现在的困境&#xff0c;半年后已经成功上岸阿里&#xff0c;感谢在这期间帮助我的每一个人。 面试中总结了 1000 道经典的 Java 面试题&#xff0c;里面包含面试要回答的知识重点&#xff0c;并且我根据知识类型进行了分类&…

写一个自定义View你都需要注意什么

本文主要是记录一下继承子View&#xff0c;所需要实现的方法&#xff0c;以及对自己的知识做一下梳理和记录&#xff0c;其中不少内容觉得自己应该是会的&#xff0c;但是实际写起来&#xff0c;还是遇到不少阻碍 构造方法 首先构造先了解一下构造方法&#xff0c;一般来说&a…

和悦未来社区:助力共同富裕,三思打造智慧社区新样板

“共同富裕是社会主义的本质要求&#xff0c;是中国式现代化的重要特征&#xff0c;是人民群众的共同期盼。” 2021年5月20日&#xff0c;《中共中央 国务院关于支持浙江高质量发展建设共同富裕示范区的意见》正式发布。 浙江省作为共同富裕先行示范省份&#xff0c;行而不辍…

SpringCloud microservice-student-consumer-80服务消费者项目建立(四)

新建一个服务器提供者module子模块&#xff0c;类似前面建的common公共模块&#xff0c;名称是 microservice-student-consumer-1001 pom.xml修改&#xff1a; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSc…

01 UML概述

UML概述 (1) 规约系统的制品–UML适用于对所有重要的分析、设 计和实现决策进行详细描述 (2) 构造系统的制品–UML描述的模型可与各种编程语言直接相关联 UML应用范围 (1)可用于对象方法和构件方法&#xff1b; (2)可用于 ●所有应用领域(例如&#xff0c;航空航天、财政、通…

重生之我测阿里云U1实例(通用算力型实例)

官方福利&#xff01;&#xff01;&#xff01;&#xff01;大厂羊毛你确定不薅&#xff1f;&#xff1f;&#xff1f; 参与ECSU实例评测&#xff0c;申请免费体验机会&#xff1a;https://developer.aliyun.com/mission/review/ecsu 参与ECSU实例评测&#xff0c;申请免费体验…

CVPR 2023 | 基于金字塔模型的异常检测方法

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/pdf/2211.11317 0.背景&#xff1a; 工业异常检测旨在发现产品的异常区域&#xff0c;在工业质量检测中发挥着重要作用。在工业场景中&#xff0c;很容易获得大量的正…