spring boot 使用mybatis简单连接数据库+连表查询

创建maven项目

idea配置maven

配置本地仓库

  1. 在maven安装目录里找到 conf>settings.xml>

  2. 设置本地仓库的绝对路径 <localRepository>本地仓库的路径,也就是存放jar的位置</localRepository>

  3. 配置远程仓库
    <mirrors> //放到这里面 </mirrors>

  4. 设置全局本地仓库。 文件(settings.xml),copy一份到本地仓库 Copy一份到c盘.2>里面

  5. Pom.xml文件简单介绍

    //工程的属性,构建源码的编码方式,编译的时候的版本
    <properties></properties>

    //工程依赖的jar包的相关描述
    <dependencies></dependencies>

目录结构

PlainText 复制代码
src\
├── main\
│   ├── java\
│   │   └── com\
│   │       └── qhit\
│   │           └── demo\
│   │               ├── DemoApplication.java
│   │               ├── bean\
│   │               │   ├── Admin.java
│   │               │   ├── Dictionary.java
│   │               │   ├── Mode.java
│   │               │   ├── Register.java
│   │               │   ├── Student.java
│   │               │   └── Vehicles.java
│   │               ├── controller\
│   │               │   ├── StudentController.java
│   │               │   └── TeacherController.java
│   │               ├── dao\
│   │               │   ├── AdminDao.java
│   │               │   ├── DictionaryDao.java
│   │               │   ├── ModeDao.java
│   │               │   ├── RegisterDao.java
│   │               │   ├── StudentDao.java
│   │               │   └── VehiclesDao.java
│   │               ├── exception\
│   │               │   ├── GlobalException.java
│   │               │   └── LoginException.java
│   │               ├── service\
│   │               │   ├── StudentService.java
│   │               │   └── TeacherService.java
│   │               ├── utils\
│   │               │   ├── MD5Util.java
│   │               │   └── UUIDUtil.java
│   │               └── vo\
│   │                   ├── Msg.java
│   │                   └── ReDc.java
│   └── resources\
│       └── application.yml
└── test\
    └── java\
        └── com\
            └── qhit\
                └── demo\
                    └── DemoApplicationTests.java

创建表语句

sql 复制代码
-- 1. 管理员表
drop table if exists tbl_admin;
create table tbl_admin (
    u_id varchar(255) primary key comment '管理员ID',
    u_name varchar(255) not null comment '管理员姓名',
    u_password varchar(255) not null comment '管理员密码'
) engine=InnoDB default charset=utf8mb4;

-- 2. 外来人信息表
drop table if exists tbl_mode;
create table tbl_mode (
    m_id varchar(255) primary key comment '外来人ID',
    m_name varchar(255) not null comment '姓名',
    m_phone varchar(255) comment '电话',
    m_relation varchar(255) comment '关系'
) engine=InnoDB default charset=utf8mb4;

-- 3. 交通工具表
drop table if exists tbl_vehicles;
create table tbl_vehicles (
    v_id varchar(255) primary key comment '交通工具ID',
    v_name varchar(255) not null comment '交通工具名称',
    v_modeId varchar(255) comment '关联外来人ID',
    constraint fk_vehicles_mode foreign key (v_modeId) references tbl_mode(m_id)
) engine=InnoDB default charset=utf8mb4;

-- 4. 登记表
drop table if exists tbl_register;
create table tbl_register (
    r_id varchar(255) primary key comment '登记ID',
    r_name varchar(255) not null comment '姓名',
    r_startDate varchar(255) comment '回去时间',
    r_vehiclesId varchar(255) comment '关联交通工具ID',
    r_endDate varchar(255) comment '归来时间',
    r_address varchar(255) comment '地址',
    constraint fk_register_vehicles foreign key (r_vehiclesId) references tbl_vehicles(v_id)
) engine=InnoDB default charset=utf8mb4;

-- 5. 学生表
drop table if exists tbl_student;
create table tbl_student (
    s_id varchar(255) primary key comment '学生ID',
    s_name varchar(255) not null comment '学生姓名',
    s_number varchar(255) not null comment '学号',
    s_password varchar(255) not null comment '密码',
    s_class varchar(255) comment '班级',
    s_register_id varchar(255) comment '关联登记表ID',
    constraint fk_student_register foreign key (s_register_id) references tbl_register(r_id)
) engine=InnoDB default charset=utf8mb4;

