java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > SpringBoot+MyBatis实现CRUD操作

Java初学者必看:SpringBoot+MyBatis实现CRUD操作详细教程

作者:沐雨橙风ιε

本文专为Java初学者设计,手把手教你用SpringBoot和MyBatis搭建项目,完成数据库的增删改查操作,从创建项目、配置数据源到编写各层代码,每一步都有详细说明,助你快速上手SpringBoot开发,实现歌曲表的CRUD功能

这篇文章主要针对java初学者,详细介绍如何创建一个简单的Spring Boot项目,完成数据库的CRUD操作。

第一步:创建项目

在IntelliJ IDEA中通过spring initilizer创建Spring Boot项目如图,依次点击左上角的菜单栏中的File >> New >> Project...

在打开的窗口左侧点击选中【Spring Initilizer】,在右侧面板:

然后点击【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语句

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);
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文