Springboot整合JPA 多表关联操作 @Query

import lombok.Data;

import lombok.ToString;

import javax.persistence.Entity;

import javax.persistence.GeneratedValue;

import javax.persistence.GenerationType;

import javax.persistence.Id;

/**

  • @Author : JCccc

  • @CreateTime : 2019/10/12

  • @Description :

**/

@Data

@Entity // 该注解声明一个实体类,与数据库中的表对应

@ToString

public class User {

@Id // 表明id

@GeneratedValue(strategy = GenerationType.IDENTITY) // 自动生成

private Long id ;

private Long cid ;

private String name ;

}

import lombok.Data;

import lombok.ToString;

import javax.persistence.*;

/**

  • @Author : JCccc

  • @CreateTime : 2019/10/14

  • @Description :

**/

@Data

@Entity // 该注解声明一个实体类,与数据库中的表对应

@ToString

public class Company {

@Id // 表明id

@GeneratedValue(strategy = GenerationType.IDENTITY) // 自动生成

private Long cid ;

private String companyName;

}

这里面是用到了lombok jar包的:

org.projectlombok

lombok

1.16.10

provided

User和Company两个实体类,通过cid作为关联键,运行项目,则会生成对应以下两种表:

company表:

user表:

ok,接下来 我们来实现一些关联这两张表的查询操作,

在UserMapper.java里面 扩展2个方法:

/**

  • @Author : JCccc

  • @CreateTime : 2019/10/12

  • @Description :

**/

@Component

public interface UserMapper extends JpaRepository<User,Long> {

/*

  • 我们在这里直接继承 JpaRepository

  • 这里面已经有很多现场的方法了,可以直接通过UserMapper.xxx()直接使用

  • 这也是JPA的一大优点

  • */

//查询list

@Query(value=“select u.name,c.cid,c.company_name from user u ,company c where u.cid=c.cid”,nativeQuery = true)

List<Map<String,Object>> getUserCompanyList();

//根据传入cid查询list

@Query(value=“select u.name,c.cid,c.company_name from user u ,company c where u.cid=c.cid and c.cid=(:cid)”,nativeQuery = true)

List<Map<String,Object>> getUserCompanyListByCid(@Param(“cid”) Long cid);

}

①注意上面,自己扩展的方法,是需要用@Query来进行编写sql语句的,同样如果是想写修改/删除,则需要额外加上注解@Modifying,这些可以额外去网上了解,这里只拿联合查询及运用map来接收数据做介绍。

②传参,可以细看上面代码里面的规则(cid参数)。

service层相关代码,UserService.java:

List<Map<String,Object>> getUserCompanyList();

List<Map<String,Object>> getUserCompanyListByCid(Long cid);

Impl里面的:

@Override

public List<Map<String,Object>> getUserCompanyList() {

return userMapper.getUserCompanyList();

}

@Override

public List<Map<String, Object>> getUserCompanyListByCid(Long cid) {

return userMapper.getUserCompanyListByCid(cid);

}

写两个简单的测试接口(controller使用@RestController):

@Autowired

private UserService userService;

@GetMapping(“/getUserCompanyList”)

public String getUserCompanyList() {

List<Map<String,Object>> list= userService.getUserCompanyList();

String jsonStr=JSON.toJSONString(list);

return jsonStr;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值