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

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

感谢你的阅读!


目录
相关文章
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
800 0
|
XML Java 数据格式
探索Spring之利剑:ApplicationContext接口
本文深入介绍了Spring框架中的核心接口ApplicationContext,解释了其作为应用容器的功能,包括事件发布、国际化支持等,并通过基于XML和注解的配置示例展示了如何使用ApplicationContext管理Bean实例。
|
10月前
|
Java 数据库连接 数据库
Spring boot 使用mybatis generator 自动生成代码插件
本文介绍了在Spring Boot项目中使用MyBatis Generator插件自动生成代码的详细步骤。首先创建一个新的Spring Boot项目,接着引入MyBatis Generator插件并配置`pom.xml`文件。然后删除默认的`application.properties`文件,创建`application.yml`进行相关配置,如设置Mapper路径和实体类包名。重点在于配置`generatorConfig.xml`文件,包括数据库驱动、连接信息、生成模型、映射文件及DAO的包名和位置。最后通过IDE配置运行插件生成代码,并在主类添加`@MapperScan`注解完成整合
1515 1
Spring boot 使用mybatis generator 自动生成代码插件
|
10月前
|
Java 数据库连接 API
Java 对象模型现代化实践 基于 Spring Boot 与 MyBatis Plus 的实现方案深度解析
本文介绍了基于Spring Boot与MyBatis-Plus的Java对象模型现代化实践方案。采用Spring Boot 3.1.2作为基础框架,结合MyBatis-Plus 3.5.3.1进行数据访问层实现,使用Lombok简化PO对象,MapStruct处理对象转换。文章详细讲解了数据库设计、PO对象实现、DAO层构建、业务逻辑封装以及DTO/VO转换等核心环节,提供了一个完整的现代化Java对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
370 1
|
9月前
|
SQL Java 数据库连接
Spring、SpringMVC 与 MyBatis 核心知识点解析
我梳理的这些内容,涵盖了 Spring、SpringMVC 和 MyBatis 的核心知识点。 在 Spring 中,我了解到 IOC 是控制反转,把对象控制权交容器;DI 是依赖注入,有三种实现方式。Bean 有五种作用域,单例 bean 的线程安全问题及自动装配方式也清晰了。事务基于数据库和 AOP,有失效场景和七种传播行为。AOP 是面向切面编程,动态代理有 JDK 和 CGLIB 两种。 SpringMVC 的 11 步执行流程我烂熟于心,还有那些常用注解的用法。 MyBatis 里,#{} 和 ${} 的区别很关键,获取主键、处理字段与属性名不匹配的方法也掌握了。多表查询、动态
244 0
|
10月前
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
526 1
|
XML Java 数据库连接
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
二、搭建MyBatis采用xml方式,验证CRUD(增删改查操作)
392 21
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
823 29
|
人工智能 Java 数据库连接
MyBatis Plus 使用 Service 接口进行增删改查
本文介绍了基于 MyBatis-Plus 的数据库操作流程,包括配置、实体类、Service 层及 Mapper 层的创建。通过在 `application.yml` 中配置 SQL 日志打印,确保调试便利。示例中新建了 `UserTableEntity` 实体类映射 `sys_user` 表,并构建了 `UserService` 和 `UserServiceImpl` 处理业务逻辑,同时定义了 `UserTableMapper` 进行数据交互。测试部分展示了查询、插入、删除和更新的操作方法及输出结果,帮助开发者快速上手 MyBatis-Plus 数据持久化框架。
927 0