实习周记(六):代码规范

实习周记(六):代码规范

准备工作

  1. 阿里巴巴规约插件

    • 打开 Settings >> Plugins >> MarketPlace,搜索并安装Alibaba Java Code Guidelines,重启即可生效
    • 当编写不符合规范的代码时,会有下划线提示你修改
  2. 注释

    • 设置工程及配置文件编码为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));
    }

}

分页查询

  1. 创建出参实体类
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;
}
  1. 编写接口方法
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);
}
  1. 编写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>

posted @ 2021-10-18 18:03  2月2日  阅读(141)  评论(0)    收藏  举报