Java初学者必看:SpringBoot+MyBatis实现CRUD操作详细教程
作者:沐雨橙风ιε
这篇文章主要针对java初学者,详细介绍如何创建一个简单的Spring Boot项目,完成数据库的CRUD操作。
第一步:创建项目
在IntelliJ IDEA中通过spring initilizer创建Spring Boot项目如图,依次点击左上角的菜单栏中的File >> New >> Project...

在打开的窗口左侧点击选中【Spring Initilizer】,在右侧面板:
- 修改项目名为spring-boot-mybatis
- 修改包名为cn.edu.sgu.www.mybatis
然后点击【Next】按钮
接着点击【Finish】按钮,等待Spring Boot项目创建完成。

第二步:添加依赖
修改pom.xml配置文件,修改Spring Boot版本,并添加必要的依赖。
<?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>
<version>2.3.4.RELEASE</version>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
</parent>
<version>20260628</version>
<groupId>cn.edu.sgu.www</groupId>
<artifactId>spring-boot-mybatis</artifactId>
<description>Spring Boot整合MyBatis案例项目</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<version>2.3.4.RELEASE</version>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>第三步:准备数据库
创建一个数据库crud,然后在数据库crud下,执行如下SQL语句。
CREATE TABLE `song` ( `id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '歌曲编号', `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '歌曲名称', `note` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '描述信息', `singer` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '歌手名字' PRIMARY KEY (`id`) USING BTREE ) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = DYNAMIC;
第四步:修改配置文件
Spring Boot的配置文件有两种格式,即application.properties或application.yml。
推荐使用yml文件格式,重命名application.properties为application.yml。然后添加数据库的数据源设置,并修改项目的启动端口号为8083,然后设置mybatis的mapper.xml文件的位置以及日志隔离级别为debug(默认info)。
spring:
# 数据库配置
datasource:
username: root
password: root
url: jdbc:mysql://localhost:3306/crud
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
# 项目启动端口
server:
port: 8080
# mybatis的mapper.xml映射文件的位置:src/resources/static目录下的mapper包
mybatis:
mapper-locations: classpath:mapper/*Mapper.xml
# 设置日志隔离级别
logging:
level:
springfox: error
cn.edu.sgu.www.springboot: debug 第五步:创建数据库实体类
1、在项目的根包`cn.edu.sgu.www.mybatis`下创建entity包
2、在entity子包下面创建一个实体类Song.java,实现Serializable接口。
package cn.edu.sgu.www.mybatis.entity;
import lombok.Data;
import java.io.Serializable;
/**
* 歌曲
* @author 沐雨橙风ιε
* @version 1.0
*/
@Data
public class Song implements Serializable {
private static final long serialVersionUID = 18L;
private String id;
/**
* 歌曲名字
*/
private String name;
/**
* 歌曲信息
*/
private String note;
/**
* 歌手名字
*/
private String singer;
}第六步:创建持久层接口
同样的,在项目根包下创建mapper包,在mapper包下创建一个接口SongMapper,在接口上添加Spring组件注解@Repository。
package cn.edu.sgu.www.mybatis.mapper;
import org.springframework.stereotype.Repository;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
@Repository
public interface SongMapper {
}第七步:创建Mapper.xml文件
在src\main\resources下创建mapper包,然后在mapper包下面创建一个xml文件SongMapper.xml。其中namespace属性的值为SongMapper接口的全限定名
<?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="cn.edu.sgu.www.mybatis.mapper.SongMapper"> </mapper>
第八步:开启mapper包扫描
因为我们的持久层接口没有使用@Mapper注解,需要通过@MapperScan来配置mapper的包路径,需要在项目任意一个配置类上添加@MapperScan注解指定Mapper接口的扫描包路径。
package cn.edu.sgu.www.mybatis;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
@SpringBootApplication
@MapperScan(basePackages = "cn.edu.sgu.www.mybatis.mapper")
public class MybatisApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisApplication.class, args);
}
}第九步:创建业务层接口
在项目根路径下创建service包,在service包下创建接口SongService.java
package cn.edu.sgu.www.springboot.service;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
public interface SongService {
}在service包下创建impl子包,创建一个SongService接口的实现类SongServiceImpl,并在实现类上使用组件注解@Service
package cn.edu.sgu.www.springboot.service.impl;
import cn.edu.sgu.www.springboot.service.SongService;
import org.springframework.stereotype.Service;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
@Service
public class SongServiceImpl implements SongService {
}第十步:创建控制器类
在项目根路径下创建controller包,在controller包下创建SongController.java类。
其中,@RestController注解是一个复合注解,由两个注解@RespondBody和@Controller组成,@RespondBody表示类下面的方法的返回值会被转换为json格式的字符串返回给调用者。
package cn.edu.sgu.www.mybatis.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
@RestController
@RequestMapping(path = "/song", produces="application/json;charset=utf-8")
public class SongController {
}至此,项目所需的所有类都创建好了,项目完整目录结构如下图:

