网站建设方案概述,竹业网站建设,如何建设自己的网站 知乎,wordpress手机全部显示1. 关于csmall-product项目
这是“酷鲨商城”大项目中的“商品管理”项目#xff0c;是一个后台管理项目#xff08;给管理员#xff0c;或运营人员使用的项目#xff0c;并不是普通用户使用的#xff09;#xff0c;并且#xff0c;只会涉及与发布商品可能相关的功能开…1. 关于csmall-product项目
这是“酷鲨商城”大项目中的“商品管理”项目是一个后台管理项目给管理员或运营人员使用的项目并不是普通用户使用的并且只会涉及与发布商品可能相关的功能开发整个系统中需要的其它功能将由其它项目来实现另外此项目只是一个后端项目采取了前后端分离的开发模式。
在本阶段还会开发csmall-passport项目这是“管理员管理”的后端项目还有csmall-web-client项目这是“前端项目”。
2. 创建csmall-product项目
在IntelliJ IDEA的创建项目向导界面中左侧选择Spring Initializr右侧参数选择
**Server URL**使用 https://start.spring.io 或 https://start.springboot.io 在这2个中选择任何一个可用的如果暂时出现这2个均不可用可以反复尝试或稍后尝试**Name**使用csmall-product即可Groupcn.teduArtifactcsmall-productPackage Namecn.tedu.csmall.productJava8
3. 调整pom.xml
关于当前项目的父级项目的版本推荐使用2.5.x系列的版本号其中x可以是0到14之间的任何数字。
完成后在src/test/java下找到默认已经存在的包包下有测试类测试类中有个空的测试方法
Test
void contextLoads() {
}执行此测试方法应该是可以通过测试的如果无法通过测试应该是项目的依赖项或某些配置的错误导致的需要及时调整。
4. 创建数据库
创建名为mall_pms的数据库
CREATE DATABASE mall_pms;提示SQL语句并不区分大小写。
5. 配置Database面板
在IntelliJ IDEA的窗口右侧可以展开Database面板可以辅助处理数据库、数据表的相关操作通常在开发一个项目之前强烈推荐配置此面板
提示如果在窗口右侧没有Database面板可以点击View菜单 Tool Windows子菜单找到Database菜单项点击它即可展开右侧的Database面板。
**注意**如果出现[42000][-1] (conn214) invalid fetch size错误应该删除当前配置重新添加配置并且在MariaDB和MySQL之间切换选择。
详细配置教程http://doc.canglaoshi.org/doc/idea_database/index.html
6. 导入数据表
将老师提供的SQL复制到Database面板的console中全部执行即可创建当前库中的所有表并插入了一些测试用的数据。
7. 功能的开发顺序
首先要明确当前项目中涉及哪些数据
pms_album相册 与“图片”是类似“文件夹”与“文件”的关系 pms_attribute属性pms_attribute_template属性模板 与“属性”是类似“文件夹”与“文件”的关系 pms_brand品牌pms_brand_category品牌与类别的关联pms_category类别pms_category_attribute_template类别与属性模板的关联pms_picture图片pms_skuSKUpms_sku_specificationSKU属性pms_spuSPUpms_spu_detailSPU详情
通常应该先开发偏基础的数据例如品牌、类别等都是SPU的基础所以应该先开发品牌、类别这类数据的管理功能再开发SPU、SKU这类数据的管理员。
对于多种并不直接相关的数据应该先开发逻辑简单的数据相对来说类别可能更多“麻烦”一些因为“类别”是一种“多层级”的数据例如“家用电器”是“电视”的父级其下还有“冰箱”、“空调”而这些子级类别还可以有更子级的类别例如“空调”就可以有“挂机空调”、“柜机空调”、“中央空调”等子级所以类别比品牌、相册这些数据的逻辑规则会更复杂一些应该先开发品牌、相册等数据的管理功能。
对于各数据的功能开发大致上应该采取增 查 删 改的开发顺序。
每一个功能的开发大致上应该采取Mapper Service Controller 页面的开发顺序。
8. 添加Mybatis相关依赖项
在pom.xml中添加依赖项
!-- Mybatis整合Spring Boot的依赖项 --
dependencygroupIdorg.mybatis.spring.boot/groupIdartifactIdmybatis-spring-boot-starter/artifactIdversion2.2.2/version
/dependency
!-- MySQL的依赖项 --
dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdscoperuntime/scope
/dependency由于Spring Boot存在自动配置当添加了数据库编程相关的依赖项后无论是启动项目还是执行任何Spring Boot测试都会尝试读取连接数据库的配置信息如果还没有添加相关配置会导致启动失败/测试失败例如
为了解决此问题需要在配置文件中添加连接数据库的相关配置。
9. 关于Spring Boot的配置文件
9.1. 关于application.properties
在Spring Boot项目中在src/main/resources文件夹下存在application.properties文件此文件是Spring Boot会自动读取的配置文件。
Spring Boot定义了许多特定用途的配置在application.properties中需要按照特定的属性名进行配置则Spring Boot读取到了这些特定的配置后会自动应用起来
例如添加连接数据库的配置
spring.datasource.urljdbc:mysql://localhost:3306/mall_pms?characterEncodingutf-8useUnicodetrueserverTimezoneAsia/Shanghai
spring.datasource.usernameroot
spring.datasource.passwordroot9.2. 关于Profile配置
以上在application.properties中添加的是连接数据库的配置信息当前处于开发阶段所以各配置值都是开发时所使用的MySQL的相关配置例如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配置为准例如
以上图为例可以在application.properties中配置spring.profiles.active属性当取值为dev时application-dev.properties文件中的配置信息将被应用当取值为test时application-test.properties文件中的配置信息将被应用以此类推。
在开发实践中类似的配置文件可能较多可以完全自行测试例如可以创建application-dev-jack.properties、application-dev-tom.properties就可以区分不同的开发人员当然激活时取值仍是自定义名称的部分例如spring.profiles.activedev-jack。
9.3. 关于YAML配置
YAML是一种编写配置文件的语法表现为以.yml作为扩展名的文件。
相比.properties文件其语法的改变有
原属性名中有小数点的部分改为使用冒号换行后空2格原属性名与属性值使用等于号分隔改为使用冒号1个空格如果多个配置中属性名有相同的部分则不必配置相同的部分保持对应的空格缩进即可
例如原有的关于数据库连接的配置使用YAML语法则改为
spring:datasource:url: jdbc:mysql://localhost:3306/mall_pms?characterEncodingutf-8useUnicodetrueserverTimezoneAsia/Shanghaiusername: rootpassword: root**注意**YAML语法要求是严格的必须按照以上语法规则例如每次换行后需要添加2个空格不可以使用TAB制表位取代属性名与属性值之间冒号的右侧必须有1个空格。
**注意**不允许存在完全相同的多行配置包括缩进例如不可以同时存在2行spring:。
**提示**在使用IntelliJ IDEA编辑.yml文件时会自动将按下的TAB转换为2个空格。
**提示**对于纯数字的属性值如果此属性的值应该是字符串时需要使用引号框住整个数字。
**提示**在Spring Boot项目中即使没有将属性名中的小数点换成YAML语法应该有的样子也不会出错
在Spring框架中并不直接识别YAML语法的配置在Spring Boot项目中基础依赖项spring-boot-starter中已经包含解析YAML配置的工具包snakeyaml可以直接识别并解析YAML语法的配置文件。
在Spring Boot项目中对.yml文件的支持与对.properties文件的是完全相同的即你可以将所有.properties文件改成.yml文件再调整配置文件内部的语法即可。
10. 检测连接数据库的配置是否正确
在项目中原本已经存在的测试类CsmallProductApplicationTests类中添加以下代码并执行测试
Autowired
DataSource dataSource; // 注意导java.sql包中的接口Test
void getConnection() throws Throwable {dataSource.getConnection(); // 调用getConnection()时会连接数据库则可以判断配置的连接信息是否正确
}当配置的spring.datasource.url的值的格式有误时会出现错误
Caused by: java.lang.IllegalArgumentException: URL must start with jdbc当配置的spring.datasource.url中的主机名部分有误时会出现错误
Caused by: java.net.UnknownHostException: localhast当配置的spring.datasource.url中的端口号部分有误时会出现错误
Caused by: java.net.ConnectException: Connection refused: connect当配置的spring.datasource.url中的serverTimezone参数值有误时会出现错误
Caused by: java.time.zone.ZoneRulesException: Unknown time-zone ID: Asia/ShangHai当配置的spring.datasource.username的值有误时会出现错误
java.sql.SQLException: Access denied for user root123localhost (using password: YES)当配置的spring.datasource.password的值有误时会出现错误
java.sql.SQLException: Access denied for user rootlocalhost (using password: YES)java.sql.SQLException: Access denied for user rootlocalhost (using password: NO)**注意**关于连接数据库的配置各属性名是预定义的如果属性名写错相当于是没有配置此属性
**注意**配置的值不要有多余的空格这些空格也会被当作值的一部分
11. 关于POJO类型的编写规范
在项目中以定义属性为主基本上不关心方法的类都可以称之为POJO类例如实体类、DTO类等。
所有的POJO类都应该
【必须】所有属性应该是私有的访问权限为private【必须】存在无参数构造方法【必须】所有属性都有规范名称的Setter Getter【必须】类中存在规范的equals()和hashCode() 如果2个对象类型相同所有属性值都相同则equals()对比结果应该是true且hashCode()返回值应该相同如果2个对象类型不同或类型相同但有任何属性值不同则equals()对比结果应该是false且hashCode()返回值应该不同通常使用开发工具自动生成的equals()和hashCode()都是规范的 【必须】类实现了Serializable接口【建议】类中存在基于所有属性的toString()
许多框架都会默认你的POJO类型是遵循了以上规范的这些框架在实现某些效果时会自动调用相关的方法或将你创建的类型的对象转换成Serializable接口类型所以如果你的POJO类型没有遵循这些规范可能导致某些框架的某些功能不可用甚至出错
另外MySQL中的字段类型与Java中的数据类型的对应关系应该如下
MySQL中的字段类型Java中的属性类型tinyint / smallint / intIntegerbigintLongvarchar / char / text系列StringdecimalBigDecimaldatetimeLocalDateTime
12. 关于Lombok框架
Lombok框架可以通过特定的注解在编译期生成Setter、Getter、equals()、hashCode()、toString()、无参数构造方法、全参数构造方法等。
此框架的依赖项为
!-- Lombok的依赖项主要用于简化POJO类的编写 --
dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.20/versionscopeprovided/scope
/dependency关于使用Lombok时的相关常用注解
Data添加在类上可以在编译期生成全部参数对应的Setter、Getter、equals()、hashCode()、toString()、无参数构造方法 使用此注解时要求当前类的父类必须存在无参数构造方法 Setter添加在类中的属性上可以生成此属性对应的Setter方法或添加在类上可以生成此类中所有属性对应的Setter方法Getter用法与作用可参考Setter注解此注解的作用是生成Getter方法EqualsAndHashCode添加在类上可以生成基于此类中所有属性的equals()和hashCode()方法ToString添加在类上可以生成基于此类中所有属性的toString方法NoArgsConstructor添加在类上可以生成无参数的构造方法AllArgsConstructor添加在类上可以生成全参数的构造方法Slf4j参见后文
更多注解可以自行查阅资料或在IntelliJ IDEA中查看Lombok插件的详情。
**注意**需要在IntelliJ IDEA中安装Lombok插件否则在编写代码时不会有相关的提示并且即使直接写出代码也会报错但是并不影响运行安装教程http://doc.canglaoshi.org/doc/idea_lombok/IDEA-5-PLUGINS-LOMBOK.html
**提示**Lombok是一个有“侵入性”的框架当一个团队中有成员使用了此框架就需要安装Lombok插件甚至整个团队都需要安装此插件否则编码、阅读代码的体验就会较差所以某些开发团队中是禁止使用的。
**注意**需要在IntelliJ IDEA中安装Lombok插件否则在编写代码时不会有相关的提示并且即使直接写出代码也会报错但是并不影响运行安装教程http://doc.canglaoshi.org/doc/idea_lombok/IDEA-5-PLUGINS-LOMBOK.html
13. 编写实体类
在Spring Boot项目中推荐将所有的类都创建在项目的根包创建项目时就已经生成好了的包之下。
在项目的根包下创建pojo.entity.Album类在此类中声明与pms_album表对应的属性
package cn.tedu.csmall.product.pojo.entity;import lombok.Data;import java.io.Serializable;
import java.time.LocalDateTime;/*** 相册数据的实体类** author javatedu.cn* version 0.0.1*/
Data
public class Album implements Serializable {/*** 数据id*/private Long id;/*** 相册名称*/private String name;/*** 相册简介*/private String description;/*** 排序序号*/private Integer sort;/*** 数据创建时间*/private LocalDateTime gmtCreate;/*** 数据最后修改时间*/private LocalDateTime gmtModified;}