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

动手实验——mybatis generator

  1. 前言
    边学边做中
    mapper的用处是和数据库交互,具体的行为找了一个mapper文件,让chatgpt讲解了一下,如下:
    首先是方法表
    | 方法 | 功能 | 是否常用 |
    | --------------------------- | -------- | ------- |
    | countByExample | 统计数量 | ✅ |
    | deleteByExample | 按条件删除 | ⚪️(慎用) |
    | deleteByPrimaryKey | 按主键删除 | ✅ |
    | insert | 全字段插入 | ❌(一般不用) |
    | insertSelective | 非空字段插入 | ✅ |
    | selectByExample | 条件查询 | ✅ |
    | selectByPrimaryKey | 主键查询 | ✅ |
    | updateByExampleSelective | 条件更新部分字段 | ⚪️ |
    | updateByExample | 条件更新全字段 | ❌ |
    | updateByPrimaryKeySelective | 主键更新部分字段 | ✅ |
    | updateByPrimaryKey | 主键更新全字段 | ⚪️ |

然后是讲解
1️⃣ 统计记录数
long countByExample(UserAccountExample example);
功能:根据条件统计表中记录数量。
例子:
UserAccountExample example = new UserAccountExample();
example.createCriteria().andRoleEqualTo("student");
long count = userAccountMapper.countByExample(example);

SQL 等价于:
SELECT COUNT(*) FROM user_account WHERE role = 'student';

2️⃣ 删除数据
int deleteByExample(UserAccountExample example);
int deleteByPrimaryKey(Long id);
方法 功能 示例
deleteByExample 按条件删除多行 删除所有 is_deleted = 1 的用户
deleteByPrimaryKey 按主键删除一行 删除 ID=5 的用户

3️⃣ 插入数据
int insert(UserAccount row);
int insertSelective(UserAccount row);

方法 区别 用途
insert 全字段插入(null 也会写入) 不推荐(会覆盖默认值)
insertSelective 只插入非空字段 推荐使用,保持默认值生效

例子:
UserAccount user = new UserAccount();
user.setEmail("test@cuhk.edu.hk");
user.setDisplayName("Mingya");
userAccountMapper.insertSelective(user);

SQL:
INSERT INTO user_account (email, display_name)
VALUES ('test@cuhk.edu.hk', 'Mingya');

4️⃣ 查询数据
List selectByExample(UserAccountExample example);
UserAccount selectByPrimaryKey(Long id);
方法 功能 示例
selectByExample 按条件查多行 查询所有学生用户
selectByPrimaryKey 按主键查单行 查询 ID=3 的用户
例子:
UserAccountExample example = new UserAccountExample();
example.createCriteria().andRoleEqualTo("admin");
List admins = userAccountMapper.selectByExample(example);

SQL:
SELECT * FROM user_account WHERE role = 'admin';

5️⃣ 更新数据
int updateByExampleSelective(@Param("row") UserAccount row, @Param("example") UserAccountExample example);
int updateByExample(@Param("row") UserAccount row, @Param("example") UserAccountExample example);
int updateByPrimaryKeySelective(UserAccount row);
int updateByPrimaryKey(UserAccount row);

方法 功能 示例
updateByPrimaryKeySelective 按主键更新非空字段(推荐) 修改某个用户昵称
updateByPrimaryKey 按主键全字段更新(不推荐)
updateByExampleSelective 按条件批量更新部分字段 批量把 role='student' 改成 is_deleted=1
updateByExample 按条件批量全字段更新

例子:
UserAccount update = new UserAccount();
update.setLastLoginAt(new Timestamp(System.currentTimeMillis()));

UserAccountExample example = new UserAccountExample();
example.createCriteria().andRoleEqualTo("student");

userAccountMapper.updateByExampleSelective(update, example);

SQL:
UPDATE user_account
SET last_login_at = NOW()
WHERE role = 'student';

  1. 环境配置
    1)模块根文件夹下
    pom.xml
    (具体是不是一定要有,还不清楚,但目前版本号和插件依赖能跑通)
    加入依赖

    org.mybatis.spring.bootmybatis-spring-boot-starter${mybatis.spring.boot.version}com.mysqlmysql-connector-jorg.springframework.bootspring-boot-starter-data-redisorg.springframework.bootspring-boot-starter-jdbcorg.projectlomboklombokprovided

加入插件

org.mybatis.generator
mybatis-generator-maven-plugin
1.4.2

src/main/resources/generatorConfig.xml
true




com.mysql
mysql-connector-j
8.3.0


2)模块根文件夹/src/main/resources下
generatorConfig.xml
参考网上配置即可

  1. 生成
    Vscode下左下角有maven插件,点开模块下可看到mybatis-generator的generate,可使用。另一个方法是在模块根目录下执行
    mvn -U -DskipTests mybatis-generator:generate

最终会生成

类型 说明 举例
DataObject (DO) 数据表对应的 Java 实体类 Event.java、UserAccount.java
Mapper 接口 操作数据库的接口 EventMapper.java
Mapper XML SQL 语句定义 EventMapper.xml
  1. 下一步
    注册Mapper,让其他文件能使用mapper
http://www.gsyq.cn/news/16544.html

相关文章:

  • Moscow International Workshops 2017. Day 4. Lviv NU Contest, GP of Ukraine
  • day18 课程(模块 )
  • 实验作业1-8 陆绎
  • win11开机后卡死,磁盘c盘占用100%,解决方案
  • 跨越国度 解题报告
  • 实用指南:Hardening fixes lead to hard questions
  • 赛前训练6 状压
  • NKOJ全TJ计划——NP11745
  • Windows install RabbitMQ via PowerShell via administrator role
  • 一些做题记录(2025 2-3)
  • 实用指南:Linux 权限管理入门:从基础到实践
  • 无法定时发送
  • MongoDB财报超预期,文档数据库技术解析
  • 2020CSPS T1 儒略日题解
  • Python 语言编程技巧
  • kafka 常用知识点 - 指南
  • 英语_阅读_ChatGPT_待读
  • 详细介绍:Qwen2.5-VL 损失函数
  • visual studio
  • HttpServletResponse 对象用来做什么? - 详解
  • [LUCKY」在Windows下使用STUN穿透实现Minecraft联机并设置SRV记录
  • 详细介绍:如何用 pnpm patch 给 element-plus 打补丁修复线上 bug(以 2.4.4 修复 PR#15197 为例)
  • Go 为何天生适合云原生? - 指南
  • ARC 207
  • 深入解析:C++:内存管理
  • [KaibaMath1001] 关于∀ε0,|a-b|ε = a=b的证明
  • 基于Web的分布式图集管理系统架构设计与实践 - 教程
  • 国庆 Day2 强基物理
  • unix/linux source 命令,其发展历程详细时间线、由来、历史背景 - 指南
  • AtCoder Regular Contest 207 (Div.1) 游记