1.创建项目
2.创建包结构
3.配置文件
4.maven依赖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 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>3.2.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.yw</groupId>
<artifactId>CourseManageSystem</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>CourseManageSystem</name>
<description>CourseManageSystem</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</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>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>3.0.3</version>
<scope>test</scope>
</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>
5.编写代码
5.1结果类R
package com.yw.common;
import lombok.Data;
import java.util.HashMap;
import java.util.Map;
@Data
public class R<T> {
private Integer code; //编码:1成功,0和其它数字为失败
private String msg; //错误信息
private T data; //数据
private Map map = new HashMap(); //动态数据
public static <T> R<T> success(T object) {
R<T> r = new R<T>();
r.data = object;
r.code = 1;
return r;
}
public static <T> R<T> error(String msg) {
R r = new R();
r.msg = msg;
r.code = 0;
return r;
}
public R<T> add(String key, Object value) {
this.map.put(key, value);
return this;
}
}
5.2实体类Course
package com.yw.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @author ${杨威}
* @version 2024/05/02 18:32
**/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Course {
private Integer id;
private String courseName;
private String brief;
private String teacherName;
private String teacherInfo;
private Integer totalCourseTime;
private Integer sales;
private Integer actualSales;
private Double price;
private String priceTag;
private Double discounts;
private String courseDescription;
private String courseImgUrl;
private Boolean isNew;
private String isNewDes;
private Integer lastOperatorId;
private java.time.LocalDateTime createTime;
private java.time.LocalDateTime updateTime;
private Boolean isDel;
private Integer totalDuration;
private String shareTitle;
private String shareDescription;
private String shareImageTitle;
private Integer status;
private Integer sortNum;
private Integer courseType;
private java.time.LocalDateTime lastNoticeTime;
private String previewFirstField;
private String previewSecondField;
private Boolean isGray;
private Integer grade;
}
5.3封装返回结果Dto类
@Data
@NoArgsConstructor
@AllArgsConstructor
public class CourseDto {
//id,course_name,price,sort_num,status
private Integer id;
private String courseName;
private Integer price;
private Integer sortNum;
private Integer status;
}
5.4请求层controller
package com.yw.controller;
import com.yw.Dto.CourseDto;
import com.yw.common.R;
import com.yw.pojo.Course;
import com.yw.service.CourseService;
import com.yw.service.impl.CourseServiceImpl;
import jakarta.websocket.server.PathParam;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Update;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.management.monitor.StringMonitor;
import java.util.List;
/**
* @author ${杨威}
* @version 2024/05/03 12:49
**/
@RestController
@Slf4j
public class CourseController {
@Autowired
CourseService courseService;
/**
* 查询课程列表
* @return
*/
@GetMapping("/course/list")
public R findCourseList(){
return R.success(courseService.findCourseList());
}
/**
*根据课程名称和状态查询课程
* @param methodName
* @param courseName
* @param status
* @return
*/
@GetMapping("/course/findByCourseNameAndStatus")
public R findByCourseNameAndStatus(String methodName, String courseName, Integer status){
log.info("根据课程名称和状态查询课程:"+methodName+" "+courseName+" "+status);
List<CourseDto> list = courseService.findByCourseNameAndStatus(methodName,courseName,status);
//System.out.println(list);
return R.success(list);
}
/**
* 修改添加课程信息
* @param course
* @return
*/
@RequestMapping("courseSalesInfo")
public R courseSalesInfo(@RequestBody Course course){
log.info("修改添加课程信息");
courseService.courseSalesInfo(course);
//System.out.println(course);
return R.success("成功了");
}
/**
* 根据id查询课程信息
* @param id
* @return
*/
@GetMapping("/course/{id}")
public R findCourseById(@PathVariable Integer id){
return R.success(courseService.get_ById(id));
}
/**
* 根据id修改课程信息状态
* @param methodName
* @param id
* @return
*/
@PostMapping("updateCourseStatus")
public R updateCourseStatus(String methodName,Integer id){
log.info("根据id修改课程信息状态");
return R.success(courseService.updateCourseStatus(methodName,id));
}
}
5.5业务逻辑层service
接口
package com.yw.service;
import com.yw.Dto.CourseDto;
import com.yw.mapper.CourseMapper;
import com.yw.pojo.Course;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
/**
* @author ${杨威}
* @version 2024/05/03 12:51
**/
public interface CourseService {
public List<CourseDto> findCourseList();
public List<CourseDto> findByCourseNameAndStatus(String methodName,String courseName,Integer status);
void courseSalesInfo(Course course);
Course get_ById(Integer id);
String updateCourseStatus(String methodName, Integer id);
}
实现类
package com.yw.service.impl;
import com.yw.Dto.CourseDto;
import com.yw.mapper.CourseMapper;
import com.yw.pojo.Course;
import com.yw.service.CourseService;
import org.apache.ibatis.javassist.bytecode.SourceFileAttribute;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author ${杨威}
* @version 2024/05/03 12:52
**/
@Service
public class CourseServiceImpl implements CourseService {
@Autowired
private CourseMapper courseMapper;
@Override
public List<CourseDto> findCourseList() {
return courseMapper.findCourseList();
}
@Override
public List<CourseDto> findByCourseNameAndStatus(String methodName, String courseName, Integer status) {
return courseMapper.findByCourseNameAndStatus(methodName,courseName,status);
}
@Override
public void courseSalesInfo(Course course) {
Course course1 = courseMapper.get_ById(course.getId());
course.setCreateTime(course1.getCreateTime());
course.setUpdateTime(LocalDateTime.now());
if(course1!=null){
//更新
courseMapper.update_ById(course);
}
else{
//插入
course.setCreateTime(LocalDateTime.now());
courseMapper.insert_ById(course);
}
}
@Override
public Course get_ById(Integer id) {
return courseMapper.get_ById(id);
}
@Override
public String updateCourseStatus(String methodName, Integer id) {
Course course = courseMapper.get_ById(id);
course.setUpdateTime(LocalDateTime.now());
String result = null;
if (course.getStatus() == 1) {
course.setStatus(0);
result = "草稿\n" +
"{\"status\":0}";
} else {
course.setStatus(1);
result = "上架\n" +
"{\"status\":1}";
}
//System.out.println(course);
courseMapper.update_ById(course);
return result;
}
}
5.6数据库持久化层mapper
接口 以注解形式编写简单的sql语句
package com.yw.mapper;
import com.yw.Dto.CourseDto;
import com.yw.pojo.Course;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
/**
* @author ${杨威}
* @version 2024/05/03 11:34
**/
@Mapper
public interface CourseMapper {
/**
* 查询课程列表
* @return
*/
@Select("select id,course_name courseName,price,sort_num sortNum,status from course")
public List<CourseDto> findCourseList();
/**
* 根据课程名称和状态查询课程列表
* @param methodName
* @param courseName
* @param status
* @return
*/
public List<CourseDto> findByCourseNameAndStatus(String methodName,String courseName,Integer status);
/**
* 根据id查询课程信息
* @param id
* @return
*/
@Select("SELECT\n" +
" id,\n" +
" course_name AS courseName,\n" +
" brief,\n" +
" teacher_name AS teacherName,\n" +
" teacher_info AS teacherInfo,\n" +
" total_course_time AS totalCourseTime,\n" +
" sales,\n" +
" actual_sales AS actualSales,\n" +
" price,\n" +
" price_tag AS priceTag,\n" +
" discounts,\n" +
" course_description AS courseDescription,\n" +
" course_img_url AS courseImgUrl,\n" +
" is_new AS isNew,\n" +
" is_new_des AS isNewDes,\n" +
" last_operator_id AS lastOperatorId,\n" +
" create_time AS createTime,\n" +
" update_time AS updateTime,\n" +
" is_del AS isDel,\n" +
" total_duration AS totalDuration,\n" +
" share_title AS shareTitle,\n" +
" share_description AS shareDescription,\n" +
" share_image_title AS shareImageTitle,\n" +
" status,\n" +
" sort_num AS sortNum,\n" +
" course_type AS courseType,\n" +
" last_notice_time AS lastNoticeTime,\n" +
" preview_first_field AS previewFirstField,\n" +
" preview_second_field AS previewSecondField,\n" +
" is_gray AS isGray,\n" +
" grade\n" +
"FROM\n" +
" course\n" +
"WHERE\n" +
" id = #{id}")
public Course get_ById(Integer id);
/**
* 根据课程id更新课程信息id,course_name,brief,teacher_name,teacher_info,preview_first_field,preview_second_field,discounts,price,price_tag,share_image_title,share_title,share_description,course_description
* @param course
*/
@Update("update course set course_name=#{courseName},brief=#{brief},teacher_name=#{teacherName},teacher_info=#{teacherInfo},preview_first_field=#{previewFirstField},preview_second_field=#{previewSecondField},discounts=#{discounts},price=#{price},price_tag=#{priceTag},share_image_title=#{shareImageTitle},share_title=#{shareTitle},share_description=#{shareDescription},course_description=#{courseDescription},create_time=#{createTime},update_time=#{updateTime},status=#{status} where id=#{id}")
public void update_ById(Course course);
/**
* 根据id插入课程信息
* @param course
*/
@Insert({
"INSERT INTO course (",
"id, course_name, brief, teacher_name, teacher_info, total_course_time, sales, actual_sales, ",
"price, price_tag, discounts, course_description, course_img_url, is_new, is_new_des, ",
"last_operator_id, create_time, update_time, is_del, total_duration, share_title, ",
"share_description, share_image_title, status, sort_num, course_type, last_notice_time, ",
"preview_first_field, preview_second_field, is_gray, grade)",
"VALUES (",
"#{id}, #{courseName}, #{brief}, #{teacherName}, #{teacherInfo}, #{totalCourseTime}, #{sales}, #{actualSales}, ",
"#{price}, #{priceTag}, #{discounts}, #{courseDescription}, #{courseImgUrl}, #{isNew}, #{isNewDes}, ",
"#{lastOperatorId}, #{createTime}, #{updateTime}, #{isDel}, #{totalDuration}, #{shareTitle}, ",
"#{shareDescription}, #{shareImageTitle}, #{status}, #{sortNum}, #{courseType}, #{lastNoticeTime}, ",
"#{previewFirstField}, #{previewSecondField}, #{isGray}, #{grade})"
})
void insert_ById(Course course);
}
以xml的文件形式写复杂的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.yw.mapper.CourseMapper">
<select id="findByCourseNameAndStatus" resultType="com.yw.Dto.CourseDto">
SELECT id,course_name courseName,price,sort_num sortNum,status FROM course
<where>
<if test="courseName != null">
course_name = #{courseName}
</if>
<if test="status != null">
AND status = #{status}
</if>
</where>
</select>
</mapper>
5.7运行类application
package com.yw;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
@MapperScan("com.yw.mapper")
public class CourseSystemApplication {
public static void main(String[] args) {
SpringApplication.run(CourseSystemApplication.class, args);
}
}