Java阶段四Day03

Java阶段四Day03

文章目录

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

数据处理基本流程

Java阶段四Day03_第1张图片

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>
    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starterartifactId>
    dependency>
    
    <dependency>
        <groupId>org.projectlombokgroupId>
        <artifactId>lombokartifactId>
        <version>1.18.20version>
    dependency>
    
    <dependency>
        <groupId>mysqlgroupId>
        <artifactId>mysql-connector-javaartifactId>
        <version>8.0.27version>
    dependency>
    
    <dependency>
        <groupId>com.alibabagroupId>
        <artifactId>druid-spring-boot-starterartifactId>
        <version>1.2.16version>
    dependency>
    
    <dependency>
        <groupId>org.mybatis.spring.bootgroupId>
        <artifactId>mybatis-spring-boot-starterartifactId>
        <version>2.2.2version>
    dependency>
    
    <dependency>
        <groupId>com.baomidougroupId>
        <artifactId>mybatis-plus-boot-starterartifactId>
        <version>3.3.0version>
    dependency>
    
    <dependency>
        <groupId>com.github.pagehelpergroupId>
        <artifactId>pagehelper-spring-boot-starterartifactId>
        <version>1.3.0version>
    dependency>

    
    <dependency>
        <groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-starter-testartifactId>
        <scope>testscope>
    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属性的类型
tinyintsmallintint Integer
bigint Long
charvarchartext系列 String
datatime LocalDateTime
decimail BigDecimal
  • 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

你可能感兴趣的:(培训之旅,java,mybatis,spring,boot)