mp使用注解多表查询
时间: 2024-02-21 19:53:43 浏览: 27
MyBatis-Plus提供了多种注解来简化多表查询操作,其中包括@JoinQuery、@Join、@JoinTable、@JoinColumn等注解。这些注解可以帮助我们快速编写关联查询方法,避免手动书写SQL和配置resultMap的繁琐过程。同时,@TableField注解也可以用于处理实体类中的表列名对应不上的字段,从而更加方便地进行多表查询操作。
举个例子,假设我们有两个实体类User和Order,它们之间存在一对多的关系,即一个用户可以拥有多个订单。我们可以使用@Join注解来实现多表查询操作,示例代码如下:
```java
@Join(value = "orders", type = JoinType.LEFT_JOIN, alias = "o", on = "id = o.user_id")
List<User> selectUserWithOrders();
```
在这个例子中,@Join注解指定了要关联的表名、关联类型、别名和关联条件。通过这种方式,我们可以快速地实现多表查询操作,而无需手动编写SQL和配置resultMap。
相关问题
mp的关联查询不写sql
在使用Mybatis-Plus时,可以通过实体类的关联属性进行关联查询,而无需编写SQL语句。具体的实现方法为,在主实体类中定义关联属性,并使用Mybatis-Plus提供的注解进行关联,例如:
```java
public class User {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
private Integer age;
@TableField(exist = false)
private List<Role> roles;
}
public class Role {
@TableId(type = IdType.AUTO)
private Long id;
private String name;
@TableField("user_id")
private Long userId;
}
```
在以上代码中,User实体类中定义了一个List类型的roles属性,用于表示与该用户相关联的所有角色。同时,在Role实体类中,通过@TableField注解指定了与User实体类关联的外键userId。
这样,在进行查询时,只需要使用Mybatis-Plus提供的Wrapper对象构造查询条件,然后使用Mybatis-Plus提供的selectList方法进行查询即可,例如:
```java
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.eq("name", "张三");
List<User> userList = userMapper.selectList(wrapper);
```
在以上代码中,首先创建一个QueryWrapper对象wrapper,并通过eq方法指定查询条件为name等于“张三”。然后,通过userMapper.selectList(wrapper)方法进行查询,即可得到所有符合条件的User对象列表。此时,每个User对象中的roles属性已经自动填充了与该用户相关联的所有角色信息。
怎么使用mp来写
假设你使用的是基于 Java 的 Spring Boot 框架,同时使用了 Mybatis-Plus (简称 MP)作为 ORM 框架,则可以按照以下步骤使用 MP 来编写该 SQL 查询语句:
1. 配置 Mybatis-Plus
在 Spring Boot 项目中的 pom.xml 文件中添加 Mybatis-Plus 的依赖,同时在 application.yml 文件中配置 Mybatis-Plus 的相关属性,比如数据库连接信息、Mapper 扫描包路径等。
2. 创建实体类
创建一个名为 Blog 的实体类,包含与博客表中各个字段对应的属性,并使用 @TableName 注解指定实体类对应的数据库表名。
3. 创建 Mapper 接口
创建一个名为 BlogMapper 的 Mapper 接口,继承自 Mybatis-Plus 的 BaseMapper 接口,并定义一个名为 selectPublishedAndRecommendedBlogs 的方法,该方法的返回值类型为 List<Blog>,方法参数为一个名为 limitNum 的 int 类型参数,用于指定返回结果的数量。
4. 实现 Mapper 接口方法
在 BlogMapper 接口的实现类中,实现 selectPublishedAndRecommendedBlogs 方法,通过使用 Mybatis-Plus 提供的 LambdaQueryWrapper 类来构造查询条件,并使用 selectList 方法执行查询并返回结果。
示例代码如下:
```
@Repository
public interface BlogMapper extends BaseMapper<Blog> {
@Select("select id, title, password, create_time, first_picture from blog where is_published=true and is_recommend=true order by rand() limit #{limitNum}")
List<Blog> selectPublishedAndRecommendedBlogs(@Param("limitNum") int limitNum);
}
```
5. 在 Service 中调用 Mapper 方法
在 Service 类中,使用 @Autowired 注解注入 BlogMapper 对象,并在需要查询博客列表的方法中,调用 BlogMapper 的 selectPublishedAndRecommendedBlogs 方法并传入 limitNum 参数,获取查询结果。
示例代码如下:
```
@Service
public class BlogService {
@Autowired
private BlogMapper blogMapper;
public List<Blog> getPublishedAndRecommendedBlogs(int limitNum) {
return blogMapper.selectPublishedAndRecommendedBlogs(limitNum);
}
}
```
这样就完成了使用 Mybatis-Plus 来编写 SQL 查询语句的过程。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)