目录
一、BaseMapper
二、常用实例
1、插入
2、删除
3、修改
4、查询
三、IService
四、 IService中的一些方法测试
一、BaseMapper
MyBatis-Plus中的基本CRUD在内置的BaseMapper中都已得到了实现,我们可以直接使用,接口如 下:
public interface BaseMapper<T> extends Mapper<T> {/*** 插入一条记录** @param entity 实体对象*/int insert(T entity);/*** 根据 ID 删除** @param id 主键ID*/int deleteById(Serializable id);/*** 根据实体(ID)删除** @param entity 实体对象* @since 3.4.4*/int deleteById(T entity);/*** 根据 columnMap 条件,删除记录** @param columnMap 表字段 map 对象*/int deleteByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);/*** 根据 entity 条件,删除记录** @param queryWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)*/int delete(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 删除(根据ID或实体 批量删除)** @param idList 主键ID列表或实体列表(不能为 null 以及 empty)*/int deleteBatchIds(@Param(Constants.COLLECTION) Collection<?> idList);/*** 根据 ID 修改** @param entity 实体对象*/int updateById(@Param(Constants.ENTITY) T entity);/*** 根据 whereEntity 条件,更新记录** @param entity 实体对象 (set 条件值,可以为 null)* @param updateWrapper 实体对象封装操作类(可以为 null,里面的 entity 用于生成 where 语句)*/int update(@Param(Constants.ENTITY) T entity, @Param(Constants.WRAPPER) Wrapper<T> updateWrapper);/*** 根据 ID 查询** @param id 主键ID*/T selectById(Serializable id);/*** 查询(根据ID 批量查询)** @param idList 主键ID列表(不能为 null 以及 empty)*/List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection<? extends Serializable> idList);/*** 查询(根据 columnMap 条件)** @param columnMap 表字段 map 对象*/List<T> selectByMap(@Param(Constants.COLUMN_MAP) Map<String, Object> columnMap);/*** 根据 entity 条件,查询一条记录* <p>查询一条记录,例如 qw.last("limit 1") 限制取一条记录, 注意:多条数据会报异常</p>** @param queryWrapper 实体对象封装操作类(可以为 null)*/default T selectOne(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper) {List<T> ts = this.selectList(queryWrapper);if (CollectionUtils.isNotEmpty(ts)) {if (ts.size() != 1) {throw ExceptionUtils.mpe("One record is expected, but the query result is multiple records");}return ts.get(0);}return null;}/*** 根据 Wrapper 条件,判断是否存在记录** @param queryWrapper 实体对象封装操作类* @return*/default boolean exists(Wrapper<T> queryWrapper) {Long count = this.selectCount(queryWrapper);return null != count && count > 0;}/*** 根据 Wrapper 条件,查询总记录数** @param queryWrapper 实体对象封装操作类(可以为 null)*/Long selectCount(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 根据 entity 条件,查询全部记录** @param queryWrapper 实体对象封装操作类(可以为 null)*/List<T> selectList(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 根据 Wrapper 条件,查询全部记录** @param queryWrapper 实体对象封装操作类(可以为 null)*/List<Map<String, Object>> selectMaps(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 根据 Wrapper 条件,查询全部记录* <p>注意: 只返回第一个字段的值</p>** @param queryWrapper 实体对象封装操作类(可以为 null)*/List<Object> selectObjs(@Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 根据 entity 条件,查询全部记录(并翻页)** @param page 分页查询条件(可以为 RowBounds.DEFAULT)* @param queryWrapper 实体对象封装操作类(可以为 null)*/<P extends IPage<T>> P selectPage(P page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);/*** 根据 Wrapper 条件,查询全部记录(并翻页)** @param page 分页查询条件* @param queryWrapper 实体对象封装操作类*/<P extends IPage<Map<String, Object>>> P selectMapsPage(P page, @Param(Constants.WRAPPER) Wrapper<T> queryWrapper);
}
二、常用实例
1、插入
@Test
public void testInsert(){
User user = new User(null, "张三", 23, "zhangsan@qcby.com");
//INSERT INTO user ( id, name, age, email ) VALUES ( ?, ?, ?, ? )
int result = userMapper.insert(user);
System.out.println("受影响行数:"+result);
System.out.println("id自动获取:"+user.getId());
}
最终执行的结果,所获取的id可能并不是递增的。
这是因为MyBatis-Plus在实现插入数据时,会默认基于雪花算法的策略生成id
mybatis-plus:global-config:db-config:id-type: auto
可以通过修改配置来实现添加的id递增
2、删除
id删除
@Test
public void testDeleteById(){
//通过id删除用户信息
//DELETE FROM user WHERE id=?
int result = userMapper.deleteById(1475754982694199298L);
System.out.println("受影响行数:"+result);
}
id批量删除
@Test
public void testDeleteBatchIds(){
//通过多个id批量删除
//DELETE FROM user WHERE id IN ( ? , ? , ? )
List<Long> idList = Arrays.asList(1L, 2L, 3L);
int result = userMapper.deleteBatchIds(idList);
System.out.println("受影响行数:"+result);
}
map删除
@Test
public void testDeleteByMap(){
//根据map集合中所设置的条件删除记录
//DELETE FROM user WHERE name = ? AND age = ?
Map<String, Object> map = new HashMap<>();
map.put("age", 23);
map.put("name", "张三");
int result = userMapper.deleteByMap(map);
System.out.println("受影响行数:"+result);
}
3、修改
@Test
public void testUpdateById(){
User user = new User(4L, "admin", 22, null);
//UPDATE user SET name=?, age=? WHERE id=?
int result = userMapper.updateById(user);
System.out.println("受影响行数:"+result);
}
4、查询
根据id查询用户信息
@Test
public void testSelectBatchIds(){
//根据多个id查询多个用户信息
//SELECT id,name,age,email FROM user WHERE id IN ( ? , ? )
List<Long> idList = Arrays.asList(4L, 5L);
List<User> list = userMapper.selectBatchIds(idList);
list.forEach(System.out::println);
}
ids查询多个
@Test
public void testSelectById(){
//根据id查询用户信息
//SELECT id,name,age,email FROM user WHERE id=?
User user = userMapper.selectById(4L);
System.out.println(user);
}
map查询
@Test
public void testSelectByMap(){
//通过map条件查询用户信息
//SELECT id,name,age,email FROM user WHERE name = ? AND age = ?
Map<String, Object> map = new HashMap<>();
map.put("age", 22);
map.put("name", "admin");
List<User> list = userMapper.selectByMap(map);
list.forEach(System.out::println);
}
查所有
@Test
public void testSelectList(){
//查询所有用户信息
//SELECT id,name,age,email FROM user
List<User> list = userMapper.selectList(null);
list.forEach(System.out::println);
}
三、IService
MyBatis-Plus中有一个接口 IService和其实现类 ServiceImpl,封装了常见的业务层逻辑
四、 IService中的一些方法测试
查总数
//count@Testpublic void test1(){Long count = userService.count();System.out.println(count);}
插入一条记录(选择字段,策略插入)
//插入一条记录(选择字段,策略插入)@Testpublic void test2(){User user = new User();user.setName("zhangsan");user.setAge(22);user.setEmail("qq.com");boolean result = userService.save(user);System.out.println(result);}
插入(批量)
@Testpublic void test3(){User user = new User();user.setName("zhangsan3");user.setAge(33);user.setEmail("11qq.com");User user2 = new User();user2.setName("zhangsan4");user2.setAge(44);user2.setEmail("22qq.com");List<User> a = new ArrayList<>();a.add(user);a.add(user2);boolean res = userService.saveBatch(a,1);System.out.println(res);}
这个需要认真理解
//批量修改插入//根据id找,找到的修改,其他添加@Testpublic void test4(){//修改zhangsanUser user = new User();user.setName("zhangsanUP");user.setAge(33);user.setEmail("Update@qq.com");user.setId(7);//添加zhangsan5User user2 = new User();user2.setName("zhangsan5");user2.setAge(55);user2.setEmail("55.com");//user2.setId(15);List<User> a = new ArrayList<>();a.add(user);a.add(user2);boolean res = userService.saveOrUpdateBatch(a);System.out.println(res);}
//根据 ID 删除@Testpublic void test5(){boolean res = userService.removeById(11);System.out.println(res);}//根据 columnMap 条件,删除记录@Testpublic void test6(){Map<String,Object> map = new HashMap<>();map.put("age",33);boolean res = userService.removeByMap(map);System.out.println(res);}//根据 entity 条件,删除记录@Testpublic void test7(){QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.le("age",12);boolean res = userService.remove(queryWrapper);System.out.println(res);}//删除(根据ID 批量删除)@Testpublic void test8(){List<Integer> idList = new ArrayList<>();idList.add(1);idList.add(2);boolean res = userService.removeByIds(idList);System.out.println(res);}//JDBC批量提交是指将多条SQL语句组合成一个批处理,然后一次性提交给数据库执行。// 这可以显著提高性能,特别是在处理大量插入、更新或删除操作时。//根据 ID 选择修改@Testpublic void test9(){User user2 = new User();user2.setName("zhangsanUP");user2.setAge(555);user2.setEmail("55up.com");user2.setId(12);boolean res = userService.updateById(user2);System.out.println(res);}//根据 UpdateWrapper 条件,更新记录 需要设置sqlset@Testpublic void test10(){UpdateWrapper<User> updateWrapper = new UpdateWrapper();updateWrapper.set("name","updatewrapper").set("age",12).like("name","zhang");boolean res = userService.update(updateWrapper);System.out.println(res);}//根据ID 批量更新@Testpublic void test11(){User user1 = new User();user1.setName("zhangsan1");user1.setAge(555);user1.setEmail("55up.com");user1.setId(9);User user2 = new User();user2.setName("zhangsanUP2");user2.setAge(555);user2.setEmail("55up.com");user2.setId(12);List<User> a = new ArrayList<>();a.add(user1);a.add(user2);boolean res = userService.updateBatchById(a);System.out.println(res);}//根据 ID 查询@Testpublic void test13(){User res = userService.getById(12);System.out.println(res);}//查询(根据ID 批量查询)@Testpublic void test14(){List<Integer> idList = new ArrayList<>();idList.add(9);idList.add(12);List<User> res = userService.listByIds(idList);System.out.println(res);}//查询(根据 columnMap 条件@Testpublic void test15(){Map<String,Object> map = new HashMap<>();map.put("name","Jack");List<User> res = userService.listByMap(map);System.out.println(res);}//根据 Wrapper,查询一条记录//throwEx有多个 result 是否抛出异常//One record is expected, but the query result is multiple records//如果有多个返回第一个@Testpublic void test16(){QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.le("age",555);User res = userService.getOne(queryWrapper,false);System.out.println(res);}//根据 Wrapper 条件,查询总记录数@Testpublic void test17(){QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.le("age",100);Long res = userService.count(queryWrapper);System.out.println(res);}//查询列表@Testpublic void test18(){QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.le("age",100);List<User> res = userService.list(queryWrapper);System.out.println(res);}//查询所有@Testpublic void test19(){List<User> res = userService.list();System.out.println(res);}//查询所有id@Testpublic void test21(){List<Object> res = userService.listObjs();System.out.println(res);}//根据 Wrapper 条件,查询全部记录@Testpublic void test22(){QueryWrapper queryWrapper = new QueryWrapper();queryWrapper.le("age",100);List<Object> res = userService.listObjs(queryWrapper);System.out.println(res);}