使用mybatis-plus的好处在于可以通过Java代码实现Sql逻辑,不需要像mybatis需要通过xml编写Sql语句操作数据库,实现了零配置和手写Sql的烦恼。
mybatis-plus中的lambda表达式相比于普通写法,可以通过方法引用的方式来使用实体字段名的操作,避免直接写数据库表字段名时的错写名字。
注意事项
目前lambda表达式只支持单表操作,对于多表查询或单表复杂查询还是使用配置或注解为好
实战:以学生表为例
no | name | sorce |
1 | jack | 60 |
2 | mark | 70 |
3 | jetty | 80 |
实体类:
@Data
@TableName("student")
public class Student implements Serializable {
@TableId(type = IdType.AUTO)
private Integer no;
private String name;
private Integer score;
}
1.等值查询:eq
@Test
public void testEQ(){
Student student = studentMapper.selectOne(
Wrappers.lambdaQuery(Student.class)
.eq(Student::getName, "jack")
);
System.err.println(student);
}
--------------------输出---------
Student(no=1, name=jack, score=60)
---------------------------------
等同于sql:select * from student where name='jack'
2.模糊查询:like、likeRight、likeLeft
@Test
public void testLIKE(){
List<Student> students = studentMapper.selectList(
Wrappers.lambdaQuery(Student.class)
.like(Student::getName, "a")
);
System.err.println(students);
}
-------------输出---------
[Student(no=1, name=jack, score=60), Student(no=2, name=mark, score=70)]
--------------------------
相当于sql:select * from student where name like '%a%'
--------------------------
@Test
public void testLikeRight(){
List<Student> students = studentMapper.selectList(
Wrappers.lambdaQuery(Student.class)
.likeRight(Student::getName, "ja")
);
System.err.println(students);
}
-------------输出---------
[Student(no=1, name=jack, score=60)]
--------------------------
相当于sql:select * from student where name like '%ja'
--------------------------
@Test
public void testLikeLeft(){
List<Student> students = studentMapper.selectList(
Wrappers.lambdaQuery(Student.class)
.likeLeft(Student::getName, "ck")
);
System.err.println(students);
}
--------------------------
相当于sql:select * from student where name like '%ck'
3.多条件查询:and与or
@Test
public void testAnd(){
List<Student> students = studentMapper.selectList(
Wrappers.lambdaQuery(Student.class)
.ne(Student::getName, "jack")
.and(wrapper -> wrapper.gt(Student::getScore,70))
);
System.err.println(students);
}
-----------输出--------
[Student(no=3, name=jetty, score=80)]
----------------------
相当于sql:select * from student where name != 'jack' and score > 70
----------------------
@Test
public void testOr(){
List<Student> students = studentMapper.selectList(
Wrappers.lambdaQuery(Student.class)
.ne(Student::getName, "jack")
.or().ge(Student::getScore,60)
);
System.err.println(students);
}
--------------------------
相当于sql:select * from student where name != 'jack' or score >= 60
还有很多没有列举,先贴一张图来代替,图片来源于:Mybatis Plus中的lambdaQueryWrapper条件构造图介绍 - 一个九零後的程序猿 - 博客园