-- 6. 字典
drop table if exists tbl_student;
create table tbl_student (
    s_id varchar(255) primary key comment '学生ID',
    s_name varchar(255) not null comment '学生姓名',
    s_number varchar(255) not null comment '学号',
    s_password varchar(255) not null comment '密码',
    s_class varchar(255) comment '班级',
    s_register_id varchar(255) comment '关联登记表ID',
    constraint fk_student_register foreign key (s_register_id) references tbl_register(r_id)
) engine=InnoDB default charset=utf8mb4;

本来想做一个学生出行登记系统,但只做了一部分。记录一下。

根据代码分析,该项目是一个基于Spring Boot的学生管理系统,主要实现以下功能:

  1. 核心功能模块
  • 学生管理 :包括学生登录(通过学号和密码验证)、学生注册(输入姓名、密码、学号、班级等信息)
  • 管理员管理 :管理员登录、查询登记信息(支持分页查询)
  • 登记管理 :学生出行登记(记录出行时间、交通工具、归来时间、地址等信息)
  1. 技术栈
  • 后端框架:Spring Boot 2.4.4
  • ORM框架:MyBatis
  • 数据库:MySQL
  • 其他依赖:Fastjson(JSON处理)、PageHelper(分页查询)
  1. 数据模型
  • 学生表(tbl_student) :存储学生基本信息
  • 管理员表(tbl_admin) :存储管理员账户信息
  • 登记表(tbl_register) :存储学生出行登记信息
  • 外来人信息表 :存储相关外来人员信息
  • 交通工具表 :存储交通工具信息
  • 数据字典表 :存储字典数据
  1. 系统架构
  • 采用经典的三层架构:Controller层(处理请求)、Service层(业务逻辑)、Dao层(数据访问)
  • 使用全局异常处理机制处理业务异常
  • 采用RESTful风格API设计
    项目整体用于学校场景下的学生信息管理和出行登记管理,帮助学校实现学生管理的信息化和规范化。

pom.xml

xml 复制代码
<?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>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.4</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>tk.mybatis</groupId>
            <artifactId>mapper-spring-boot-starter</artifactId>
            <version>2.0.4</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.47</version>
        </dependency>
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

配置文件

application.yml

yaml 复制代码
server:
  port: 8081
spring:
  datasource:
    username: root
    password: 1234
    url: jdbc:mysql://127.0.0.1:3306/test
mybatis:
  type-aliases-package: com.qhit.demo

启动类

java 复制代码
package com.qhit.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import tk.mybatis.spring.annotation.MapperScan;

@SpringBootApplication
@MapperScan("com.qhit.demo.dao")
public class DemoApplication {

    public static void main(String[] args) {
        System.out.println();
        SpringApplication.run(DemoApplication.class, args);
    }

}

工具类-uuid工具类

java 复制代码
package com.qhit.demo.utils;

import java.util.UUID;

public class UUIDUtil {
    public static String getUUID() {
        return UUID.randomUUID().toString().replaceAll("-", "");
    }
}

统一返回格式

java 复制代码
package com.qhit.demo.vo;

import java.util.HashMap;
import java.util.Map;

public  class Msg {
    private int code;
    private Object msg;
    //用户要返回给浏览器的数据
    private Map<String,Object> data = new HashMap<String, Object>();
    public static Msg success(){
        Msg result = new Msg();
        result.setCode(200);
        result.setMsg("处理成功");
        return result;

    }
    public static Msg fail(){
        Msg result = new Msg();
        result.setCode(500);
        result.setMsg("处理失败");
        return result;

    }
    //链式操作
    public Msg add(String key, Object value){
        this.getData().put(key, value);
        return this;
    }
    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public Object getMsg() {
        return msg;
    }

    public void setMsg(Object msg) {
        this.msg = msg;
    }

    public Map<String, Object> getData() {
        return data;
    }

    public void setData(Map<String, Object> data) {
        this.data = data;
    }
}

连表查询返回封装

java 复制代码
public class ReDc {
    private String r_id;
    private String r_name;
    private String r_startDate;
    private String d_name;
    private String r_endDate;
    private String r_address;
    /* 忽略get set */
}


//dao
import com.qhit.demo.bean.Register;
import com.qhit.demo.vo.ReDc;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;

@Repository
public interface RegisterDao extends Mapper<Register> {
    @Select("select r.r_id,r.r_name,r.r_startDate,d.d_name,r.r_endDate,r.r_address from tbl_register as r left join tbl_dictionary as d on r.r_vehiclesId = d.d_id")
    public List<ReDc> getSelectAll();
}


