ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

动手实验——mybatis generator

动手实验——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
返回列表