实习周记(六):代码规范
实习周记(六):代码规范
准备工作
-
阿里巴巴规约插件
- 打开 Settings >> Plugins >> MarketPlace,搜索并安装
Alibaba Java Code Guidelines
,重启即可生效 - 当编写不符合规范的代码时,会有下划线提示你修改
- 打开 Settings >> Plugins >> MarketPlace,搜索并安装
-
注释
- 设置工程及配置文件编码为UTF-8
- 自定义类注释模板
- 自定义方法注释模板
模板配置链接:https://pan.baidu.com/s/1jcrBTsRp_V7vT1DtBAFw-A
提取码:btbd
检验效果(CRUD)
创建数据库表
--建表
--学生表
CREATE TABLE `Student`(
`s_id` VARCHAR(20),
`s_name` VARCHAR(20) NOT NULL DEFAULT '',
`s_birth` VARCHAR(20) NOT NULL DEFAULT '',
`s_sex` VARCHAR(10) NOT NULL DEFAULT '',
PRIMARY KEY(`s_id`)
);
--课程表
CREATE TABLE `Course`(
`c_id` VARCHAR(20),
`c_name` VARCHAR(20) NOT NULL DEFAULT '',
`t_id` VARCHAR(20) NOT NULL,
PRIMARY KEY(`c_id`)
);
--教师表
CREATE TABLE `Teacher`(
`t_id` VARCHAR(20),
`t_name` VARCHAR(20) NOT NULL DEFAULT '',
PRIMARY KEY(`t_id`)
);
--成绩表
CREATE TABLE `Score`(
`s_id` VARCHAR(20),
`c_id` VARCHAR(20),
`s_score` INT(3),
PRIMARY KEY(`s_id`,`c_id`)
);
--插入学生表测试数据
insert into Student values('01' , '赵雷' , '1990-01-01' , '男');
insert into Student values('02' , '钱电' , '1990-12-21' , '男');
insert into Student values('03' , '孙风' , '1990-05-20' , '男');
insert into Student values('04' , '李云' , '1990-08-06' , '男');
insert into Student values('05' , '周梅' , '1991-12-01' , '女');
insert into Student values('06' , '吴兰' , '1992-03-01' , '女');
insert into Student values('07' , '郑竹' , '1989-07-01' , '女');
insert into Student values('08' , '王菊' , '1990-01-20' , '女');
--课程表测试数据
insert into Course values('01' , '语文' , '02');
insert into Course values('02' , '数学' , '01');
insert into Course values('03' , '英语' , '03');
--教师表测试数据
insert into Teacher values('01' , '张三');
insert into Teacher values('02' , '李四');
insert into Teacher values('03' , '王五');
--成绩表测试数据
insert into Score values('01' , '01' , 80);
insert into Score values('01' , '02' , 90);
insert into Score values('01' , '03' , 99);
insert into Score values('02' , '01' , 70);
insert into Score values('02' , '02' , 60);
insert into Score values('02' , '03' , 80);
insert into Score values('03' , '01' , 80);
insert into Score values('03' , '02' , 80);
insert into Score values('03' , '03' , 80);
insert into Score values('04' , '01' , 50);
insert into Score values('04' , '02' , 30);
insert into Score values('04' , '03' , 20);
insert into Score values('05' , '01' , 76);
insert into Score values('05' , '02' , 87);
insert into Score values('06' , '01' , 31);
insert into Score values('06' , '03' , 34);
insert into Score values('07' , '02' , 89);
insert into Score values('07' , '03' , 98);
导入相关依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>crud</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>crud</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 以下为自定义插件 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--mybatis-plus,mybatis-spring,mybatis,mybatis-plus-generator ...-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.6</version>
</dependency>
<!--mybatis-plus完成项目构建所需模板,真实项目不需要使用-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
<!--数据源+session监控-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.12</version>
</dependency>
<!-- 验证码 -->
<dependency>
<groupId>com.github.penggle</groupId>
<artifactId>kaptcha</artifactId>
<version>2.3.2</version>
</dependency>
<!-- 汉字转换为拼音 -->
<dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>4.5.9</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>1.2.0.Final</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.2.0.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
项目配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/t_crud?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&nullCatalogMeansCurrent=true&autoReconnect=true&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true
username: root
password: 123456
mybatis-plus:
mapper-locations: classpath*:mapper/**/*Mapper.xml
configuration:
map-underscore-to-camel-case: true
auto-mapping-behavior: full
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
logic-not-delete-value: 1
logic-delete-value: 0
package com.example.crud.config;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Mybatis-Plus配置类
*
* @author weitian.chen
* @date 2021/9/2 9:39
*/
@Configuration
public class MybatisPlusConfig {
/**
* Method Description
* 分页配置
* @return com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor
* @author weitian.chen
* @date 2021/9/2
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
使用Mybatis-Plus代码生成器生成相应文件
/**
* 代码生成器
*
* @author weitian.chen
* @date 2021/9/1 10:18
*/
public class CodeGenerator {
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 模板引擎
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
// 全局配置
GlobalConfig gc = new GlobalConfig();
// 生成地址
gc.setOutputDir("D:\\code\\crud\\src\\main\\java");
gc.setFileOverride(true);
// 生成的注释
gc.setAuthor("weitian.chen");
gc.setOpen(false);
gc.setBaseResultMap(true);
gc.setIdType(IdType.AUTO);
mpg.setGlobalConfig(gc);
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDbType(DbType.MYSQL);
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123456");
dsc.setUrl("jdbc:mysql://localhost:3306/t_crud?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&nullCatalogMeansCurrent=true&autoReconnect=true&allowMultiQueries=true&useSSL=false&allowPublicKeyRetrieval=true");
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.example.crud");
mpg.setPackageInfo(pc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
strategy.setEntityLombokModel(true);
/// 暂时不用
// strategy.setTablePrefix("t_");
strategy.setInclude(
new String[]
{
}
);
mpg.setStrategy(strategy);
mpg.execute();
}
}
在controller中编写代码
package com.example.crud.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.crud.dto.StudentScore;
import com.example.crud.entity.Student;
import com.example.crud.service.IStudentService;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* <p>
* 前端控制器
* </p>
*
* @author weitian.chen
* @since 2021-09-04
*/
@RestController
@RequestMapping("/student")
public class StudentController {
@Resource
IStudentService studentService;
/**
* 查询学生列表
*
* @return java.util.List<com.example.crud.entity.Student>
* @author weitian.chen
* @date 2021/9/4
*/
@GetMapping("/Rcrud")
private List<Student> studentList() {
return studentService.list();
}
/**
* 通过id删除学生信息
*
* @param id
* @return java.lang.Boolean
* @author weitian.chen
* @date 2021/9/4
*/
@PostMapping("/Dcrud/{id}")
private Boolean delete(@PathVariable Integer id) {
return studentService.removeById(id);
}
/**
* 更新学生信息
*
* @param student
* @return java.lang.Boolean
* @author weitian.chen
* @date 2021/9/4
*/
@PostMapping("/Ucrud")
private Boolean update(@RequestBody Student student) {
return studentService.update(student, null);
}
/**
* 添加学生
*
* @param student
* @return java.lang.Boolean
* @author weitian.chen
* @date 2021/9/4
*/
@PostMapping("/Ccrud")
private Boolean insertStudent(@RequestBody Student student) {
return studentService.save(student);
}
/**
* 学生信息分页查询
*
* @return com.baomidou.mybatisplus.core.metadata.IPage<com.example.crud.dto.StudentScore>
* @author weitian.chen
* @date 2021/9/6
*/
@PostMapping("/Limit")
private IPage<StudentScore> scoreList() {
//暂无传递参数,使用默认参数进行分页
int current = 1;
int size = 3;
return studentService.studentScore(new Page(current, size));
}
}
分页查询
- 创建出参实体类
package com.example.crud.vo;
import lombok.Data;
/**
* 学生分数表
*
* @author weitian.chen
* @date 2021/9/1 10:54
*/
@Data
public class StudentScore {
private String sName;
private Integer sScore;
}
- 编写接口方法
package com.example.crud.mapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.crud.dto.StudentScore;
import com.example.crud.entity.Student;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
/**
* <p>
* Mapper 接口
* </p>
*
* @author weitian.chen
* @since 2021-09-04
*/
public interface StudentMapper extends BaseMapper<Student> {
IPage<StudentScore> studentScore(Page page);
}
- 编写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">
<mapper namespace="com.example.crud.mapper.StudentMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.example.crud.entity.Student">
<id column="s_id" property="sId" />
<result column="s_name" property="sName" />
<result column="s_birth" property="sBirth" />
<result column="s_sex" property="sSex" />
</resultMap>
<select id="studentScore" resultType="com.example.crud.vo.StudentScore">
SELECT
a.s_name,
b.s_score
From student a
JOIN score b on a.s_id=b.s_id
</select>
</mapper>