spring+mybatis_编写一个简单的增删改查接口

简介: spring+mybatis_编写一个简单的增删改查接口

背景

大家好,我是yma16,想记录微信小程序用户调用openai时候的操作操作写入数据库,技术选型采用spring+mybatis

什么是spring mybatis

Spring Mybatis 是一款轻量级、快速、高效的持久层框架,是基于 Mybatis 的增强版本。它可以与 Spring 框架无缝集成,提供了更加方便的使用方式。

Spring Mybatis 解决了传统 Mybatis 在使用中存在的缺陷,比如需要手动创建 SqlSession、需要手动管理事务等;同时也提供了更加便捷的注解方式和 XML 配置方式,使得开发人员可以根据不同的需求进行选择。

Spring Mybatis 的主要特点如下:

  1. 支持注解方式和 XML 配置方式,可以根据不同的需求进行选择。
  2. 与 Spring 框架无缝集成,提供了更加方便的使用方式。
  3. 自动管理事务,简化了事务管理的复杂度。
  4. 提供了更加方便的 CRUD 操作方式。
  5. 支持动态 SQL,可以根据不同的条件生成不同的 SQL 语句,提高了 SQL 的灵活性。
  6. 提供了二级缓存机制,可以提高查询效率。

总之,Spring Mybatis 是一款功能强大、易于使用的持久层框架,可以帮助开发人员快速、高效地进行数据库操作。

封装统一的返回格式

思想:返回统一的格式给前端,封装一个result

{code,message,data}

package com.yma16.springcloud.entites;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
 * 公共的参数返回
 * @param <T>
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult <T>{
    private Integer code;
    private String message;
    private T data;
    public CommonResult(Integer code,String message){
        this(code,message,null);
    }
}

数据库

设置id为主键

entities层

映射数据库字段

package com.yma16.springcloud.entites;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Product implements Serializable {
    private String id;
    private String name;
    private String kind;
    private String url;
    private String relate_user_name;
    private String relate_user_id;
    private String description;
    private String back;
    private String front;
    /**
     * 创建时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private java.util.Date create_time;
    /**
     * 更新时间
     */
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private java.util.Date update_time;
}

dao层

package com.yma16.springcloud.dao;
import com.yma16.springcloud.entites.Product;
import com.yma16.springcloud.vo.ProductUpdateVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.ArrayList;
/**
 * author:yma16
 * date: 2022-12-31
 */
@Mapper
public interface ProductDao {
    public int create(Product product);
    public int delete(@Param("id") String id);
    public int update(ProductUpdateVo productUpdateVo);
    public ArrayList<Product> search(Product product);
    public ArrayList<Product> getList();
}

service

包装一层dao

interface

package com.yma16.springcloud.service;
import com.yma16.springcloud.entites.Product;
import com.yma16.springcloud.vo.ProductUpdateVo;
import org.apache.ibatis.annotations.Param;
import java.util.ArrayList;
/**
 * author:yma16
 * date:2022-12-31
 */
public interface ProductService {
    public int create(Product product);
    public int delete(@Param("id") String id);
    public int update(ProductUpdateVo productUpdateVo);
    public ArrayList<Product> search(Product product);
    public ArrayList<Product> getList();
}

implement

package com.yma16.springcloud.service.impl;
import com.yma16.springcloud.dao.ProductDao;
import com.yma16.springcloud.entites.Product;
import com.yma16.springcloud.service.ProductService;
import com.yma16.springcloud.vo.ProductUpdateVo;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
@Service
public class ProductserviceImpl implements ProductService {
    @Resource
    private ProductDao productDao;
    public int create(Product product){
        return productDao.create(product);
    };
    public int delete(String id){
        return productDao.delete(id);
    }
    public int update(ProductUpdateVo productUpdateVo){
        return productDao.update(productUpdateVo);
    }
    public ArrayList<Product> search(Product product){
        return productDao.search(product);
    }
    public ArrayList<Product> getList(){
        return productDao.getList();
    }
}

mapper

