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 小时前
存储过程的介绍、基本语法、delimiter的使用
数据库·存储过程的基本语法·delimiter的使用
麦兜*2 小时前
Spring Boot 整合量子密钥分发(QKD)实验方案
java·jvm·spring boot·后端·spring·spring cloud·maven
TTBIGDATA5 小时前
【支持Ubuntu22】Ambari3.0.0+Bigtop3.2.0——Step7—Mariadb初始化
数据库·ambari·hdp·mariadb·bigtop·ttbigdata·hidataplus
大得3695 小时前
django的数据库原生操作sql
数据库·sql·django
tuokuac5 小时前
SQL中的HAVING用法
数据库·sql
爬山算法5 小时前
MySQL(173)MySQL中的存储过程和函数有什么区别?
数据库·mysql
jnrjian5 小时前
利用trigger对大表在线同步 UDI
数据库·sql
Ruimin05195 小时前
Mysql集群技术
数据库·mysql
lifallen5 小时前
深入解析RocksDB的MVCC和LSM Tree level
大数据·数据结构·数据库·c++·lsm-tree·lsm tree