up:: 新建多模块项目

创建主启动类

1. 开发前装备

同理还有Resourse文件夹,否则有意想不到的错误。。。

每个模块是个Spring项目,所以需要在自己模块下的pom.xml中引入:

course-list的pom.xml下:

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>course-service</artifactId>
        <groupId>com.imooc</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
 
    <artifactId>course-list</artifactId>
 
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
<!--        引入mysql链接的依赖-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
<!--        引入mybatis依赖-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.1.1</version>
        </dependency>
 
    </dependencies>
  <!--spring的maven项目必备的一个插件-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
 
    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>
 
</project>

💢下载太慢,一定记得配置阿里云镜像。。。。浪费我一个小时:

<repositories>
    <repository>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <layout>default</layout>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </repository>
</repositories>
 
<pluginRepositories>
    <pluginRepository>
        <id>alimaven</id>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </pluginRepository>
</pluginRepositories>

2.正式开发

package com.imooc.course;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
import javax.xml.bind.annotation.XmlSchema;
 
/**
 * 描述:项目启动类
 */
@SpringBootApplication
public class CourseListApplication {
    public static void main(String[] args){
        SpringApplication.run(CourseListApplication.class,args);
    }
}

开发业务代码

1.开发前先建立配置文件

打开Resource文件夹,记得进行注册

说明: 很多模块下Java目录和Resource目录都没有注册,进行注册即可,后面不再赘述

新建配置文件application.properties

server.port=8081
 
#配置数据库
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/course_practice?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=root
spring.datasource.password=20020829
logging.pattern.console=%clr(%d{${LOG_DATEFORMAT_PATTERN:HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}
mybatis.configuration.map-underscore-to-camel-case=true
spring.application.name=course-list

说明:

2.开发controller层

建立controller包,新建CourseListController

新建entity包,新建Course.java文件,用于实体类

package com.imooc.course.entity;
 
import java.io.Serializable;
 
/**
 * 描述:     Course实体类
 */
public class Course implements Serializable {
 
    Integer id;
    Integer courseId;
    String courseName;
    Integer valid;
 
    @Override
    public String toString() {
        return "Course{" +
                "id=" + id +
                ", courseId=" + courseId +
                ", courseName='" + courseName + '\'' +
                ", valid=" + valid +
                '}';
    }
 
    public Integer getId() {
        return id;
    }
 
    public void setId(Integer id) {
        this.id = id;
    }
 
    public Integer getCourseId() {
        return courseId;
    }
 
    public void setCourseId(Integer courseId) {
        this.courseId = courseId;
    }
 
    public String getCourseName() {
        return courseName;
    }
 
    public void setCourseName(String courseName) {
        this.courseName = courseName;
    }
 
    public Integer getValid() {
        return valid;
    }
 
    public void setValid(Integer valid) {
        this.valid = valid;
    }
}

说明: 这里需要在配置文件开启驼峰命名转化 这里需要参考: 实现Serializable接口的一个坑

忘记为啥序列化的记得回去复习!复习! JSON序列化与反序列化

就像下面一样,前后端通信就让接口Json序列化,好传输数据。。。


继续开发我们的controller

package com.imooc.course.controller;
 
import com.imooc.course.entity.Course;
import com.imooc.course.service.CourseListService;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
 
/**
 * 描述:     CourseListController课程列表Controller
 */@RestController
public class CourseListController {
 
    @Autowired
    CourseListService courseListService;
 
    @GetMapping("/courses")
    public List<Course> courseList() {
        return courseListService.getCourseList();
    }
}

3.开发Service层

准备service的接口,CourseLService.java

package com.imooc.course.service;
 
import com.imooc.course.entity.Course;
import java.util.List;
 
/**
 * 描述:     课程列表服务
 */
public interface CourseListService {
 
    List<Course> getCourseList();
}

Service包下新建impl文件夹,用于处理Service接口

实现CourseListService接口,在impl下新建CourseListServiceImpl.java文件

package com.imooc.course.service.impl;
 
import com.imooc.course.dao.CourseMapper;
import com.imooc.course.entity.Course;
import com.imooc.course.service.CourseListService;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
 
/**
 * 描述:     课程服务实现类
 */
@Service
public class CourseListServiceImpl implements CourseListService {
 
    @Autowired
    CourseMapper courseMapper;
 
    @Override
    public List<Course> getCourseList() {
        return courseMapper.findValidCourses();
    }
}

3.开发mapper层

新建dao包后新建CourseMapper.java文件

package com.imooc.course.dao;
 
import com.imooc.course.entity.Course;
import java.util.List;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
 
/**
 * 描述:     课程的Mapper类
 */
@Mapper
@Repository
public interface CourseMapper {
 
    @Select("SELECT * FROM course WHERE valid = 1")
    List<Course> findValidCourses();
}

说明:

使用@Select注解是因为查询语句很简单,如果很复杂多的话,我们会像SpringBoot项目一样使用Mybatis-generate生成xml语句保存sql语句,便于管理,而不会使用注解


[!解释] 1. MVC开发模式已经学过很多了,controllerservicemapper数据库的之间的联系与区别不必赘述 需要的请参考MVC架构模式

2. 关于Dao层,请参考工程结构与开发规约

3. 最大问题就是注解的学习问题,还是需要多多复习以前的知识内容 有以下参考:RestController注解与路径变量】 【自动装配与Autowired注解】 【开发Dao层