// service

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.qhit.demo.bean.Admin;
import com.qhit.demo.dao.AdminDao;
import com.qhit.demo.dao.RegisterDao;
import com.qhit.demo.exception.LoginException;
import com.qhit.demo.vo.ReDc;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.util.StringUtil;

import java.util.List;

@Service
public class TeacherService {

        @Autowired
        AdminDao adminDao;
        @Autowired
        RegisterDao registerDao;

        public  Admin login(Admin admin) throws LoginException {
            if(StringUtil.isEmpty(admin.getU_id())){
                throw new LoginException("管理账号为空,请检查账号");
            }
            if(StringUtil.isEmpty(admin.getU_password())){
                throw new LoginException("密码为空,请检查密码");
            }
            //select * from student where s_number = n1 and s_password = 123;
            Example example = new Example(Admin.class);
            Example.Criteria criteria = example.createCriteria();
            criteria.andEqualTo("u_id",admin.getU_id());
            criteria.andEqualTo("u_password",admin.getU_password());
            return adminDao.selectOneByExample(example);
        }


        public PageInfo<ReDc> select(int pageNum, int pageSize) {
            PageHelper.startPage(pageNum,pageSize);
            List<ReDc> list = registerDao.getSelectAll();
            PageInfo<ReDc> pageInfo = new PageInfo<>(list);
            return pageInfo;
        }
}

// controller
import com.github.pagehelper.PageInfo;
import com.qhit.demo.bean.Admin;
import com.qhit.demo.exception.LoginException;
import com.qhit.demo.service.TeacherService;
import com.qhit.demo.vo.Msg;
import com.qhit.demo.vo.ReDc;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("teacher")
public class TeacherController {
    @Autowired
    TeacherService teacherService;
    @PostMapping("doLogin")
    public Msg doLogin(Admin admin) throws LoginException {
        Admin admin1 = teacherService.login(admin);
        if(!ObjectUtils.isEmpty(admin1)){
            return Msg.success().add("admin",admin1);
        }else{
            throw new LoginException("管理员账号或密码不正确");
        }
    }
    @PostMapping("select")
    public Msg select(@RequestParam(value = "pageNum",defaultValue = "1") int pageNum,@RequestParam(value = "pageSize",defaultValue = "10") int pageSize){
        PageInfo<ReDc> list = teacherService.select(pageNum,pageSize);
        return Msg.success().add("list",list);
    }
}

其他简单的实体类

java 复制代码
@Table(name = "tbl_admin")
@NameStyle(Style.normal)
public class Admin {
    private String u_id;
    private String u_name;
    private String u_password;
    /* 忽略get set */
}

/**
 * 数据字典
 */
public class Dictionary {
    private String d_id;
    private String d_name;
     /* 忽略get set */
}
/**
 * 外来人信息表
 */
public class Mode {
    private String m_id;
    private String m_name;
    private String m_phone;
    private String m_relation;//关系
     /* 忽略get set */
}
/**
 * 登记表
 */
@Table(name = "tbl_register")
@NameStyle(Style.normal)
public class Register {
    private String r_id;
    private String r_name;
    private String r_startDate;//回去时间
    private String r_vehiclesId;
    private String r_endDate;//归来时间
    private String r_address;//地址
     /* 忽略get set */
 }

/**
 * 学生表
 */
@Table(name = "tbl_student")
@NameStyle(Style.normal)
public class Student {
    private String s_id;
    private String s_name;
    private String s_number;
    private String s_password;
    private String s_class;
    private String s_register_id;
    /* 忽略get set */
}

/**
 * 交通工具
 */
public class Vehicles {
    private String v_id;
    private String v_name;
    private String v_modeId;
    /* 忽略get set */
}

dao层

java 复制代码
import com.qhit.demo.bean.Admin;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

@Repository
public interface AdminDao extends Mapper<Admin> {
    Admin login(Admin admin);
}

import com.qhit.demo.bean.Dictionary;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

@Repository
public interface DictionaryDao extends Mapper<Dictionary> {
}

import com.qhit.demo.bean.Mode;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

@Repository
public interface ModeDao extends Mapper<Mode> {
}

import com.qhit.demo.bean.Register;
import com.qhit.demo.vo.ReDc;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;

import java.util.List;

