MyBatis-Plus CURD示例及条件构造器示例
发布日期:2025-04-14 09:03:25 浏览次数:12 分类:精选文章

本文共 4351 字,大约阅读时间需要 14 分钟。

数据库与简单CRUD示例

数据库结构

本文使用了两个主要表:userrole。具体字段定义如下:

  • user

    • id:BIGINT(20),不为空,作为主键。
    • name:VARCHAR(30),可为空,默认值为 NULL
    • age:INT(11),可为空,默认值为 NULL
    • email:VARCHAR(50),可为空,默认值为 NULL
    • role_id:BIGINT(20),不为空,外键,引用 role 表的 id
  • role

    • id:BIGINT(20),不为空,作为主键。
    • role_name:VARCHAR(30),可为空,默认值为 NULL
    • role_describe:VARCHAR(30),可为空,默认值为 NULL

简单CRUD示例

本文将通过五个基本的CRUD操作(插入、删除、更新、查询、排序)展示数据库操作的实现过程。

1. 插入操作

@PostMapping("/test1")
public void aInsert() {
// 准备参数:插入用户信息
User user = new User();
user.setName("小羊");
user.setAge(3);
user.setEmail("abc@mp.com");
// 执行插入操作
int a = userMapper.insert(user);
System.out.println("插入返回:" + a);
System.err.println("插入成功 ID 为:" + user.getId());
}
  • 参数准备:使用 User 实体类创建用户对象,并设置相关字段值。
  • 操作执行:通过 userMapper.insert(user) 执行插入操作,返回插入的记录数。

2. 删除操作

@PostMapping("/test2")
public void bDelete() {
// 删除用户
int a = userMapper.deleteById(18);
// 使用 QueryWrapper 定义条件删除
int b = userMapper.delete(new QueryWrapper
()
.lambda().eq(User::getName, "fr"));
System.out.println("删除返回:" + a + " 删除返回:" + b);
}
  • 方法一:使用 .deleteById 方法,通过 id 删除用户。
  • 方法二:使用 QueryWrapperlambda() 方法,通过 name 条件删除用户。

3. 更新操作

@PostMapping("/test3")
public void cUpdate() {
// 更新用户邮箱
userMapper.updateById(new User().setId(1L).setEmail("ab@c.c"));
// 更新用户姓名和年龄
userMapper.update(new User().setName("mp"),
new UpdateWrapper
()
.set(User::getAge, 3)
.eq(User::getId, 1L));
}
  • 方法一:使用 updateById 方法,仅更新 email 字段。
  • 方法二:使用 update 方法,通过 nameage 条件更新用户信息。

4. 查询操作

@PostMapping("/test4")
public void dSelect() {
// 查询用户信息
User user = userMapper.selectById(1L);
// 使用 QueryWrapper 查询用户
User user2 = userMapper.selectOne(new QueryWrapper
()
.lambda().eq(User::getId, 1L));
System.out.println("name:" + user.getName() + " age:" + user.getAge() + " email:" + user.getEmail());
}
  • 方法一:使用 selectById 方法,通过 id 查询单个用户。
  • 方法二:使用 selectOne 方法,通过 id 条件查询单个用户。

5. 排序操作

@PostMapping("/test5")
public void orderBy() {
QueryWrapper
ew = new QueryWrapper
();
ew.orderByAsc("age");
List
userList = userMapper.selectList(ew);
userList.forEach(System.out::println);
}
  • 排序方式:使用 orderByAsc 方法对 age 字段进行升序排序。

条件构造器示例

本文将展示条件构造器的使用方法,包括普通查询、SQL注入和嵌套查询等。

1. 普通查询

@PostMapping("test1")
public void tests() {
// 普通查询
List
plainUsers = userMapper.selectList(new QueryWrapper
()
.eq("role_id", 2L));
// Lambda 查询
List
lambdaUsers = userMapper.selectList(new QueryWrapper
()
.lambda().eq(User::getRoleId, 2L));
Assert.assertEquals(plainUsers.size(), lambdaUsers.size());
print(plainUsers);
}

2. 带子查询(SQL注入)

// 带子查询
List
plainUsers2 = userMapper.selectList(new QueryWrapper
()
.inSql("role_id", "select id from role where id = 2"));
List
lambdaUsers2 = userMapper.selectList(new QueryWrapper
()
.lambda().inSql(User::getRoleId, "select id from role where id = 2"));

3. 嵌套查询

List
plainUsers3 = userMapper.selectList(new QueryWrapper
()
.nested(i -> i.eq("role_id", 2L).or().eq("role_id", 3L))
.and(i -> i.ge("age", 20)));
List
lambdaUsers3 = userMapper.selectList(new QueryWrapper
()
.lambda().nested(i -> i.eq(User::getRoleId, 2L).or().eq(User::getRoleId, 3L))
.and(i -> i.ge(User::getAge, 20)));

4. 自定义查询

List
plainUsers4 = userMapper.selectList(new QueryWrapper
()
.apply("role_id = 2"));

更新与验证

// 更新用户信息
UpdateWrapper
uw = new UpdateWrapper
();
uw.set("email", null);
uw.eq("id", 4);
userMapper.update(new User(), uw);
User u4 = userMapper.selectById(4);
Assert.assertNull(u4.getEmail());

通过以上示例,可以看到如何在实际项目中使用 CRUD 操作和条件构造器来实现数据库的增删改查功能。

上一篇:mybatis-plus apply 防SQL注入,从零基础到精通,收藏这篇就够了!
下一篇:MyBatis-Plus LambdaQueryWrapper 详解:优雅构建类型安全的查询条件

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2025年05月19日 07时39分03秒