前言
众所周知,MyBatis-Plus是对MyBatis的功能的强化,而其较为重要的强化便是BaseMapper类中的各单表操作的方法,极大的改善了对数据库的单表操作,简化了代码,所以对于这些方法的掌握还是很重要的
首先奉上方法预览
public interface BaseMapper<T> extends Mapper<T> {
int insert(T entity);
int deleteById(Serializable id);
int deleteByMap(@Param("cm") Map<String, Object> columnMap);
int delete(@Param("ew") Wrapper<T> queryWrapper);
int deleteBatchIds(@Param("coll") Collection<? extends Serializable> idList);
int updateById(@Param("et") T entity);
int update(@Param("et") T entity, @Param("ew") Wrapper<T> updateWrapper);
T selectById(Serializable id);
List<T> selectBatchIds(@Param("coll") Collection<? extends Serializable> idList);
List<T> selectByMap(@Param("cm") Map<String, Object> columnMap);
T selectOne(@Param("ew") Wrapper<T> queryWrapper);
Integer selectCount(@Param("ew") Wrapper<T> queryWrapper);
List<T> selectList(@Param("ew") Wrapper<T> queryWrapper);
List<Map<String, Object>> selectMaps(@Param("ew") Wrapper<T> queryWrapper);
List<Object> selectObjs(@Param("ew") Wrapper<T> queryWrapper);
<P extends IPage<T>> P selectPage(P page, @Param("ew") Wrapper<T> queryWrapper);
<P extends IPage<Map<String, Object>>> P selectMapsPage(P page, @Param("ew") Wrapper<T> queryWrapper);
}
首先创建一张User表
//User实体类
@Data
public class User {
@TableId(type = IdType.AUTO)//设置id自增长
private Long id;
private String name;
private Integer age;
private String email;
}
1.插入操作
public void testInsert(){
User user = new User();
user.setName("11");
user.setAge(21);
user.setEmail("22@qq.com");
int result = userMapper.insert(user);//result是方法影响的行数
}
2.更新操作
- 根据Id更新
public void testUpdate1(){
User user = new User();
user.setId(6L); //更新的条件
user.setAge(21); //需要更新的字段
//根据id更新,更新的字段是不为null的字段
userMapper.updateById(user);
//该方法会根据id自动去修改除id外被设置的字段的值
}
- 根据条件更新(QueryWrapper)
public void testUpdate2(){
User user = new User();
user.setAge(30); //设置需要更新的字段
//更新的条件
QueryWrapper<User> wrapper = new QueryWapper<>();
wapper.eq("id",6);
//执行更新操作
int result = userMapper.update(user,wrapper);
}
- 根据条件更新(UpdageWrapper)
public void testUpdate3(){
//更新的条件以及字段
UpdateWrapper<User> wrapper = new UpdateWapper<>();
wrapper.eq("id",6).set("age",23);
//eq方法里对应的是更新的条件
//set方法里对应的是更新的字段
//对应的sql语句为UPDATE user SET age=? WHERE id = ?
//执行更新操作
int result = userMapper.update(null,wrapper);
}
3.删除操作
- 根据id删除
public void testDelete1(){
int result = userMapper.deleteById(6L);
}
- 根据组合条件删除
public void testDelete2(){
Map<String,Object> map = new HashMap<>();
//设置删除的条件
map.put("age",20);
map.put("name","张三");
//将map中的元素设置为删除的条件,多个元素之间在sql语句中的关系为and
int result = userMapper.deleteByMap(map);
}
- 将实体对象包装为操作条件(推荐,因为不需要写字段名称)
public void testDelete3(){
User user = new User();
user.setAge(20);
user.setName("张三");
//将实体对象进行包装,包装为删除条件
QueryWrapper<User> wrapper = new QueryWrapper<>(User);
int result = userMapper.delete(wrapper);
}
- 根据id集合批量删除
public void testDelete4(){
int result = userMapper.deleteBatchIds(Arrays.asList(1L,10L,20L));
}
4.查询操作
- 根据id查询
public void testSelect1(){
User user = userMapper.selectById(2L);
}
- 根据id批量查询
public void testSelect2(){
List<User> userList = userMapper.selectBatchIds(Arrays.asList(2L,3L,10L));
for(User user : userList){
System.out.println(user);
}
}
- 根据实体条件查询一条记录
public void testSelect4(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name","李四");
//根据条件查询一条数据,如果超过会报错
User user = userMapper.selectOne(wrapper);
}
- 根据Wrapper条件查询总记录数
public void testSelect5(){
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.gt("age",23); //年龄大于23岁
//根据条件查询总记录数
Integer count = userMapper.selectCount(wrapper);
}
- 根据实体条件,查询全部记录
public void testSelect6(){
QueryWrapper<User> wrapper = new QueryWrapper<User>();
wrapper.gt("age",23); //年龄大于23岁
//根据条件查询数据
List<User> userList = userMapper.selectList(wrapper);
for(User user : userList){
System.out.println(user);
}
}
- 根据实体条件查询全部记录,并分页
//首先创建一个配置类,配置分页插件
@Configuration
@MapperScan("mapper路径")
public class MybatisPlusConfig{
@Bean
public PaginationInterceptor PaginationInterceptor {
return new PaginationInterceptor();
}
}
//再进行相应操作
public class UserMapperTest{
@Resource
private UserMapper userMapper;
@Test
public void testSelect7(){
QueryWrapper<User> wrapper = new QueryWrapper<User>();
wrapper.gt("age",23);//条件
Page<User> page = new Page<>(1,1);
//这里的1,1是指查询第1页,查询1条数据,即每页1条数据
//根据条件查询数据
IPage<User> iPage = userMapper.selectPage(page,wrapper);
}
}