动手实验——mybatis generator

news/2025/10/6 18:04:37/文章来源:https://www.cnblogs.com/mint323/p/19127784
  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.mzph.cn/news/929577.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

迅速了解GO+ElasticSearch

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

学生管理系统面向对象分析报告

学生管理系统面向对象分析报告 目录1. 案例中哪里体现出了封装性及其好处? 2. 案例中的setter/getter模式与封装性? 3. 案例中某些类的toString()方法? 4. 案例中几个常用方法解析。 5. 案例中的面向对象设计 5.1 尝…

荷兰青少年通过Telegram被招募,涉嫌参与俄罗斯支持的黑客活动

两名17岁荷兰青少年通过Telegram被招募,涉嫌为亲俄黑客从事间谍活动。他们使用Wi-Fi嗅探器在欧盟机构总部和使馆周边进行网络测绘,目前一人被拘留,一人被软禁。案件凸显国家支持黑客利用未成年人作为"可抛弃代…

网站推广策划方案毕业设计免费建立网站有必要吗

一个master可以拥有多个slave,一个slave又可以拥有多个slave,如此下去,形成了强大的多级服务器集群架构 比如,将ip为192.168.1.10的机器作为主服务器,将ip为192.168.1.11的机器作为从服务器 说明:ip可以换为…

网站开发部门工资入什么科目营销一体化营销平台

org.springframework.util.StringUtils 1、字符串判断工具 // 判断字符串是否为 null,或 ""。注意,包含空白符的字符串为非空 boolean isEmpty(Object str) // 判断字符串是否是以指定内容结束。忽略大小写 boolean endsWithIgnoreCase…

Moscow International Workshops 2017. Day 4. Lviv NU Contest, GP of Ukraine

Preface 国庆本以为空的一批结果忙的飞起,好不容易抽时间凑到三个人,结果被 Div2 小登们按在地上摩擦。B. Card Game 签到,暴力枚举约数即可 #include<cstdio> #include<iostream> #include<map>…

网站开发有哪些技术wordpress新建音乐界面

转载自 ClassLoader 详解及用途 ClassLoader主要对类的请求提供服务&#xff0c;当JVM需要某类时&#xff0c;它根据名称向ClassLoader要求这个类&#xff0c;然后由ClassLoader返回这个类的class对象。 1.1 几个相关概念ClassLoader负责载入系统的所有Resources&#xff08;…

提供手机自适应网站土木工程网官网登录

Hadoop 1、 Hadoop的介绍 Hadoop最早起源于Nutch。Nutch的设计目标是构建一个大型的全网搜索引擎&#xff0c;包括网页抓取、索引、查询等功能&#xff0c;但随着抓取网页数量的增加&#xff0c;遇到了严重的可扩展性问题——如何解决数十亿网页的存储和索引问题。2003年、20…

云原生架构的演进与落地:重塑企业 IT 的核心能力 - 实践

云原生架构的演进与落地:重塑企业 IT 的核心能力 - 实践2025-10-06 17:49 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important;…

小代码使用npm包的方法

小代码使用npm包的方法pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &quo…

用手机域名做网站有多少张家口网站建设工作室

以下是电力行业中分布式能源管理(Distributed Energy Management System, DEMS)的实现方案,涵盖系统架构、关键技术、核心功能及实施路径,结合典型场景与代码示例: 一、系统架构设计 采用云-边-端三层架构,实现分布式能源的高效协同管理: 1. 终端层(感知层) 设备组…

网站做支付宝接口网页设计基础试题

Java Learning Path&#xff08;三&#xff09;过程篇   每个人的学习方法是不同的&#xff0c;一个人的方法不见得适合另一个人&#xff0c;我只能是谈自己的学习方法。因为我学习Java是完全自学的&#xff0c;从来没有问过别人&#xff0c;所以学习的过程基本上完全是自己…

张家港做网站优化排名新乡网站设计公司

摘要&#xff1a;当前,多核技术的不断发展和日渐成熟,使得处理器的性能得到巨大提升.但是对于存储设备来说,无论是速度还是容量都无法跟上这种步伐.随着处理器和其它子系统发展差距的日益加大,超级计算机的效率问题逐渐成为人们讨论和研究的热点,大部分的实际应用在超级计算机上…

day18 课程(模块 )

day18 课程(模块 &)课程: 18.1 了解模块------------------------------------------------ 执行后18.2 导入模块之方法一------------------------------------------------ 执行后18.3 导入模块之方法二-----…

Kubernetes(K8s)核心架构解析与实用命令大全 - 教程

Kubernetes(K8s)核心架构解析与实用命令大全 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&qu…

mzoj 2025/10/6

T1 考试时写的 \(O(n^4)\) 的,差点四了( 可以直接用 Floyd 找哪些可以由其他路径拼起来,剩下的是必须的。 rep(k,1,n) rep(i,1,n) rep(j,1,n)if(mp[i][j]==mp[i][k]+mp[k][j]&&mp[i][j]&&mp[i][k]&…

在 Windows 系统下配置 VSCode + CMake + Ninja 进行 C++ 或 Qt 创建

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

全源最短路 Johnson算法

洛谷p5905 #include<bits/stdc++.h> using namespace std; #define endl \n typedef long long LL; typedef pair<int,int> PII; const int N=3e3+10,INF=1e9; vector<PII> edges[N]; int dist[N],n…

UNION 与 UNION ALL 的区别 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …