Mybatis Plus
练习代码:
https://blog.csdn.net/v3424/article/details/122043351
Mybatis Plus学习及入门(附代码)一
https://blog.csdn.net/v3424/article/details/122043351
4. Mybatis Plus 基本操作
4.1 常见API方法
BaseMapper 封装CRUD操作,泛型 T
为任意实体对象
-
增删改
方法名 描述 int insert(T entity) 插入一条记录,entity 为 实体对象 int delete(Wrapper wrapper) 根据 entity 条件,删除记录,wrapper 可以为 null int deleteBatchIds(Collection idList) 根据ID 批量删除 int deleteById(Serializable id) 根据 ID 删除 int deleteByMap(Map<String, Object> map) 根据 columnMap 条件,删除记录 int update(T entity, Wrapper updateWrapper) 根据 whereEntity 条件,更新记录 int updateById(T entity); 根据 ID 修改 -
查询
方法名 描述 T selectById(Serializable id) 根据 ID 查询 T selectOne(Wrapper queryWrapper) 根据 entity 条件,查询一条记录 List selectBatchIds(Collection idList) 根据ID 批量查询 List selectList(Wrapper queryWrapper) 根据 entity 条件,查询全部记录 List selectByMap(Map<String, Object> columnMap) 根据 columnMap 条件 List<Map<String, Object>> selectMaps(Wrapper queryWrapper) 根据 Wrapper 条件,查询全部记录 List selectObjs( Wrapper queryWrapper) 根据 Wrapper 条件,查询全部记录。注意: 只返回第一个字段的值 IPage selectPage(IPage page, Wrapper queryWrapper) 根据 entity 条件,查询全部记录(并翻页) IPage<Map<String, Object>> selectMapsPage(IPage page, Wrapper queryWrapper) 根据 Wrapper 条件,查询全部记录(并翻页) Integer selectCount(@Param(Constants.WRAPPER) Wrapper queryWrapper) 根据 Wrapper 条件,查询总记录数
4.2 添加操作(insert)
/**
* 添加数据
*/
@Test
public void testInsert() {
Customer customer = new Customer();
customer.setCid(5);
customer.setCname("张三");
customer.setPassword("6666");
int i = customerDao.insert(customer);
System.out.println(i);
}
- 获得自动增长列信息
/** * 添加数据 */ @Test public void testInsert() { Customer customer = new Customer(); customer.setCname("张三"); customer.setPassword("6666"); int i = customerDao.insert(customer); System.out.println(i); }
4.3 更新和更新所有
- 通过id更新
/** * 更新数据 */ @Test public void testUpdate() { Customer customer = new Customer(); customer.setCid(4); customer.setCname("张三"); customer.setPassword("6666"); // 需要给Customer设置@TableId customerDao.updateById(customer); }
- 更新所有
@Test public void testUpdate2() { Customer customer = new Customer(); customer.setCname("张三"); customer.setPassword("777"); // 更新所有 customerMapper.update(customer,null); }
4.4 删除和批量删除
- 根据id进行删除
/** * 删除数据 */ @Test public void testDelete() { // 需要给Customer设置@TableId customerDao.deleteById(4); }
- 批量删除
/** * 批量删除 */ @Test public void testDeleteBath() { // 需要给Customer设置@TableId customerDao.deleteBatchIds(Arrays.asList(4, 5)); }
* 5. 查询操作
5.1 Map条件查询
/**
* Map条件查询
*/
@Test
public void testSelectMap() {
HashMap<String, Object> map = new HashMap<>();
map.put("cname", "张三");
List<Customer> list = customerDao.selectByMap(map);
list.forEach(System.out::println);
}
5.2 QueryWrapper
5.2.1 Wrapper介绍
结构图:
-
Wrapper : 条件构造抽象类,最顶端父类
- AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
- QueryWrapper : Entity 对象封装操作类,不是用lambda语法
- UpdateWrapper : Update 条件封装,用于Entity对象更新操作
- AbstractLambdaWrapper : Lambda 语法使用 Wrapper统一处理解析 lambda 获取 column。
- LambdaQueryWrapper :看名称也能明白就是用于Lambda语法使用的查询Wrapper
- LambdaUpdateWrapper : Lambda 更新封装Wrapper
- AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
-
如果想进行复杂条件查询,那么需要使用条件构造器 Wapper,涉及到如下方法
selectOne
,selectCount
,selectList
,selectMaps
,selectObjs
,update
,delete
- 拼凑条件相关关键字
查询方式 说明 setSqlSelect 设置 SELECT 查询字段 where WHERE 语句,拼接 + WHERE 条件 and AND 语句,拼接 + AND 字段=值 andNew AND 语句,拼接 + AND (字段=值) or OR 语句,拼接 + OR 字段=值 orNew OR 语句,拼接 + OR (字段=值) eq 等于= allEq 基于 map 内容等于= ne 不等于<> gt 大于> ge 大于等于>= lt 小于< le 小于等于<= like 模糊查询 LIKE notLike 模糊查询 NOT LIKE in IN 查询 notIn NOT IN 查询 isNull NULL 值查询 isNotNull IS NOT NULL groupBy 分组 GROUP BY having HAVING 关键词 orderBy 排序 ORDER BY orderAsc ASC 排序 ORDER BY orderDesc DESC 排序 ORDER BY exists EXISTS 条件语句 notExists NOT EXISTS 条件语句 between BETWEEN 条件语句 notBetween NOT BETWEEN 条件语句 addFilter 自由拼接 SQL last 拼接在最后,例如:last(“LIMIT 1”)
5.2.2 条件查询
- 基本多条件查询
@Test public void testQueryWrapper() { QueryWrapper<Customer> queryWrapper = new QueryWrapper<>(); //TODO:等值查询 queryWrapper.eq("password", "1234"); //TODO:模糊查询 queryWrapper.like("cname", "o"); //TODO:范围查询 queryWrapper.ge("money", 800); queryWrapper.le("money", 2000); List<Customer> list = customerDao.selectList(queryWrapper); list.forEach(System.out::println); }
- 条件判断
@Test public void testQueryWrapper2() { CustomerVo vo = new CustomerVo("o", "1234", "800", "2000"); QueryWrapper<Customer> queryWrapper = new QueryWrapper<>(); //TODO:模糊查询 queryWrapper.like(StringUtils.isNotBlank(vo.getCname()), "cname", vo.getCname()); //TODO:等值查询 queryWrapper.eq(StringUtils.isNotBlank(vo.getPassword()), "password", vo.getPassword()); //TODO:范围查询 queryWrapper.ge(StringUtils.isNotBlank(vo.getMinMoney()), "money", vo.getMinMoney()); queryWrapper.le(StringUtils.isNotBlank(vo.getMaxMoney()), "money", vo.getMaxMoney()); List<Customer> list = customerDao.selectList(queryWrapper); list.forEach(System.out::println); }
5.2.3 条件更新
- 基本更新
/** * 条件更新 */ @Test public void testUpdateByQuery() { Customer customer = new Customer(); customer.setVersion(1); UpdateWrapper<Customer> wrapper = new UpdateWrapper<>(); wrapper.in("cid", 1, 2, 3); int i = customerDao.update(customer, wrapper); System.out.println(i); }