当前位置: 首页 > 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.hskmm.com/?act=detail&tid=25580

相关文章:

  • 学生管理系统面向对象分析报告
  • 荷兰青少年通过Telegram被招募,涉嫌参与俄罗斯支持的黑客活动
  • Moscow International Workshops 2017. Day 4. Lviv NU Contest, GP of Ukraine
  • 小代码使用npm包的方法
  • day18 课程(模块 )
  • Kubernetes(K8s)核心架构解析与实用命令大全 - 教程
  • mzoj 2025/10/6
  • 实验作业1-8 陆绎
  • 全源最短路 Johnson算法
  • 《对象创建的秘密:Java 内存布局、逃逸分析与 TLAB 优化详解》 - 实践
  • go get net/http connections count, using middleware
  • win11开机后卡死,磁盘c盘占用100%,解决方案
  • 跨越国度 解题报告
  • 手写Promise核心代码
  • 手动数据库分库分片策略
  • 大数据分析公司季度业绩与技术进展
  • tmux 终端复用器教程,创建一个持久的会话
  • 理解Transformer中的位置编码
  • 网络风险管理的三大关键洞察
  • 牛客 周赛110 20251007
  • Python列表初始化的陷阱:重复引用的坑
  • MongoDB
  • 实用指南:第三十三天打卡复习
  • 实用指南:Hardening fixes lead to hard questions
  • 赛前训练6 状压
  • 排序综合
  • NKOJ全TJ计划——NP11745
  • InfinityFree教程 ——免费搭建属于你的网站
  • 关于调和级数估算前n项的和
  • 10.6 模考 T4(QOJ 1836)