MybaitsPlus学习笔记(二)基本CURD
目录
一、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
@Test
public void test1(){
Long count = userService.count();
System.out.println(count);
}
插入一条记录(选择字段,策略插入)
//插入一条记录(选择字段,策略插入)
@Test
public 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);
}
插入(批量)
@Test
public 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找,找到的修改,其他添加
@Test
public void test4(){
//修改zhangsan
User user = new User();
user.setName("zhangsanUP");
user.setAge(33);
user.setEmail("Update@qq.com");
user.setId(7);
//添加zhangsan5
User 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 删除
@Test
public void test5(){
boolean res = userService.removeById(11);
System.out.println(res);
}
//根据 columnMap 条件,删除记录
@Test
public void test6(){
Map<String,Object> map = new HashMap<>();
map.put("age",33);
boolean res = userService.removeByMap(map);
System.out.println(res);
}
//根据 entity 条件,删除记录
@Test
public void test7(){
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.le("age",12);
boolean res = userService.remove(queryWrapper);
System.out.println(res);
}
//删除(根据ID 批量删除)
@Test
public 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 选择修改
@Test
public 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
@Test
public 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 批量更新
@Test
public 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 查询
@Test
public void test13(){
User res = userService.getById(12);
System.out.println(res);
}
//查询(根据ID 批量查询)
@Test
public void test14(){
List<Integer> idList = new ArrayList<>();
idList.add(9);
idList.add(12);
List<User> res = userService.listByIds(idList);
System.out.println(res);
}
//查询(根据 columnMap 条件
@Test
public 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
//如果有多个返回第一个
@Test
public void test16(){
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.le("age",555);
User res = userService.getOne(queryWrapper,false);
System.out.println(res);
}
//根据 Wrapper 条件,查询总记录数
@Test
public void test17(){
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.le("age",100);
Long res = userService.count(queryWrapper);
System.out.println(res);
}
//查询列表
@Test
public void test18(){
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.le("age",100);
List<User> res = userService.list(queryWrapper);
System.out.println(res);
}
//查询所有
@Test
public void test19(){
List<User> res = userService.list();
System.out.println(res);
}
//查询所有id
@Test
public void test21(){
List<Object> res = userService.listObjs();
System.out.println(res);
}
//根据 Wrapper 条件,查询全部记录
@Test
public void test22(){
QueryWrapper queryWrapper = new QueryWrapper();
queryWrapper.le("age",100);
List<Object> res = userService.listObjs(queryWrapper);
System.out.println(res);
}