MyBatis-Plus
(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。
官网 https://mp.baomidou.com/
MP提供了很多常用的CRUD接口可以帮助我们提升开发效率。
今天试了下,确实不错 列举几个不错的方法记录下方便日后查阅同时给需要的朋友提供下demo。
诸如insert deleteById selctById 此类 常见的就不列举了
可直接根据列名删除某条数据
/**
*
* 根据 columnMap 条件,删除记录
*
*
* @param columnMap 表字段 map 对象
* @return 删除成功记录数
*/
int deleteByMap(@Param(Constants.COLUMN_MAP) Map columnMap);
示例
//删除name列为马冬梅的数据 如果存在重名 会一起删除
Map columnMap = new HashMap<>();
columnMap.put("name","马冬梅");
userMapper.deleteByMap(columnMap);
条件删除,厉害了...
/**
*
* 根据 entity 条件,删除记录
*
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
* @return 删除成功记录数
*/
int delete(@Param(Constants.WRAPPER) Wrapper queryWrapper);
示例
/*
个别参数说明:
params : key为数据库字段名,value为字段值
null2IsNull : 为true则在map的value为null时调用 isNull 方法
DELETE FROM user WHERE email IS NULL
为false时则忽略value为null的 慎用..
DELETE FROM user
*/
Map columnMap = new HashMap<>();
columnMap.put("email",null);
userMapper.delete(new QueryWrapper().allEq(columnMap,false));
批量删除,没啥好说的
/**
*
* 删除(根据ID 批量删除)
*
*
* @param idList 主键ID列表(不能为 null 以及 empty)
* @return 删除成功记录数
*/
int deleteBatchIds(@Param(Constants.COLLECTION) Collection extends Serializable> idList);
示例
/**
* 批量删除
* Collection集合
* DELETE FROM user WHERE id IN ( ? , ? , ? )
* Parameters: 9(Integer), 10(Integer), 11(Integer)
*/
Listlists = new ArrayList<>();
lists.add(9);lists.add(10);lists.add(11);
userMapper.deleteBatchIds(lists);
/**
*
* 根据 whereEntity 条件,更新记录
*
*
* @param entity 实体对象 (set 条件值,不能为 null)
* @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)
* @return 修改成功记录数
*/
int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper updateWrapper);
示例
/**
*
* 无condition 默认为true
false会修改全局
* SELECT id,name,age,email FROM user WHERE name = ?
* UPDATE user SET name=?, age=?, email=? WHERE age = ?
* true
* UPDATE user SET name=?, age=?, email=? WHERE age = ?
* false
* UPDATE user SET name=?, age=?, email=?
*/
User user = userMapper.selectOne(
new QueryWrapper().eq(true,"name","xiaoming"));
user.setName("zgr");
user.setEmail("[email protected]");
userMapper.update(
user,
new UpdateWrapper().eq(true,"age",user.getAge()));
批量查找, 也经常用到
/**
*
* 查询(根据ID 批量查询)
*
*
* @param idList 主键ID列表(不能为 null 以及 empty)
* @return 实体集合
*/
List selectBatchIds(@Param(Constants.COLLECTION) Collection extends Serializable> idList);
示例
/**
* 批量查找
* SELECT id,name,age,email FROM user WHERE id IN ( ? , ? , ? )
* Parameters: 1(Integer), 2(Integer), 3(Integer)
*/
Listlist = new ArrayList();
list.add(1);list.add(2);list.add(3);
ListusersList = userMapper.selectBatchIds(list);
usersList.forEach(System.out::println);
条件查找 正常还得多写个方法 mp一行搞定
/**
*
* 查询(根据 columnMap 条件)
*
*
* @param columnMap 表字段 map 对象
* @return 实体集合
*/
List selectByMap(@Param(Constants.COLUMN_MAP) Map columnMap);
示例
Map columnMap= new HashMap<>();
columnMap.put("age",20);
/**
* 查出age为20用户
* SELECT id,name,age,email FROM user WHERE age = ?
* Parameters: 20(Integer)
*/
ListusersList = userMapper.selectByMap(columnMap);
usersList.forEach(System.out::println);
同理
统计符合条件数据数
/**
*
* 根据 Wrapper 条件,查询总记录数
*
*
* @param queryWrapper 实体对象
* @return 满足条件记录数
*/
Integer selectCount(@Param(Constants.WRAPPER) Wrapper queryWrapper);
示例
/**
* 统计符合条件数据数
* SELECT COUNT(1) FROM user WHERE age > ?
* Parameters: 20(Integer)
*/
System.out.println(
userMapper.selectCount(new QueryWrapper().gt("age",20)));
/**
*
* 根据 entity 条件,查询全部记录
*
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
* @return 实体集合
*/
List selectList(@Param(Constants.WRAPPER) Wrapper queryWrapper);
示例
/**
* 针对某列进行查询
* conditon为true时 column即作为查询条件
* SELECT id,name,age,email FROM user WHERE name = ?
* Parameters: null
* conditon为false时
* SELECT id,name,age,email FROM user
*/
Listlist = userMapper.selectList(
new QueryWrapper().eq(true,"age",20));
list.forEach(System.out::println);
获取符合条件的字段值 即 column 和 value
/**
*
* 根据 Wrapper 条件,查询全部记录
*
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
* @return 字段映射对象 Map 集合
*/
List
/**
*
* 根据 Wrapper 条件,查询全部记录
* 注意: 只返回第一个字段的值
*
*
* @param queryWrapper 实体对象封装操作类(可以为 null)
* @return 字段映射对象集合
*/
List
分页~
/**
*
* 根据 entity 条件,查询全部记录(并翻页)
*
*
* @param page 分页查询条件(可以为 RowBounds.DEFAULT)
* @param queryWrapper 实体对象封装操作类(可以为 null)
* @return 实体分页对象
*/
IPage selectPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
示例
/**
* SELECT COUNT(1) FROM user WHERE age > ?
* 13(Integer)
* 查出第三页 每页显示三条
* SELECT id,name,age,email FROM user WHERE age > ? LIMIT ?,?
*/
IPage iPage = userMapper.selectPage(
new Page<>(3, 3),new QueryWrapper().gt(true,"age",13));
Listusers = iPage.getRecords();
users.forEach(System.out::println);
System.out.println(iPage.getTotal());//共有数据量
System.out.println(iPage.getCurrent());//当前页码
System.out.println(iPage.getPages());//共有几页
System.out.println(iPage.getSize());//每页显示几条
同selectMaps 只获取键值
/**
*
* 根据 Wrapper 条件,查询全部记录(并翻页)
*
*
* @param page 分页查询条件
* @param queryWrapper 实体对象封装操作类
* @return 字段映射对象 Map 分页对象
*/
IPage> selectMapsPage(IPage page, @Param(Constants.WRAPPER) Wrapper queryWrapper);
示例
IPage>mapIPage =
userMapper.selectMapsPage(
new Page<>(3, 3),new QueryWrapper().gt(true,"age",13));
List>mapList = mapIPage.getRecords();
for (int i = 0; i map= mapList.get(i);
SetstringSet = map.keySet();
Iterator iterator = stringSet.iterator();
while (iterator.hasNext()){
String column = (String)iterator.next();
System.out.println(column + "<<<字段 值>>>"+ map.get(column));
}
}
这些方式组合起来可以解决平时好多不必要的操作,此处只是列举了Mapper的通用接口 还有Service
还有很多强大的功能 需要的朋友还请移步官网
https://mp.baomidou.com/
项目地址
https://github.com/bnseed9527/mybatisplus