这是我参与11月更文挑战的第3天,活动详情查看:2021最后一次更文挑战
首先说一下问什么换了新的一篇,因为,上一篇我们最开是讲了环境的准备和配置,并且查询和插入我们也只说到两个相似度比较高的函数,在前面测试代码中我们也需要用到这些简单的函数,这一篇的查询和删除我们会介绍新的函数进来,所以我将他分为两篇。
查询操作
selectById函数
通过主键查询
@Test
public void demo3(){
Employee result = employeeMapper.selectById(4);
System.out.println(result);
}
我们得到的结果
selectOne函数
这时候就有问题了,我们难道就只能主键查询吗?当然不会,我们可以把我们的查询条件封装成对象传到参数中,他会自动地将我们设置的不为空的值,作为查询条件进行查询
@Test
public void demo4(){
Employee employee=new Employee();
employee.setId(7);
employee.setName("测试1");
employee.setAge(11);
Employee result = employeeMapper.selectOne(employee);
System.out.println(result);
}
selectBatchIds函数
上面我们能输入的之就只有一个,这个方法可以通过多个Id进行查询
@Test
public void demo5(){
List<Integer> idList=new ArrayList<>();
idList.add(4);
idList.add(5);
idList.add(6);
List<Employee> employees = employeeMapper.selectBatchIds(idList);
System.out.println(employees);
}
因为我们ID没有6,所以就没有查询出结果。
selectByMap函数
大家会不会发现一件事,就是我们不管怎么查询我们都需要用到主键,那我们能不通过主键去查询吗? 那当然是可以的啊!我们通过Map封装查询条件。
@Test
public void demo6(){
Map<String,Object> map = new HashMap<>();
map.put("name","Tom");
map.put("gender",1);
List<Employee> employees = employeeMapper.selectByMap(map);
System.out.println(employees);
}
我们要注意的就是我们的键名需要和表中的名相同,不然他就会报错
删除操作
deleteById函数
大家看名字应该都知道怎么用了是吧?重复的东西我们就不过多解释了。
deleteByMap函数
上面的函数还是通过主键去删除,而这个函数可以根据其他的值进行删除
@Test
public void demo8(){
Map<String,Object> map = new HashMap<>();
map.put("name","测试2");
map.put("email","测试2邮箱");
Integer result = employeeMapper.deleteByMap(map);
System.out.println(result);
}
我们刚刚添加的四条测试数据已经被删除
deleteBatchIds函数
这个函数在上面也有相同的类型,通过主键批量的去删除数据
作者小结
两片文章讲述了一下通过MybatiesPlus对数据库的基本操作,我们没有写任何的SQL语句,但是完成了对数据库的操作,这也是体现了MP的好用;但是还有一些问题我们没有去解决
就是我刚刚也阐述到我们已经对数据库进行操作了,但是我们没有写任何的SQL;xxxMapper 继承了 BaseMapper, BaseMapper 中提供了通用的 CRUD 方法,
方法来源于 BaseMapper, 有方法就必须有 SQL, 因为 MyBatis 最终还是需要通过SQL 语句操作数据;这个道理我想大家应该是明白的
我们就以一个简单的deleteById函数为例
首先我们要知道的employeeMapper 的本质 org.apache.ibatis.binding.MapperProxy
MapperProxy 中 sqlSession –>SqlSessionFactory
SqlSessionFacotry 中 → Configuration→ MappedStatements 每一个 mappedStatement 都表示 Mapper 接口中的一个方法与 Mapper 映射文件中的一个 SQL;MP 在启动就会挨个分析 xxxMapper 中的方法,并且将对应的 SQL 语句处理好,保存到 configuration 对象中的 mappedStatements 中。
Configuration: MyBatis 或者 MP 全局配置对象
MappedStatement:一个 MappedStatement 对象对应 Mapper 配置文件中的一个
select/update/insert/delete 节点,主要描述的是一条 SQL 语句
SqlMethod : 枚举对象 ,MP 支持的 SQL 方法
TableInfo:数据库表反射信息 ,可以获取到数据库表相关的信息
SqlSource: SQL 语句处理对象
MapperBuilderAssistant: 用于缓存、SQL 参数、查询方剂结果集处理等.
通过 MapperBuilderAssistant 将每一个 mappedStatement
添加到 configuration 中的 mappedstatements 中