- 数据库 edu_teacher
1、库名与应用名称尽量一致
2、表名、字段名必须使用小写字母或数字,禁止出现数字开头,
3、表名不使用复数名词
4、表的命名最好是加上“业务名称_表的作用”。如,edu_teacher
5、表必备三字段:id, gmt_create, gmt_modified
说明:
其中 id 必为主键,类型为 bigint unsigned、单表时自增、步长为 1。
(如果使用分库分表集群部署,则id类型为verchar,非自增,业务中使用分布式id生成器)
gmt_create, gmt_modified 的类型均为 datetime 类型,前者现在时表示主动创建,后者过去分词表示被 动更新。
6、单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。 说明:如果预计三年后的数据量根本达不到这个级别,请不要在创建表时就分库分表。
7、表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint (1 表示是,0 表示否)。
说明:任何字段如果为非负数,必须是 unsigned。
注意:POJO 类中的任何布尔类型的变量,都不要加 is 前缀。数据库表示是与否的值,使用 tinyint 类型,坚持 is_xxx 的 命名方式是为了明确其取值含义与取值范围。
正例:表达逻辑删除的字段名 is_deleted,1 表示删除,0 表示未删除。
8、小数类型为 decimal,禁止使用 float 和 double。 说明:float 和 double 在存储的时候,存在精度损失的问题,很可能在值的比较时,得到不 正确的结果。如果存储的数据范围超过 decimal 的范围,建议将数据拆成整数和小数分开存储。
9、如果存储的字符串长度几乎相等,使用 char 定长字符串类型。
10、varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索 引效率。
11、唯一索引名为 uk_字段名;普通索引名则为 idx_字段名。
说明:uk_ 即 unique key;idx_ 即 index 的简称
12、不得使用外键与级联,一切外键概念必须在应用层解决。外键与级联更新适用于单机低并发,不适合分布式、高并发集群;级联更新是强阻塞,存在数据库更新风暴的风险;外键影响数据库的插入速度。
3. 创建项目结构 4. 搭建项目工程(父工程)- 创建父工程
- 创建sprigboot工程school-parent
- 配置:
- groupId:com.alex
- artifactId:school-parent
- 一直下一步到完成
- 创建sprigboot工程school-parent
- 删除 src 目录
- 配置 pom.xml
- 节点后面添加 pom类型
guli-parent pom
- 在pom.xml中添加依赖的版本
- 删除pom.xml中的内容
- 添加 确定依赖的版本
1.8 0.0.1-SNAPSHOT 3.0.5 2.0 2.7.0 2.8.3 2.10.1 3.17 1.3.1 2.6 4.5.1 0.7.0 4.3.3 3.1.0 2.15.2 1.4.11 1.4.11 1.2.28 2.8.2 20170516 1.7 1.1.0 zx 0.2.2.RELEASE
- 配置
锁定依赖的版本
5. 搭建项目工程(service模块)org.springframework.cloud spring-cloud-dependencies Hoxton.RELEASE pom import org.springframework.cloud spring-cloud-alibaba-dependencies ${cloud-alibaba.version} pom import com.baomidou mybatis-plus-boot-starter ${mybatis-plus.version} org.apache.velocity velocity-engine-core ${velocity.version} io.springfox springfox-swagger ${swagger.version} io.springfox springfox-swagger-ui ${swagger.version} com.aliyun.oss aliyun-sdk-oss ${aliyun.oss.version} joda-time joda-time ${jodatime.version} org.apache.poi poi ${poi.version} org.apache.poi poi-ooxml ${poi.version} commons-fileupload commons-fileupload ${commons-fileupload.version} commons-io commons-io ${commons-io.version} org.apache.httpcomponents httpclient ${httpclient.version} com.google.code.gson gson ${gson.version} io.jsonwebtoken jjwt ${jwt.version} com.aliyun aliyun-java-sdk-core ${aliyun-java-sdk-core.version} com.aliyun.oss aliyun-sdk-oss ${aliyun-sdk-oss.version} com.aliyun aliyun-java-sdk-vod ${aliyun-java-sdk-vod.version} com.aliyun aliyun-java-vod-upload ${aliyun-java-vod-upload.version} com.aliyun aliyun-sdk-vod-upload ${aliyun-sdk-vod-upload.version} com.alibaba fastjson ${fastjson.version} org.json json ${json.version} commons-dbutils commons-dbutils ${commons-dbutils.version} com.alibaba.otter canal.client ${canal.client.version}
- 在父工程school-parent下面创建模块service
- 输入模块名称 service,下一步完成创建
- 添加模块类型是pom
- 节点后面添加 pom类型
guli-parent pom
- 添加项目需要的依赖
org.springframework.boot spring-boot-starter-web com.baomidou mybatis-plus-boot-starter mysql mysql-connector-java org.apache.velocity velocity-engine-core io.springfox springfox-swagger-ui org.projectlombok lombok org.apache.poi poi org.apache.poi poi-ooxml commons-fileupload commons-fileupload org.apache.httpcomponents httpclient commons-io commons-io com.google.code.gson gson junit junit 4.12
- 搭建service-edu模块
- 在父工程service模块下面创建子模块service-edu
- 输入模块名称 service-edu,下一步完成创建
- 讲师管理模块配置
- 在service下面service-edu模块中创建配置文件
- resources目录下创建文件 application.properties
- 在service下面service-edu模块中创建配置文件
# 服务端口 server.port=8001 # 服务名 spring.application.name=service-edu # 环境设置:dev、test、prod spring.profiles.active=dev # mysql数据库连接 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://localhost:3306/school?serverTimezone=GMT%2B8 spring.datasource.username=root spring.datasource.password=alex #mybatis日志 mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
- 创建MP代码生成器
- 在test/java目录下创建包com.atguigu.eduservice,创建代码生成器:CodeGenerator.java
package com.alex.demo;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.Test;
public class CodeGenerator {
@Test
public void run() {
// 1、创建代码生成器
AutoGenerator mpg = new AutoGenerator();
// 2、全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir("D:\Alex\Info\Project\school_parent\service\service_edu" + "/src/main/java");
gc.setAuthor("testjava");
gc.setOpen(false); //生成后是否打开资源管理器
gc.setFileOverride(false); //重新生成时文件是否覆盖
gc.setServiceName("%sService"); //去掉Service接口的首字母I
gc.setIdType(IdType.ID_WORKER); //主键策略
gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型
gc.setSwagger2(true);//开启Swagger2模式
mpg.setGlobalConfig(gc);
// 3、数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/school?serverTimezone=GMT%2B8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("alex");
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);
// 4、包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName("eduservice"); //模块名
// 包 com.alex.eduservice
pc.setParent("com.alex");
pc.setController("controller");
pc.setEntity("entity");
pc.setService("service");
pc.setMapper("mapper");
mpg.setPackageInfo(pc);
// 5、策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setInclude("edu_teacher");
strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体时去掉表前缀
strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
strategy.setRestControllerStyle(true); //restful api风格控制器
strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
mpg.setStrategy(strategy);
// 6、执行
mpg.execute();
}
}
7. 编写后台管理api接口
- @RestController
- @Controller :交给Spring管理创建对象
- @ResponseBody:返回一个JSON数据
- @RequestMapping("/eduservice/teacher") :访问路径
- @GetMapping:表示用get提交
- 编写controller代码
@Autowired
private EduTeacherService eduTeacherService;
@GetMapping("findAll")
public List findAllTeacher() {
// 调用service的方法实现查询所有的操作
List list = eduTeacherService.list(null);
return list;
}
- 创建SpringBoot配置类
- 在edu包下创建config包,创建MyBatisPlusConfig.java
package com.alex.eduservice.config;
@Configuration
@EnableTransactionManagement
@MapperScan("com.alex.eduservice.mapper")
public class MyBatisPlusConfig {
}
- 配置SQL执行性能分析插件
@Bean
@Profile({"dev","test"})// 设置 dev test 环境开启
public PerformanceInterceptor performanceInterceptor() {
PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
performanceInterceptor.setMaxTime(1000);//ms,超过此处设置的ms则sql不执行
performanceInterceptor.setFormat(true);
return performanceInterceptor;
}
- 创建SpringBoot启动类
- 创建启动类 EduApplication.java,注意启动类的创建位置
@SpringBootApplication
public class EduApplication {
public static void main(String[] args) {
SpringApplication.run(EduApplication.class, args);
}
}
- 运行启动类
- 访问http://localhost:8001/eduservice/teacher/findAll 得到json数据