第十一步:开始开发业务功能
完成以上步骤之后,springboot项目的基本开发环境就搭建好了,接下来开始实现对歌曲表song的增删查改功能。
把service层的SongService注入到SongController中,在这里使用《阿里巴巴开发规范》推荐的构造器注入方式。
package cn.edu.sgu.www.springboot.controller;
import cn.edu.sgu.www.springboot.service.SongService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author heyunlin
* @version 1.0
*/
@RestController
@RequestMapping(path = "/song", produces="application/json;charset=utf-8")
public class SongController {
private final SongService songService;
@Autowired
public SongController(SongService songService) {
this.songService = songService;
}
}1、添加歌曲
controller层
首先,在controller层类中添加一个方法,取名为insert,在方法内调用service层的对应方法,为了方便同样取名为insert
package cn.edu.sgu.www.mybatis.controller;
import cn.edu.sgu.www.mybatis.entity.Song;
import cn.edu.sgu.www.mybatis.service.SongService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
@RestController
@RequiredArgsConstructor
@RequestMapping(path = "/song", produces="application/json;charset=utf-8")
public class SongController {
private final SongService songService;
@PostMapping("/insert")
public void insert(Song song) {
songService.insert(song);
}
}service层(业务层)
SongService.java
这时候,songService.insert(song);这行代码会报错,因为我们SongService接口没有这个方法,把鼠标移到红色的地方,键盘按alt+enter(回车键),选择第一个选项,在SongService创建insert()方法。
package cn.edu.sgu.www.mybatis.service;
import cn.edu.sgu.www.mybatis.entity.Song;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
public interface SongService {
/**
* 添加歌曲
* @param song 歌曲信息
*/
void insert(Song song);
}然后这时候发现SongService这个类也有红色的提示,因为SongServiceImpl实现了SongService接口,但是没有实现刚刚添加的insert()方法。

