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开发模式已经学过很多了,controller→service→mapper→数据库的之间的联系与区别不必赘述 需要的请参考MVC架构模式
2. 关于Dao层,请参考工程结构与开发规约
3. 最大问题就是注解的学习问题,还是需要多多复习以前的知识内容 有以下参考: 【RestController注解与路径变量】 【自动装配与Autowired注解】 【开发Dao层】