当前位置: 首页 > news >正文

java | MyBatis-plus映射和golang映射对比

文章目录

  • Java
    • 实体类和数据库的映射
      • 1.默认驼峰命名规则
      • 2.自定义字段映射
      • 3.关闭驼峰命名规则
      • 4.JSON序列化映射
  • Golang
    • 1. 结构体与表的映射
    • 2. 字段与列的映射
    • 3. 关联关系映射
    • 4. 其他映射相关标签

这篇也是做数据库映射方面的对比:

Java

实体类和数据库的映射

1.默认驼峰命名规则

MyBatis-Plus默认会将数据库表字段名(下划线命名)映射到实体类属性名(驼峰命名)。例如:

数据库表字段名:user_name
实体类属性名:userName

2.自定义字段映射

可以通过@TableField注解或XML映射文件手动指定字段名与属性名的映射关系。

3.关闭驼峰命名规则

通过配置map-underscore-to-camel-case为false关闭默认的驼峰命名映射。
在application.yml中配置:

mybatis-plus:
  configuration:
    map-underscore-to-camel-case: false

在application.properties中配置:

mybatis-plus.configuration.map-underscore-to-camel-case=false

4.JSON序列化映射

结合@JsonProperty或@JSONField注解,可以将实体类属性名映射到JSON字段名。
通过以上方法,可以在MyBatis-Plus中灵活地定义实体类与数据库以及JSON的映射关系。

Golang

GORM 的映射包括结构体与表的映射、字段与列的映射、关联关系映射等。

1. 结构体与表的映射

GORM 默认会将结构体名称的复数形式作为表名,例如 User 结构体对应的表名默认为 users。也可以通过 gorm:“table:your_table_name” 标签来指定表名。
db.AutoMigrate(&User{}) 会根据 User 结构体的定义自动创建或更新对应的数据库表。

package main

import (
    "gorm.io/driver/sqlite"
    "gorm.io/gorm"
)

// User 结构体
type User struct {
    gorm.Model
    Name  string
    Email string
}

func main() {
    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
    if err != nil {
        panic("failed to connect database")
    }

    // 自动迁移表结构
    db.AutoMigrate(&User{})
}

2. 字段与列的映射

GORM 默认会将结构体字段名转换为蛇形命名(snake_case)作为列名,例如 UserName 字段对应的列名默认为 user_name。也可以通过 gorm:“column:your_column_name” 标签来指定列名。
在这里插入图片描述

3. 关联关系映射

一对多主要通过外键来实现,多对多通过标签实现,比如下面就是多对多的示例。

type User struct {
    gorm.Model
    Name  string
    Roles []Role `gorm:"many2many:user_roles;"`
}

type Role struct {
    gorm.Model
    Name string
    Users []User `gorm:"many2many:user_roles;"`
}

4. 其他映射相关标签

gorm:“primaryKey”:指定字段为主键。
gorm:“unique”:指定字段为唯一约束。
gorm:“not null”:指定字段为非空约束。

相关文章:

  • 详解Nginx 配置
  • 将Neo4j用于Python学习的创新方法
  • 操作系统3.1
  • 自用题库---面试使用
  • 黑盒测试和白盒测试常用的测试方法有哪些?
  • 【科研绘图系列】R语言绘制小提琴图、散点图和韦恩图(violin scatter plot Venn)
  • C++:pthread线程分离和线程属性
  • 软件测试概念
  • 【VSCode】MicroPython环境配置
  • Java面试第六山!《MySQL基础知识点》
  • C语言基础11天:函数
  • Unity面板介绍_Project工程面板(23.1.1)
  • 解决OpenEuler系统修改句柄无效的问题
  • 《QT+PCL 第五章》点云特征-ESF
  • 基于Python/Java的医院系统切换互联网医院深度编程对接探索
  • 【个人总结】9. 通讯协议、物联网、DSP及FatFS文件系统 工作三年的嵌入式常见知识点梳理及开发技术要点(欢迎指正、补充)
  • 【大语言模型_4】源码编译vllm框架cpu版
  • Spring Data JPA 排序实战:基于 Sort 参数的实现
  • nginx ngx_http_module(9) 指令详解
  • Oracle LiveLabs实验:Oracle AI Vector Search - Basics
  • 南京做公司网站的公司哪家好/百度云官方网站
  • 网站打开速度慢是什么原因/新媒体营销策略
  • wordpress 左侧菜单栏/怎样优化网站关键词排名靠前
  • 沈北新区建设局网站/手机怎么建自己的网站
  • 网站制作入门课程/怎么做市场营销和推广
  • 做国外产品描述的网站/网站推广排名收费