SongServiceImpl.java
重写接口的insert()方法。
package cn.edu.sgu.www.mybatis.service.impl;
import cn.edu.sgu.www.mybatis.entity.Song;
import cn.edu.sgu.www.mybatis.service.SongService;
import org.springframework.stereotype.Service;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
@Service
public class SongServiceImpl implements SongService {
@Override
public void insert(Song song) {
}
}为了能操作数据库,需要注入持久层的Mapper接口SongMapper,并调用持久层接口的方法来操作数据库。
因为song表的主键是非自增的,需要手动设置,使用当前时间生成uuid作为Id字段的值。
package cn.edu.sgu.www.springboot.service.impl;
import cn.edu.sgu.www.springboot.entity.Song;
import cn.edu.sgu.www.springboot.mapper.SongMapper;
import cn.edu.sgu.www.springboot.service.SongService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author heyunlin
* @version 1.0
*/
@Service
public class SongServiceImpl implements SongService {
private final SongMapper songMapper;
@Autowired
public SongServiceImpl(SongMapper songMapper) {
this.songMapper = songMapper;
}
@Override
public void insert(Song song) {
song.setId(uuid());
songMapper.insert(song);
}
/**
* 根据当前时间生成UUID
* @return String
*/
private String uuid() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
LocalDateTime localDate = LocalDateTime.now();
return localDate.format(formatter);
}
}mapper层(持久层)
SongMapper.java
同样的,在SongMapper接口上创建insert()方法
package cn.edu.sgu.www.mybatis.mapper;
import cn.edu.sgu.www.mybatis.entity.Song;
import org.springframework.stereotype.Repository;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
@Repository
public interface SongMapper {
/**
* 添加歌曲
* @param song 歌曲信息
*/
void insert(Song song);
}如果安装了mybatisx插件,也会有红色的提示,点击红框内的链接,就会在SongMapper.xml上创建对应的方法。

