- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 Spring Boot、JPA 和 MySQL 创建一个 Spring Boot 微服务,其中包含以下实体关系:
Owner can have multiple Cars.
Cars can only have one Owner.
<小时/>
pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.myapi</groupId>
<artifactId>car-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>car-api</name>
<description>Car REST API</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
<小时/>
所有者实体:
@Entity
@Table(name = "owner")
public class Owner extends AuditModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@NotNull
private String name;
private String address,
private String city;
private String state;
private int zipCode;
@OneToMany(cascade = CascadeType.ALL,
fetch = FetchType.EAGER,
mappedBy = "owner")
private List<Car> cars = new ArrayList<>();
public Owner() {
}
// Getter & Setters omitted for brevity.
}
汽车实体:
@Entity
@Table(name="car")
public class Car extends AuditModel {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
String make;
String model;
String year;
@JsonIgnore
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "owner_id", nullable = false)
private Owner owner;
// Getter & Setters omitted for brevity.
}
<小时/>
所有者存储库:
@Repository
public interface OwnerRepository extends JpaRepository<Owner, Long> {
@Query(value = "SELECT * FROM owner WHERE name = ?", nativeQuery = true)
Owner findOwnerByName(String name);
}
<小时/>
汽车存储库:
@Repository
public interface CarRepository extends JpaRepository<Car, Long> {
}
<小时/>
所有者服务:
public interface OwnerService {
List<Owner> getAllOwners();
}
<小时/>
OwnerServiceImpl:
@Service
public class OwnerServiceImpl implements OwnerService {
@Autowired
OwnerRepository ownerRepository;
@Override
public List<Owner> getAllOwners() {
return ownerRepository.findAll();
}
}
<小时/>
所有者 Controller :
@RestController
public class OwnerController {
private HttpHeaders headers = null;
@Autowired
OwnerService ownerService;
public OwnerController() {
headers = new HttpHeaders();
headers.add("Content-Type", "application/json");
}
@RequestMapping(value = { "/owners" }, method = RequestMethod.GET, produces = "APPLICATION/JSON")
public ResponseEntity<Object> getAllOwners() {
List<Owner> owners = ownerService.getAllOwners();
if (owners.isEmpty()) {
return new ResponseEntity<Object>(HttpStatus.NOT_FOUND);
}
return new ResponseEntity<Object>(owners, headers, HttpStatus.OK);
}
}
因此,当我使用以下方式调用此端点时:
获取http://localhost:8080/car-api/owners
产生以下 JSON 有效负载:
[
{
"id": 1,
"name": "Tom Brady",
"cars": [
{
"id": 1,
"make": "Honda",
"model": "Accord",
"year": "2020"
},
{
"id": 11,
"make": "Nissan",
"model": "Maxima",
"year": "2019"
},
{
"id": 12,
"make": "Porsche",
"model": "911",
"year": "2017"
}
]
},
{
"id": 2,
"name": "Kobe Bryant",
"cars": [
{
"id": 2,
"make": "Porsche",
"model": "911",
"year": "2017"
}
]
},
{
"id": 3,
"name": "Mike Tyson",
"cars": [
{
"id": 3,
"make": "Volkswagen",
"model": "Beatle",
"year": "1973"
}
]
},
{
"id": 4,
"name": "Scottie Pippen",
"cars": [
{
"id": 4,
"make": "Ford",
"model": "F-150",
"year": "2010"
}
]
},
{
"id": 5,
"name": "John Madden",
"cars": [
{
"id": 5,
"make": "Chevrolet",
"model": "Silverado",
"year": "2020"
}
]
},
{
"id": 6,
"name": "Arnold Palmer",
"cars": [
{
"id": 6,
"make": "Toyota",
"model": "Camary",
"year": "2018"
}
]
},
{
"id": 7,
"name": "Tiger Woods",
"cars": [
{
"id": 7,
"make": "Alfa",
"model": "Romeo",
"year": "2017"
}
]
},
{
"id": 8,
"name": "Magic Johnson",
"cars": [
{
"id": 8,
"make": "Porsche",
"model": "911",
"year": "2017"
}
]
},
{
"id": 9,
"name": "George Foreman",
"cars": [
{
"id": 9,
"make": "Toyota",
"model": "Camary",
"year": "2018"
}
]
},
{
"id": 10,
"name": "Charles Barkley",
"cars": [
{
"id": 10,
"make": "Alfa",
"model": "Romeo",
"year": "2017"
}
]
}
]
<小时/>
如您所见,汤姆·布雷迪、科比·布莱恩特、魔术师约翰逊都拥有保时捷 911...这是此列表中最常见的汽车。
<小时/>在幕后,JPA 创建如下表:
汽车表:
CREATE TABLE `car` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`battery_capacity` int(11) NOT NULL,
`make` varchar(255) DEFAULT NULL,
`model` varchar(255) DEFAULT NULL,
`year` varchar(255) DEFAULT NULL,
`owner_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
KEY `FK6wxv6hdekqn26n47pb7f1dt02` (`user_id`),
CONSTRAINT `FK6wxv6hdekqn26n47pb7f1dt02` FOREIGN KEY (`owner_id`) REFERENCES `owner` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1;
<小时/>
所有者表:
CREATE TABLE `owner` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`address` varchar(255) DEFAULT NULL,
`city` varchar(255) DEFAULT NULL,
`name` varchar(255) NOT NULL,
`state` varchar(255) DEFAULT NULL,
`zip_code` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=latin1;
<小时/>
从所有者中选择*
:
+----+----------------+
| id | name |
+----+----------------+
| 1 | Tom Brady |
| 2 | Kobe Bryant |
| 3 | Mike Tyson |
| 4 | Scottie Pippen |
| 5 | John Madden |
| 6 | Arnold Palmer |
| 7 | Tiger Woods |
| 8 | Magic Johnson |
| 9 | George Foreman |
| 10 | Charles Barkley|
+----+----------------+
<小时/>
从汽车 c 中选择 id、user_id、c.make、c.model、c.year;
+----------------+--------------+------+
| id | make | model | year |
+----+-----------+-----------+---------+
| 1 | Honda | Accord | 2020 |
| 2 | Nissan | Leaf | 2029 |
| 3 | Volkswagen| Beatle | 1973 |
| 4 | Porsche | Taycan | 2020 |
| 5 | Ford | F-150 | 2010 |
| 6 | Chevrolet | Silverado | 2020 |
| 7 | Toyota | Camry | 2018 |
| 8 | Chevrolet | Bolt | 2020 |
| 9 | Honda | Clarity | 2018 |
| 10 | Hyundai | Ioniq | 2017 |
| 11 | Nissan | Maxima | 2019 |
| 12 | Porsche | 911 | 2020 |
+----+-----------+--------------+------+
<小时/>
我可以将 JPA 或 SQL 查询(甚至可以是命名查询)放入我的存储库中,该查询将返回最常见汽车的数据(例如 Select count(*) 和可能的 Group By 语句),其中是否表明拥有最多的汽车是保时捷 911,因为有 3 个人拥有它们?
最佳答案
声明一个用于保存汽车
及其数量的类。
public class CarStatistics {
private final Car car;
private final Long count;
public CarStatistics(Car car, Long count) {
this.car = car;
this.count = count;
}
public Car getCar() {
return car;
}
public Long getCount() {
return count;
}
}
从存储库方法返回一个 bean 实例,按计数分组和排序:
public interface CarRepository extends JpaRepository<Car, Long> {
@Query("SELECT new com.example.CarStatistics(c, COUNT(c)) "
+ " FROM Car c "
+ " GROUP BY c.make, c.model "
+ " ORDER BY COUNT(c) DESC")
List<CarStatistics> findCarCount();
}
调用存储库方法并获取结果集中的第一个对象:
@Service
public class CarService {
private final CarRepository carRepository;
public CarService(CarRepository carRepository) {
this.carRepository = carRepository;
}
public Car findMostCommonCar() {
List<CarStatistics> carStatistics = carRepository.findCarCount();
return carStatistics.get(0).getCar();
}
}
关于java - Spring Boot - JPA 或 SQL 查询在连接表中查找最常见的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60607545/
新建表: create table [表名] ( [自动编号字段] int IDENTITY (1,1)&nbs
我的文件中有正在本地化的字符串。其中许多是常见的,并且已经在整个 iOS 中使用。例如。 “保存”、“加载”、“返回”、“收藏夹”、“拍照”。为了与其他应用程序和内置应用程序提供一致的用户体验,是否有
我已经学习了 Qt 的基础知识,现在对这个漂亮的库的深度感兴趣。请帮助我理解: 所有类都是从QObject派生的吗? 为什么可以在QWidget(和派生类)上绘画? return app.exec()
我在 webpack 中设置了一个自调用函数,并使用常见的 JS 来需要一些包: (function() { var $ = require("jquery"); //...my functi
我正在尝试制作一个大量使用词性标记的应用程序。但是 nltk 的 pos 标记功能对我来说似乎不符合标准 - 例如: import nltk text = "Obama delivers his fi
有没有办法处理发送到 MySQL 的常见查询以防止不必要的带宽使用? 最佳答案 选项是: 使用MySQL缓存查询 好:全自动 差:仍然需要访问数据库服务器;有一次缓存让我在一个项目中失望,花了很长时间
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 4 年前。 Improve this qu
关闭。这个问题需要debugging details .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve this questio
我正在尝试调用返回 csv 文件的网络服务。因此,我调用的每个 URL 都有一个后缀,它是一个字符串,表示要生成哪个 csv。然后我想将此 csv 保存到文件中。有很多要生成,所以我从多个线程调用此类
流行手机型号支持的典型触摸点数量是多少?我在基础研究中看到低至 2 和高至 5,但我希望能够将其映射到实际手机和更好的限制! 最佳答案 两部手机的触控点数据: Galaxy S 5 LG
出于好奇 - 我知道有 LAMP - Linux、Apache、MySQL 和 PHP。但是还有哪些其他 Web 堆栈替代方案的缩写呢?像 LAMR - Linux、Apache、MySQL Ruby
我写了一个java代码(使用apache common vfs2)来上传文件到SFTP服务器。最近,我在我的服务器上引入了 PGP 安全性。现在,java 代码无法连接到该服务器。与 FileZill
由于 GLU 被认为对于现代 OpenGL (3.1+) 来说已经过时,那么使用 C/C++ 在 OpenGL 中绘制基本形状(例如椭圆或弧线/饼图)的方法是什么?令人难以置信的是,在 OpenGL
我想知道是否有最流行的 iOS 应用程序的自定义 URL 方案列表,例如 Keynote、Numbers、Pages、Evernote 等。我还想知道这些应用程序使用什么参数网址。 我需要这个的原因是
我正在使用 NDK r10d 移植 C++ myToll Linux 应用程序以在 Android 上运行。 (请注意,这不是带有 apk 的 Android 应用程序,而是从 shell 运行的实用
假设您想要使用 UML 2 部署图为在该领域没有太多知识的人可视化一个常见的 PHP 服务器应用程序。这样一个通用的应用程序可能有三个设备节点(数据库服务器、Web 服务器和客户端)和四个执行环境节点
我正在尝试运行以下代码,以找到两个人之间的共同 friend 。输入如下 A : B C D B : A C D E C : A B D E D : A B C E E : B C D 我无法在输出文
我在 Gitolite 的 manual 中找到的唯一东西在钩子(Hook)上,是: If you want to add your own hook, it's easy as long as it
具体来说,我有一个问题,在 AWS 环境中组织 AZ 故障转移的推荐方法是什么。此外,最好了解典型的 AWS 故障以组织应用程序 HA(高可用性)。 因此,应用程序架构(AWS 服务使用)如下: 它或
我正在尝试编写一个通用的 SecurePagingAndSorting 存储库,它将检查 CRUD 操作的安全性,以节省在所有 JPA 存储库中重复相同的 PreAuthorize(使用不同的权限)。
我是一名优秀的程序员,十分优秀!