对于多表查询,可利用如下注解查询

现存在User表和Order表,分别在数据库中以及java的实体类中。
注:此篇的User表统一指数据库中名为User的数据表。
Order:
User:

其中Order中的uid是User的外键。(并不需要在数据库添加约束,自己有概念即可)
在实体类User中添加orders字段,加上对应getter,setter,toString方法,后续用于通过User来查询Order表(此处由于orders字段并不在User表中存在,所以利用TableField注解标识此字段不存在,来告诉mybatisplus的查询语句避开此字段,否则汇报错。但若使用mybatis的自写sql语句查询,则此处不需要添加注解)

然后在usermapper接口中配置查询方法的Sql语句,(mybatis和plus版本是互补而非互斥,所以继承plus包后也可以正常使用sql自定义查询,只要方法名不一样)先利用select查询user的所有数据,然后编写Results注解。
id="userMap"用来让其他映射可以使用该Results规则,只在本方法中使用则不用加。property对应实体类中的属性,column对应数据库中的字段名,javaType写上List类型,对应返回的orders对象中一个用户可以有多个订单。many=@many:第一个many是固定语法,与@many组成一对多的的多表查询。select后面写上跨表查询的方法地址,注意得从com根目录开始写

然后续写Order表的查询,在OrderMapper中查询所有目标uid的Order表内容。(注意此时我们的数据库表名order在数据库中是一个关键词,所以直接写表名order会查询失败,需要在order表框上双反引号` `,不要写成单引号;或者在Order实体类写上注解TableName指定查询表名)mybatis自动将 column = "id" 的user.Id列依次传值给uid,通过查询方法返回多个Order类对象,集成List集合,然后返回值给orders属性。


访问浏览器:返回了User表中id为1的所有数据,以及Order表中uid为1的所有数据,继续返回剩余id的双表数据。

对于条件查询,mybatisplus提供了对应的注解条件构造器 | MyBatis-Plus,其中Abstractwrapper提供了很多子类方法,例如Querywrapper类中有eq用来匹配单个字段,lt(lessthan)匹配小于某某的字段等等。


查询语句中,先利用QueryWrapper创建对象,引用eq方法,查询username表中数值为Davidlee的User类。返回mybatisplus自带的selectList方法,queryWrapper作为存储参数。

分页查询:
先在配置类添加配置文件
@Configuration
public class userconfig {
@Bean
public MybatisPlusInterceptor paginationInterceptor() {
// 初始化 MyBatis-Plus 核心拦截器
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 配置 MySQL 分页插件,参数检查自己的数据库类型是否是mysql
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
// 添加分页内部拦截器
interceptor.addInnerInterceptor(paginationInnerInterceptor);
return interceptor;
}
}
Ipage是mybatisplus的查询分页结果集的接口。page是User类的Page页对象,参数current是从第几页查询,size是查询多少条数据。然后通过plus的内置查询语句将page对象数据读取,还可以添加queryWrapper条件查询,将返回的结果集给IPage类对象ipage,mybatis会自动整理结果包括总页数,总条数,当前条数据。

查询结果:

| 字段名 | 类型 | 含义 |
|---|---|---|
total |
Number | 总记录数 :数据库中符合条件的总条数,这里是 5 条 |
size |
Number | 每页显示条数 :当前分页设置的每页大小,这里是 2 条 / 页 |
current |
Number | 当前页码 :当前查询的是第几页,这里是第 1 页 |
orders |
Array | 排序规则:用于指定排序字段和排序方式,空数组表示无排序 |
optimizeCountSql |
Boolean | 是否优化 count 查询 :true 表示 MyBatis-Plus 会自动优化统计总数的 SQL 语句 |
hitCount |
Boolean | 是否命中 count 查询缓存 :false 表示未使用缓存,直接查询数据库 |
countId |
String | 自定义 count 语句 ID :null 表示使用默认的 count 查询逻辑 |
maxLimit |
Number | 单页最大限制条数 :null 表示无上限限制 |
searchCount |
Boolean | 是否执行 count 查询 :true 表示会查询总记录数,用于计算总页数 |
pages |
Number | 总页数 :根据 total 和 size 计算得出,5 / 2 = 2.5,向上取整为 3 页 |