[toc]
持久层接口
Mapper Interface
BaseMapper 是 Mybatis-Plus 提供的一个通用 Mapper 接口,它封装了一系列常用的数据库操作方法,包括增、删、改、查等。通过继承 BaseMapper,开发者可以快速地对数据库进行操作,而无需编写繁琐的 SQL 语句。
提示:
- 泛型 T 为任意实体对象
- 参数 Serializable 为任意类型主键 Mybatis-Plus 不推荐使用复合主键约定每一张表都有自己的唯一 id 主键
- 对象 Wrapper 为 条件构造器
步骤有:
- Mapper接口
定义Mapper接口,并继承MyBatis-Plus提供的BaseMapper接口。BaseMapper已经包含了基本的CRUD操作。1 2 3 4
| @Mapper public interface UserMapper extends BaseMapper<User> { }
|
- 实体类
确保有一个对应的实体类,并且该实体类使用了MyBatis-Plus的注解(如@TableName)来映射数据库表。1 2 3 4 5 6 7 8
| @Data @TableName("user") public class User { @TableId(type = IdType.AUTO) private Long id; private String name; private String email; }
|
- 服务层
在服务层中注入Mapper接口,并使用它来进行数据库操作。1 2 3 4 5 6 7 8 9 10 11 12 13
| @Service public class UserService { @Autowired private UserMapper userMapper;
public User getUserById(Long id) { return userMapper.selectById(id); }
public void addUser(User user) { userMapper.insert(user); } }
|
- 事务管理
如果需要事务支持,可以在服务层的方法上添加@Transactional注解。1 2 3 4
| @Transactional public void addUser(User user) { userMapper.insert(user); }
|
- 自定义SQL
如果需要执行自定义的SQL语句,可以在Mapper接口中定义相应的方法,并在XML文件中编写SQL语句,或者使用注解方式。1 2 3 4 5
| @Mapper public interface UserMapper extends BaseMapper<User> { @Select("SELECT * FROM user WHERE name = #{name}") List<User> selectByName(String name); }
|
- 接下来就可以在业务逻辑层使用了
1.insert
功能描述
插入一条记录。
返回值
int,表示插入操作影响的行数,通常为 1,表示插入成功。
参数说明
示例
insert:
1 2 3 4 5 6 7 8 9
| User user = new User(); user.setName("John Doe"); user.setEmail("john.doe@example.com"); int rows = userMapper.insert(user); if (rows > 0) { System.out.println("User inserted successfully."); } else { System.out.println("Failed to insert user."); }
|
生成的 SQL:
1
| INSERT INTO user (name, email) VALUES (?, ?)
|
这个方法简化了插入操作的实现,使得开发者无需手动编写 SQL 语句。
2.delete
1 2 3 4 5 6 7 8
| int delete(@Param(Constants.WRAPPER) Wrapper<T> wrapper);
int deleteBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
int deleteById(Serializable id);
int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
|
功能描述
删除符合条件的记录。
返回值
int,表示删除操作影响的行数,通常为 1,表示删除成功。
参数说明
类型|参数名 |描述
Wrapper |wrapper |实体对象封装操作类(可以为 null)
Collection<? extends Serializable> |idList |主键 ID 列表(不能为 null 以及 empty)
Serializable |id| 主键 ID
Map<String, Object> columnMap |表字段| map 对象
示例
delete:
1 2 3 4 5 6 7 8 9
| QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.gt("age", 25); int rows = userMapper.delete(queryWrapper); if (rows > 0) { System.out.println("Users deleted successfully."); } else { System.out.println("No users deleted."); }
|
生成的 SQL:
1
| DELETE FROM user WHERE age > 25
|
deleteBatchIds:
1 2 3 4 5 6 7 8
| List<Integer> ids = Arrays.asList(1, 2, 3); int rows = userMapper.deleteBatchIds(ids); if (rows > 0) { System.out.println("Users deleted successfully."); } else { System.out.println("No users deleted."); }
|
生成的 SQL:
1
| DELETE FROM user WHERE id IN (1, 2, 3)
|
deleteById:
1 2 3 4 5 6 7 8
| int userId = 1; int rows = userMapper.deleteById(userId); if (rows > 0) { System.out.println("User deleted successfully."); } else { System.out.println("No user deleted."); }
|
生成的 SQL:
1
| DELETE FROM user WHERE id = 1
|
deleteByMap:
1 2 3 4 5 6 7 8 9
| Map<String, Object> columnMap = new HashMap<>(); columnMap.put("age", 30); int rows = userMapper.deleteByMap(columnMap); if (rows > 0) { System.out.println("Users deleted successfully."); } else { System.out.println("No users deleted."); }
|
生成的 SQL:
1
| DELETE FROM user WHERE age = 30
|
这些方法提供了灵活的数据删除方式,可以根据不同的条件进行删除操作。
3.update
1 2 3 4
| int update(@Param(Constants.ENTITY) T updateEntity, @Param(Constants.WRAPPER) Wrapper<T> whereWrapper);
int updateById(@Param(Constants.ENTITY) T entity);
|
功能描述
更新符合条件的记录。
返回值
int,表示更新操作影响的行数,通常为 1,表示更新成功。
参数说明
类型 | 参数名 | 描述 |
---|
T | entity | 实体对象 (set 条件值,可为 null) |
Wrapper | updateWrapper | 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句) |
示例
update:
1 2 3 4 5 6 7 8 9 10 11
| UpdateWrapper<User> updateWrapper = new UpdateWrapper<>(); updateWrapper.gt("age", 25); User updateUser = new User(); updateUser.setEmail("new.email@example.com"); int rows = userMapper.update(updateUser, updateWrapper); if (rows > 0) { System.out.println("Users updated successfully."); } else { System.out.println("No users updated."); }
|
生成的 SQL:
1
| UPDATE user SET email = ? WHERE age > 25
|
updateById:
1 2 3 4 5 6 7 8 9 10
| User updateUser = new User(); updateUser.setId(1); updateUser.setEmail("new.email@example.com"); int rows = userMapper.updateById(updateUser); if (rows > 0) { System.out.println("User updated successfully."); } else { System.out.println("No user updated."); }
|
生成的 SQL:
1
| UPDATE user SET email = ? WHERE id = 1
|
这些方法提供了灵活的数据更新方式,可以根据不同的条件进行更新操作。
4.select
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| T selectById(Serializable id);
T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);
List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);
List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
IPage<T> selectPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
IPage<Map<String, Object>> selectMapsPage(IPage<T> page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
Integer selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
|
功能描述
查询符合条件的记录。
返回值
查询结果,可能是实体对象、Map 对象或其他类型。
参数说明
类型| 参数名 |描述
Serializable |id |主键 ID
Wrapper |queryWrapper |实体对象封装操作类(可以为 null)
Collection<? extends Serializable> |idList |主键 ID 列表(不能为 null 以及 empty)
Map<String, Object> |columnMap| 表字段 map 对象
IPage| page| 分页查询条件(可以为 RowBounds.DEFAULT)
示例
selectById:
1 2 3 4
| int userId = 1; User user = userMapper.selectById(userId); System.out.println("User: " + user);
|
生成的 SQL:
1
| SELECT * FROM user WHERE id = 1
|
selectOne:
1 2 3 4 5
| QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.gt("age", 25); User user = userMapper.selectOne(queryWrapper); System.out.println("User: " + user);
|
生成的 SQL:
1
| SELECT * FROM user WHERE age > 25
|
selectBatchIds:
1 2 3 4 5 6
| List<Integer> ids = Arrays.asList(1, 2, 3); List<User> users = userMapper.selectBatchIds(ids); for (User u : users) { System.out.println("User: " + u); }
|
生成的 SQL:
1
| SELECT * FROM user WHERE id IN (1, 2, 3)
|
selectList:
1 2 3 4 5 6 7
| QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.gt("age", 25); List<User> users = userMapper.selectList(queryWrapper); for (User u : users) { System.out.println("User: " + u); }
|
生成的 SQL:
1
| SELECT * FROM user WHERE age > 25
|
selectByMap:
1 2 3 4 5 6 7 8 9 10 11
| Map<String, Object> columnMap = new HashMap<>(); columnMap.put("age", 30); List<User> users = userMapper.selectByMap(columnMap); for (User u : users) { System.out.println("User: " + u); } ```sql 生成的 SQL: ```sql SELECT * FROM user WHERE age > 30
|
selectMaps:
1 2 3 4 5 6 7
| QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.gt("age", 25); List<Map<String, Object>> userMaps = userMapper.selectMaps(queryWrapper); for (Map<String, Object> userMap : userMaps) { System.out.println("User Map: " + userMap); }
|
生成的 SQL:
1
| SELECT * FROM user WHERE age > 25
|
selectObjs:
1 2 3 4 5 6 7
| QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.gt("age", 25); List<Object> userIds = userMapper.selectObjs(queryWrapper); for (Object userId : userIds) { System.out.println("User ID: " + userId); }
|
生成的 SQL:
1
| SELECT id FROM user WHERE age > 25
|
selectPage:
1 2 3 4 5 6 7 8 9 10 11
| IPage<User> page = new Page<>(1, 10); QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.gt("age", 25); IPage<User> userPage = userMapper.selectPage(page, queryWrapper); List<User> userList = userPage.getRecords(); long total = userPage.getTotal(); System.out.println("Total users (age > 25): " + total); for (User user : userList) { System.out.println("User: " + user); }
|
生成的 SQL:
1
| SELECT * FROM user WHERE age > 25 LIMIT 10 OFFSET 0
|
selectMapsPage:
1 2 3 4 5 6 7 8 9 10 11
| IPage<Map<String, Object>> = new Page<>(1, 10); QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.gt("age", 25); IPage<Map<String, Object>> userPageMaps = userMapper.selectMapsPage(page, queryWrapper); List<Map<String, Object>> userMapList = userPageMaps.getRecords(); long total = userPageMaps.getTotal(); System.out.println("Total users (age > 25): " + total); for (Map<String, Object> userMap : userMapList) { System.out.println("User Map: " + userMap); }
|
生成的 SQL:
1
| SELECT * FROM user WHERE age > 25 LIMIT 10 OFFSET 0
|
selectCount:
1 2 3 4 5
| QueryWrapper<User> queryWrapper = new QueryWrapper<>(); queryWrapper.gt("age", 25); Integer totalUsers = userMapper.selectCount(queryWrapper); System.out.println("Total users (age > 25): " + totalUsers);
|
生成的 SQL:
1
| SELECT COUNT(*) FROM user WHERE age > 25
|
这些方法提供了灵活的数据查询方式,可以根据不同的条件进行查询操作,包括单条记录查询、批量查询、条件查询、分页查询等。