SongMapper.xml
如果没有安装mybatisx插件:在mapper.xml中手动添加一个insert标签,id属性值为方法名
<?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="cn.edu.sgu.www.mybatis.mapper.SongMapper">
<insert id="insert">
insert into song(id, name, singer, note, last_update_time)
values(#{id}, #{name}, #{singer}, #{note}, #{lastUpdateTime})
</insert>
</mapper>当然也可以直接在接口上使用注解来绑定SQL语句
- 推荐在xml文件中编写sql,一个方法只能使用两种方式中的一种
package cn.edu.sgu.www.springboot.mapper;
import com.example.springboot.entity.Song;
import org.apache.ibatis.annotations.Insert;
import org.springframework.stereotype.Repository;
/**
* @author heyunlin
* @version 1.0
*/
@Repository
public interface SongMapper {
@Insert("insert into song(id, name, singer, note, last_update_time) values(#{id}, #{name}, #{singer}, #{note}, #{lastUpdateTime})")
void insert(Song song);
}注意:只能通过注解或mapper.xml其中一个方法来绑定SQL语句,否则运行项目会报错。
2、删除歌曲
同样的,依次创建controller、service和mapper层的方法,然后在controller调用service,service调用mapper。
mapper层(持久层)
SongMapper.java
SQL语句太简单,直接写在接口上了~
package cn.edu.sgu.www.mybatis.mapper;
import cn.edu.sgu.www.mybatis.entity.Song;
import org.apache.ibatis.annotations.Delete;
import org.springframework.stereotype.Repository;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
@Repository
public interface SongMapper {
/**
* 添加歌曲
* @param song 歌曲信息
*/
//@Insert("insert into song(id, name, singer, note, last_update_time) values(#{id}, #{name}, #{singer}, #{note}, #{lastUpdateTime})")
void insert(Song song);
/**
* 通过ID删除歌曲信息
* @param id 歌曲ID
*/
@Delete("delete from song where id = #{id}")
void deleteById(String id);
}service层(业务层)
SongService.java
package cn.edu.sgu.www.mybatis.service;
import cn.edu.sgu.www.mybatis.entity.Song;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
public interface SongService {
/**
* 添加歌曲
* @param song 歌曲信息
*/
void insert(Song song);
/**
* 通过ID删除歌曲信息
* @param id 歌曲ID
*/
void deleteById(String id);
}SongServiceImpl.java
package cn.edu.sgu.www.mybatis.service.impl;
import cn.edu.sgu.www.mybatis.entity.Song;
import cn.edu.sgu.www.mybatis.mapper.SongMapper;
import cn.edu.sgu.www.mybatis.service.SongService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
@Service
@RequiredArgsConstructor
public class SongServiceImpl implements SongService {
private final SongMapper songMapper;
@Override
public void insert(Song song) {
song.setId(uuid());
songMapper.insert(song);
}
@Override
public void deleteById(String id) {
songMapper.deleteById(id);
}
/**
* 根据当前时间生成UUID
* @return String
*/
private String uuid() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
LocalDateTime localDateTime = LocalDateTime.now();
return localDateTime.format(formatter);
}
}controller层
在这里使用restful风格的请求方式,通过@PathVariable注解绑定路径参数,也就是下面歌曲编号(id)对应的字符串值
请求url格式
http://localhost:8083/song/deleteById/歌曲编号
例如,这时候id获取到的值为10011
http://localhost:8083/song/deleteById/10011
package cn.edu.sgu.www.springboot.controller;
import cn.edu.sgu.www.springboot.entity.Song;
import cn.edu.sgu.www.springboot.service.SongService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
* @author heyunlin
* @version 1.0
*/
@RestController
@RequestMapping(path = "/song", produces="application/json;charset=utf-8")
public class SongController {
private final SongService songService;
@Autowired
public SongController(SongService songService) {
this.songService = songService;
}
@PostMapping("/insert")
public void insert(Song song) {
songService.insert(song);
}
@PostMapping("/deleteById/{id}")
public void deleteById(@PathVariable("id") String id) {
songService.deleteById(id);
}
}3、修改歌曲信息
mapper层(持久层)
SongMapper.java
package cn.edu.sgu.www.mybatis.mapper;
import cn.edu.sgu.www.mybatis.entity.Song;
import org.apache.ibatis.annotations.Delete;
import org.springframework.stereotype.Repository;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
@Repository
public interface SongMapper {
/**
* 添加歌曲
* @param song 歌曲信息
*/
//@Insert("insert into song(id, name, singer, note, last_update_time) values(#{id}, #{name}, #{singer}, #{note}, #{lastUpdateTime})")
void insert(Song song);
/**
* 通过ID删除歌曲信息
* @param id 歌曲ID
*/
@Delete("delete from song where id = #{id}")
void deleteById(String id);
/**
* 通过ID修改歌曲信息
* @param song 歌曲信息
*/
void updateById(Song song);
}SongMapper.xml
<?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="cn.edu.sgu.www.mybatis.mapper.SongMapper">
<insert id="insert">
insert into song(id, name, singer, note, last_update_time)
values(#{id}, #{name}, #{singer}, #{note}, #{lastUpdateTime})
</insert>
<update id="updateById">
update song
set
name = #{name},
singer = #{singer},
note = #{note},
last_update_time = #{lastUpdateTime}
where id = #{id}
</update>
</mapper>service层(业务层)
SongService.java
package cn.edu.sgu.www.mybatis.service;
import cn.edu.sgu.www.mybatis.entity.Song;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
public interface SongService {
/**
* 添加歌曲
* @param song 歌曲信息
*/
void insert(Song song);
/**
* 通过ID删除歌曲信息
* @param id 歌曲ID
*/
void deleteById(String id);
/**
* 通过ID修改歌曲信息
* @param song 歌曲信息
*/
void updateById(Song song);
}SongServiceImpl.java
package cn.edu.sgu.www.mybatis.service.impl;
import cn.edu.sgu.www.mybatis.entity.Song;
import cn.edu.sgu.www.mybatis.mapper.SongMapper;
import cn.edu.sgu.www.mybatis.service.SongService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
@Service
@RequiredArgsConstructor
public class SongServiceImpl implements SongService {
private final SongMapper songMapper;
@Override
public void insert(Song song) {
song.setId(uuid());
songMapper.insert(song);
}
@Override
public void deleteById(String id) {
songMapper.deleteById(id);
}
@Override
public void updateById(Song song) {
songMapper.updateById(song);
}
/**
* 根据当前时间生成UUID
* @return String
*/
private String uuid() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
LocalDateTime localDateTime = LocalDateTime.now();
return localDateTime.format(formatter);
}
}controller层
package cn.edu.sgu.www.mybatis.controller;
import cn.edu.sgu.www.mybatis.entity.Song;
import cn.edu.sgu.www.mybatis.service.SongService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
@RestController
@RequiredArgsConstructor
@RequestMapping(path = "/song", produces="application/json;charset=utf-8")
public class SongController {
private final SongService songService;
@PostMapping("/insert")
public void insert(Song song) {
songService.insert(song);
}
@PostMapping("/deleteById/{id}")
public void deleteById(@PathVariable("id") String id) {
songService.deleteById(id);
}
@PostMapping("/updateById")
public void updateById(Song song) {
songService.updateById(song);
}
}4、查询歌曲详情
controller层
package cn.edu.sgu.www.mybatis.controller;
import cn.edu.sgu.www.mybatis.entity.Song;
import cn.edu.sgu.www.mybatis.service.SongService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
@RestController
@RequiredArgsConstructor
@RequestMapping(path = "/song", produces="application/json;charset=utf-8")
public class SongController {
private final SongService songService;
@PostMapping("/insert")
public void insert(Song song) {
songService.insert(song);
}
@PostMapping("/deleteById/{id}")
public void deleteById(@PathVariable("id") String id) {
songService.deleteById(id);
}
@PostMapping("/updateById")
public void updateById(Song song) {
songService.updateById(song);
}
@GetMapping("/selectById")
public Song selectById(@RequestParam String id) {
return songService.selectById(id);
}
}service层(业务层)
SongService.java
package cn.edu.sgu.www.mybatis.service;
import cn.edu.sgu.www.mybatis.entity.Song;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
public interface SongService {
/**
* 添加歌曲
* @param song 歌曲信息
*/
void insert(Song song);
/**
* 通过ID删除歌曲信息
* @param id 歌曲ID
*/
void deleteById(String id);
/**
* 通过ID修改歌曲信息
* @param song 歌曲信息
*/
void updateById(Song song);
/**
* 通过ID查询歌曲信息
* @param id 歌曲ID
*/
Song selectById(String id);
}SongServiceImpl.java
package cn.edu.sgu.www.mybatis.service.impl;
import cn.edu.sgu.www.mybatis.entity.Song;
import cn.edu.sgu.www.mybatis.mapper.SongMapper;
import cn.edu.sgu.www.mybatis.service.SongService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
@Service
@RequiredArgsConstructor
public class SongServiceImpl implements SongService {
private final SongMapper songMapper;
@Override
public void insert(Song song) {
song.setId(uuid());
songMapper.insert(song);
}
@Override
public void deleteById(String id) {
songMapper.deleteById(id);
}
@Override
public void updateById(Song song) {
songMapper.updateById(song);
}
@Override
public Song selectById(String id) {
return songMapper.selectById(id);
}
/**
* 根据当前时间生成UUID
* @return String
*/
private String uuid() {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
LocalDateTime localDateTime = LocalDateTime.now();
return localDateTime.format(formatter);
}
}mapper层(持久层)
SongMapper.java
package cn.edu.sgu.www.mybatis.mapper;
import cn.edu.sgu.www.mybatis.entity.Song;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
/**
* @author 沐雨橙风ιε
* @version 1.0
*/
@Repository
public interface SongMapper {
/**
* 添加歌曲
* @param song 歌曲信息
*/
//@Insert("insert into song(id, name, singer, note, last_update_time) values(#{id}, #{name}, #{singer}, #{note}, #{lastUpdateTime})")
void insert(Song song);
/**
* 通过ID删除歌曲信息
* @param id 歌曲ID
*/
@Delete("delete from song where id = #{id}")
void deleteById(String id);
/**
* 通过ID修改歌曲信息
* @param song 歌曲信息
*/
void updateById(Song song);
/**
* 通过ID查询歌曲信息
* @param id 歌曲ID
*/
@Select("select * from song where id = #{id}")
Song selectById(String id);
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
