理解
MyBatis-Plus 在 MyBatis 的基础上只做增强不做改变,简化开发、提高效率,引入它不会对现有工程产生影响。
Lambda 形式调用:通过 Lambda 表达式,方便的编写各类查询条件
条件构造器用于构建复杂的数据库查询条件。Wrapper 类允许开发者以链式调用的方式构造查询条件,无需编写复杂条件。
AbstractWrapper
这是一个抽象基类,提供了所有 Wrapper 类共有的方法和属性。它定义了条件构造的基本逻辑,包括字段(column)、值(value)、操作符(condition)等。所有的 QueryWrapper、UpdateWrapper、LambdaQueryWrapper 和 LambdaUpdateWrapper 都继承AbstractWrapper。
LambdaQueryWrapper
这是一个基于 Lambda 表达式的查询条件构造器,它通过 Lambda 表达式来引用实体类的属性,从而避免了硬编码字段名。这种方式提高了代码的可读性和可维护性,尤其是在字段名可能发生变化的情况下。
自己构造出wrapper查询条件,然后把这个条件对象传给持久层方法。这里是进行员工列表的查询。
.select查询的字段,例:Emp::getId表示通过底层反射机制对Emp实体类中getId方法的引用。
.like模糊匹配,
.ge字段大于或等于某个值
@Test
void testLamdaWapper(){
LambdaQueryWrapper<Emp> wrapper = new LambdaQueryWrapper<>();
wrapper.select(Emp::getId,Emp::getUsername,Emp::getGender)
.like(Emp::getUsername,"o")
.ge(Emp::getJob,2);
List<Emp> emps = empMapper.selectList(wrapper);
emps.forEach(System.out::println);
}
List<Emp> emps = empMapper.selectList(wrapper);将查询对象封装到列表,最后遍历。
LambdaUpdateWrapper同理
.eq设置要更新的条件,通过链式设置以后,就不需要手动的设置实体对象了,所以为null
@Test
void testLambdaUpdateWrapper() {
LambdaUpdateWrapper<Emp> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(Emp::getUsername, "oldUsername")
.set(Emp::getUsername, "newUsername")
.set(Emp::getJob, 3);
int rows = empMapper.update(null, updateWrapper);
System.out.println("Updated rows: " + rows);
}
反射
反射机制是指程序在运行时能够动态地获取类的详细信息,并操作类或对象的属性和方法。它允许在编译期间不知道类、方法或字段的情况下,在运行时进行操作。