<?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.yma16.springcloud.dao.ProductDao">
    <!--    添加产品-->
    <insert id="create" parameterType="com.yma16.springcloud.entites.Product" useGeneratedKeys="true" keyProperty="id">
        insert into product(id,name,kind,description,url,front,back,create_time,relate_user_id,relate_user_name) values(#{id},#{name},#{kind},#{description},#{url},#{front},#{back},#{create_time},#{relate_user_id},#{relate_user_name});
    </insert>
    <!--    查询产品-->
    <resultMap id="searchList" type="com.yma16.springcloud.entites.Product">
        <id column="name" property="name"/>
    </resultMap>
    <select id="search" resultMap="searchList">
        select * from product where name=#{name} and kind=#{kind};
    </select>
    <resultMap id="productList" type="com.yma16.springcloud.entites.Product">
        <id column="id" property="id"/>
    </resultMap>
    <select id="getList" resultMap="productList">
        select * from product;
    </select>
    <!--    更新-->
    <update id="update" parameterType="com.yma16.springcloud.entites.Product">
        update product set url=#{url},name=#{name},kind=#{kind},front=#{front},description=#{description},back=#{back},update_time=#{update_time} where id=#{id};
    </update>
    <!--    删除-->
    <delete id="delete" parameterType="com.yma16.springcloud.entites.Product">
        delete from product where id=#{id};
    </delete>
</mapper>

controller

package com.yma16.springcloud.controller;
import com.yma16.springcloud.entites.CommonResult;
import com.yma16.springcloud.entites.Product;
import com.yma16.springcloud.service.ProductService;
import com.yma16.springcloud.vo.ProductUpdateVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.UUID;
@RestController
@Slf4j
public class ProductController {
    @Resource
    private ProductService productService;
    @PostMapping(value="product/add")
    public CommonResult addProduct(@RequestBody Product product){
        Product createVo=new Product();
        UUID uid=UUID.randomUUID();
        createVo.setId(uid.toString());
        createVo.setUrl(product.getUrl());
        createVo.setName(product.getName());
        createVo.setKind(product.getKind());
        createVo.setDescription(product.getDescription());
        createVo.setBack(product.getBack());
        createVo.setFront(product.getFront());
        createVo.setCreate_time(new Date());
        int result=productService.create(createVo);
        if(result>0){
            return new CommonResult(200,"创建成功",createVo);
        }
        else{
            return new CommonResult(0,"失败",null);
        }
    }
    @PostMapping(value="product/search")
    public CommonResult searchProduct(@RequestBody Product product){
        ArrayList<Product> result=productService.search(product);
        if(result!=null){
            return new CommonResult(200,"查询成功",result);
        }
        else{
            return new CommonResult(0,"失败",null);
        }
    };
    @GetMapping(value="product/list")
    public CommonResult getProductList(){
        ArrayList<Product> productList=productService.getList();
        if(!productList.isEmpty()){
            return new CommonResult(200,"获取成功",productList);
        }
        else{
            return new CommonResult(0,"失败",null);
        }
    };
    @DeleteMapping(value="product/delete/{id}")
    public CommonResult deleteProductById(@PathVariable("id") String id){
        int result=productService.delete(id);
        if(result>0){
            return new CommonResult(200,"删除成功",result);
        }
        else{
            return new CommonResult(0,"失败",null);
        }
    }
    @PutMapping(value="product/update")
    public CommonResult updateProduct(@RequestBody ProductUpdateVo productUpdateVo){
        productUpdateVo.setUpdate_time(new Date());
        int result=productService.update(productUpdateVo);
        if(result>0){
            return new CommonResult(200,"更新成功",productUpdateVo);
        }
        else{
            return new CommonResult(0,"失败",null);
        }
    }
}

postman测试

没问题!

结尾

本文分享spring+mybatis_编写一个简单的增删改查接口到此结束

如有不足或者错误欢迎指出!

感谢你的阅读!


目录
相关文章
|
22天前
|
存储 安全 Java
|
1月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
280 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
1月前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
30 10
|
2月前
|
Java 数据库连接 数据库
spring复习05,spring整合mybatis,声明式事务
这篇文章详细介绍了如何在Spring框架中整合MyBatis以及如何配置声明式事务。主要内容包括:在Maven项目中添加依赖、创建实体类和Mapper接口、配置MyBatis核心配置文件和映射文件、配置数据源、创建sqlSessionFactory和sqlSessionTemplate、实现Mapper接口、配置声明式事务以及测试使用。此外,还解释了声明式事务的传播行为、隔离级别、只读提示和事务超时期间等概念。
spring复习05,spring整合mybatis,声明式事务
|
2月前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
2月前
|
Java 数据库连接 数据库
SpringBoot 整合jdbc和mybatis
本文详细介绍了如何在SpringBoot项目中整合JDBC与MyBatis,并提供了具体的配置步骤和示例代码。首先,通过创建用户实体类和数据库表来准备基础环境;接着,配置Maven依赖、数据库连接及属性;最后,分别展示了JDBC与MyBatis的集成方法及其基本操作,包括增删查改等功能的实现。适合初学者快速入门。
SpringBoot 整合jdbc和mybatis
|
1月前
|
Java 关系型数据库 MySQL
springboot学习五:springboot整合Mybatis 连接 mysql数据库
这篇文章是关于如何使用Spring Boot整合MyBatis来连接MySQL数据库,并进行基本的增删改查操作的教程。
57 0
springboot学习五:springboot整合Mybatis 连接 mysql数据库
|
1月前
|
Java 数据库连接 API
springBoot:后端解决跨域&Mybatis-Plus&SwaggerUI&代码生成器 (四)
本文介绍了后端解决跨域问题的方法及Mybatis-Plus的配置与使用。首先通过创建`CorsConfig`类并设置相关参数来实现跨域请求处理。接着,详细描述了如何引入Mybatis-Plus插件,包括配置`MybatisPlusConfig`类、定义Mapper接口以及Service层。此外,还展示了如何配置分页查询功能,并引入SwaggerUI进行API文档生成。最后,提供了代码生成器的配置示例,帮助快速生成项目所需的基础代码。
|
2月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
1月前
|
前端开发 Java 数据库连接
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学
本文是一份全面的表白墙/留言墙项目教程,使用SpringBoot + MyBatis技术栈和MySQL数据库开发,涵盖了项目前后端开发、数据库配置、代码实现和运行的详细步骤。
40 0
表白墙/留言墙 —— 中级SpringBoot项目,MyBatis技术栈MySQL数据库开发,练手项目前后端开发(带完整源码) 全方位全步骤手把手教学