@Repository
public interface RegisterDao extends Mapper<Register> {
    @Select("select r.r_id,r.r_name,r.r_startDate,d.d_name,r.r_endDate,r.r_address from tbl_register as r left join tbl_dictionary as d on r.r_vehiclesId = d.d_id")
    public List<ReDc> getSelectAll();
}


import com.qhit.demo.bean.Student;
import org.springframework.stereotype.Repository;
import tk.mybatis.mapper.common.Mapper;


@Repository
public interface StudentDao extends Mapper<Student> {
//    @Select("select * from tbl_student where s_number = ${id}  and s_password = ${password} ")
    Student login(Student student);
}


import com.qhit.demo.bean.Vehicles;
import tk.mybatis.mapper.common.Mapper;

public interface VehiclesDao extends Mapper<Vehicles> {
}

service层

java 复制代码
import com.qhit.demo.bean.Register;
import com.qhit.demo.bean.Student;

import com.qhit.demo.dao.RegisterDao;
import com.qhit.demo.dao.StudentDao;
import com.qhit.demo.exception.LoginException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import tk.mybatis.mapper.util.StringUtil;

@Service
public class StudentService {
    @Autowired
    StudentDao studentDao;
    @Autowired
    RegisterDao registerDao;

    public Student login(Student student) throws LoginException {
        if(StringUtil.isEmpty(student.getS_number())){
            throw new LoginException("学号为空,请检查学号");
        }
        if(StringUtil.isEmpty(student.getS_password())){
            throw new LoginException("密码为空,请检查密码");
        }
        //select * from student where s_number = n1 and s_password = 123;
        Example example = new Example(Student.class);
        Example.Criteria criteria = example.createCriteria();
        criteria.andEqualTo("s_number",student.getS_number());
        criteria.andEqualTo("s_password",student.getS_password());
        return studentDao.selectOneByExample(example);


    }


    //注册:输入姓名,密码,学号,班级
    public int registered(Student student){
       return studentDao.insert(student);
    }

    public int doByBus(Register register) {
        return registerDao.insert(register);
    }

    public void insert(Register register) {
    }
}

controller层

java 复制代码
import com.qhit.demo.bean.Register;
import com.qhit.demo.bean.Student;
import com.qhit.demo.exception.LoginException;
import com.qhit.demo.service.StudentService;
import com.qhit.demo.vo.Msg;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ObjectUtils;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("student")
public class StudentController {
    @Autowired
    StudentService studentService;

//注册:输入姓名,密码,学号,班级
//    @PostMapping("doRegistered")
//    public Msg doRegistered(Student student){
//
//    }
    @PostMapping("doLogin")
    public Msg doLogin(Student student) throws LoginException {
        Student student1 = studentService.login(student);
        if (!ObjectUtils.isEmpty(student1)) {
            return Msg.success().add("student", student1);
        } else {
            throw new LoginException("学号或密码不正确");
        }
    }

    @PostMapping("insert")
    public Msg insert(Student student) throws LoginException {
        if (student != null) {
            int registered = studentService.registered(student);
            return Msg.success().add("success", registered);
        } else {
            throw new LoginException("");
        }
    }

    @PostMapping("byBus")
    public Msg byBus(Register register) {
        int i = studentService.doByBus(register);
        return Msg.success().add("success", i);

    }
}

自定义全局异常

java 复制代码
import com.alibaba.fastjson.JSONObject;
import com.qhit.demo.vo.Msg;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;


@ControllerAdvice
public class GlobalException {
    private static final Logger logger = LoggerFactory.getLogger(com.qhit.demo.exception.GlobalException.class);

