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_编写一个简单的增删改查接口到此结束

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

感谢你的阅读!


目录
相关文章
|
8天前
|
XML Java 数据格式
探索Spring之利剑:ApplicationContext接口
本文深入介绍了Spring框架中的核心接口ApplicationContext,解释了其作为应用容器的功能,包括事件发布、国际化支持等,并通过基于XML和注解的配置示例展示了如何使用ApplicationContext管理Bean实例。
38 6
|
19天前
|
缓存 Java 数据库连接
深入探讨:Spring与MyBatis中的连接池与缓存机制
Spring 与 MyBatis 提供了强大的连接池和缓存机制,通过合理配置和使用这些机制,可以显著提升应用的性能和可扩展性。连接池通过复用数据库连接减少了连接创建和销毁的开销,而 MyBatis 的一级缓存和二级缓存则通过缓存查询结果减少了数据库访问次数。在实际应用中,结合具体的业务需求和系统架构,优化连接池和缓存的配置,是提升系统性能的重要手段。
35 4
|
19天前
|
SQL Java 数据库连接
spring和Mybatis的各种查询
Spring 和 MyBatis 的结合使得数据访问层的开发变得更加简洁和高效。通过以上各种查询操作的详细讲解,我们可以看到 MyBatis 在处理简单查询、条件查询、分页查询、联合查询和动态 SQL 查询方面的强大功能。熟练掌握这些操作,可以极大提升开发效率和代码质量。
31 3
|
24天前
|
Java 数据库连接 数据库
spring和Mybatis的逆向工程
通过本文的介绍,我们了解了如何使用Spring和MyBatis进行逆向工程,包括环境配置、MyBatis Generator配置、Spring和MyBatis整合以及业务逻辑的编写。逆向工程极大地提高了开发效率,减少了重复劳动,保证了代码的一致性和可维护性。希望这篇文章能帮助你在项目中高效地使用Spring和MyBatis。
15 1
|
2月前
|
存储 安全 Java
|
2月前
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
501 1
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
2月前
|
SQL Java 数据库连接
mybatis使用四:dao接口参数与mapper 接口中SQL的对应和对应方式的总结,MyBatis的parameterType传入参数类型
这篇文章是关于MyBatis中DAO接口参数与Mapper接口中SQL的对应关系,以及如何使用parameterType传入参数类型的详细总结。
51 10
|
3月前
|
Java 数据库连接 数据库
spring复习05,spring整合mybatis,声明式事务
这篇文章详细介绍了如何在Spring框架中整合MyBatis以及如何配置声明式事务。主要内容包括:在Maven项目中添加依赖、创建实体类和Mapper接口、配置MyBatis核心配置文件和映射文件、配置数据源、创建sqlSessionFactory和sqlSessionTemplate、实现Mapper接口、配置声明式事务以及测试使用。此外,还解释了声明式事务的传播行为、隔离级别、只读提示和事务超时期间等概念。
spring复习05,spring整合mybatis,声明式事务
|
3月前
|
SQL XML Java
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
文章介绍了MyBatis的简单增删改查操作,包括创建数据表、实体类、配置文件、Mapper接口及其XML文件,并解释了`#{}`预编译参数和`@Param`注解的使用。同时,还涵盖了resultType与resultMap的区别,并提供了完整的代码实例和测试用例。
mybatis复习02,简单的增删改查,@Param注解多个参数,resultType与resultMap的区别,#{}预编译参数
|
3月前
|
Java 数据库连接 数据库
SpringBoot 整合jdbc和mybatis
本文详细介绍了如何在SpringBoot项目中整合JDBC与MyBatis,并提供了具体的配置步骤和示例代码。首先,通过创建用户实体类和数据库表来准备基础环境;接着,配置Maven依赖、数据库连接及属性;最后,分别展示了JDBC与MyBatis的集成方法及其基本操作,包括增删查改等功能的实现。适合初学者快速入门。
109 3
SpringBoot 整合jdbc和mybatis