    /**
     * 处理自定义的业务异常
     * @param req
     * @param e
     * @return
     */
    @ExceptionHandler(value = LoginException.class)
    @ResponseBody
    public Msg bizExceptionHandler(HttpServletRequest req, LoginException e){
        e.printStackTrace();
        logger.error("发生业务异常!原因是:{} ", JSONObject.toJSONString(e.getMessage()));

        Msg fail = Msg.fail();
        fail.setMsg(e.getMessage());
        return fail;
    }



//
//    /**
//     * SQL唯一约束的异常
//     * @param req
//     * @param e
//     * @return
//     */
//    @ExceptionHandler(value = DuplicateKeyException.class)
//    @ResponseBody
//    public Result exceptionHandler(HttpServletRequest req, DuplicateKeyException e){
//        logger.error("SQL唯一约束异常!原因是:{}",e.getMessage());
//        return ResultGenerator.genFailResult("SQL唯一约束异常");
//    }
//
//    /**
//     * SQL外键约束的异常
//     * @param req
//     * @param e
//     * @return
//     */
//    @ExceptionHandler(value = DataIntegrityViolationException.class)
//    @ResponseBody
//    public Result exceptionHandler(HttpServletRequest req, DataIntegrityViolationException e){
//        logger.error("SQL外键约束异常!原因是:{}",e.getMessage());
//        return ResultGenerator.genFailResult("SQL外键约束异常");
//    }
//
//
//    /**
//     * SQL查询的异常
//     * @param req
//     * @param e
//     * @return
//     */
//    @ExceptionHandler(value = TooManyResultsException.class)
//    @ResponseBody
//    public Result exceptionHandler(HttpServletRequest req, TooManyResultsException e){
//        logger.error("SQL查询异常!原因是: {}",e.getMessage());
//        return ResultGenerator.genFailResult("SQL查询异常");
//    }
//
//    /**
//     * MyBatis异常
//     * @param req
//     * @param e
//     * @return
//     */
//    @ExceptionHandler(value = MyBatisSystemException.class)
//    @ResponseBody
//    public Result exceptionHandler(HttpServletRequest req, MyBatisSystemException e){
//        logger.error("MyBatis异常!原因是: {}",e.getMessage());
//        return ResultGenerator.genFailResult("MyBatis异常");
//    }
//
//    /**
//     * 绑定的异常
//     * @param req
//     * @param e
//     * @return
//     */
//    @ExceptionHandler(value = BindException.class)
//    @ResponseBody
//    public Result exceptionHandler(HttpServletRequest req, BindException e){
//        logger.error("绑定异常!原因是:{}",e.getMessage());
//        return ResultGenerator.genFailResult("API接口参数错误");
//    }
//    /**
//     * 处理空指针的异常
//     * @param req
//     * @param e
//     * @return
//     */
//    @ExceptionHandler(value =NullPointerException.class)
//    @ResponseBody
//    public Result exceptionHandler(HttpServletRequest req, NullPointerException e){
//        e.printStackTrace();
//        logger.error("发生空指针异常!原因是:{}",e.getMessage());
//        return ResultGenerator.genFailResult("空指针异常");
//    }
////    /**
////     * 请求头失效的异常
////     * @param req
////     * @param e
////     * @return
////     */
////    @ExceptionHandler(value = ExpiredJwtException.class)
////    @ResponseBody
////    public Result exceptionHandler(HttpServletRequest req,ExpiredJwtException e){
////        logger.error("发生空指针异常!原因是:{}",e.getMessage());
////        return ResultGenerator.genUnauthorizedResult().setMessage("Token失效");
////    }
//
//
//    /**
//     * 处理其他异常
//     * @param req
//     * @param e
//     * @return
//     */
//    @ExceptionHandler(value =Exception.class)
//    @ResponseBody
//    public Result exceptionHandler(HttpServletRequest req, Exception e) {
//        e.printStackTrace();
//        logger.error("未知异常!原因是:{}", e.getMessage());
//        return ResultGenerator.genFailResult("未知异常");
//    }
}

登录异常

ava 复制代码
public class LoginException extends Exception{
    public LoginException() {
        super();
    }

    public LoginException(String message) {
        super(message);
    }
}
相关推荐
启明真纳1 天前
PostgreSQL 单库备份
数据库·postgresql
Amd7941 天前
PostgreSQL备份不是复制文件?物理vs逻辑咋选?误删还能精准恢复到1分钟前?
数据库·postgresql
Keepreal4961 天前
1小时快速上手SpringBoot,熟练掌握CRUD
spring boot·后端
wzg20161 天前
pyqt5 简易入门教程
开发语言·数据库·qt
你是狒狒吗1 天前
为什么mysql要有主从复制,主库,从库这种东西
数据库·mysql
倔强的石头1061 天前
【金仓数据库】ksql 指南(一) 连接本地 KingbaseES 数据库与基础交互
数据库·oracle·kingbasees·金仓数据库·ksql
卷Java1 天前
违规通知功能修改说明
java·数据库·微信小程序·uni-app
养生技术人1 天前
Oracle OCP认证考试题目详解082系列第54题
数据库·sql·oracle·运维开发·database·开闭原则·ocp
数据知道1 天前
Go基础:用Go语言操作MongoDB详解
服务器·开发语言·数据库·后端·mongodb·golang·go语言