如何在 JHipster 中添加自定义查询?
How to add a custom query in JHipster?
我正在学习使用 JHipster,但不知道如何使用创建自定义查询。
在我的项目中,我有 Orders
table 和 DeliveryDay
和 Week
字段,并且只想显示一周中当天的订单。 DeliveryDay 和 Week 是 int
,值为(1-7 和 0-2)
所以在 OrdersRepository.java
中我添加了这样的自定义查询:
public interface OrdersRepository extends JpaRepository<Orders,Long> {
Page<Orders> findByDeliveryDayAndWeek(int weekday, int week, pageable);
在 OrdersResource.java
我添加了这个:
@RequestMapping(value = "/today",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public ResponseEntity<List<Orders>> getOrdersForToday(Pageable pageable)
throws URISyntaxException {
log.debug("REST request to get a page of Orderss");
Page<Orders> page = ordersRepository.findByDeliveryDayAndWeek(1, 0, pageable);
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/today");
return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK);
}
我还添加了today.html
(复制orders.html
)和today.js
'use strict';
angular.module('fruitcrmApp')
.config(function ($stateProvider) {
$stateProvider
.state('today', {
parent: 'entity',
url: '/today',
data: {
authorities: ['ROLE_USER'],
pageTitle: 'fruitcrmApp.orders.home.title'
},
views: {
'content@': {
templateUrl: 'scripts/app/custom/today.html',
controller: 'OrdersController'
}
},
resolve: {
translatePartialLoader: ['$translate', '$translatePartialLoader', function ($translate, $translatePartialLoader) {
$translatePartialLoader.addPart('orders');
$translatePartialLoader.addPart('global');
return $translate.refresh();
}]
}
})
});
并在 index.html
中添加 today.js
我的 orders.controller.js
看起来像这样(由 JHipster 生成)
'use strict';
angular.module('fruitcrmApp')
.controller('OrdersController', function ($scope, $state, Orders, OrdersSearch, ParseLinks) {
$scope.orderss = [];
$scope.predicate = 'id';
$scope.reverse = true;
$scope.page = 1;
$scope.loadAll = function() {
Orders.query({page: $scope.page - 1, size: 20, sort: [$scope.predicate + ',' + ($scope.reverse ? 'asc' : 'desc'), 'id']}, function(result, headers) {
$scope.links = ParseLinks.parse(headers('link'));
$scope.totalItems = headers('X-Total-Count');
$scope.orderss = result;
});
};
$scope.loadPage = function(page) {
$scope.page = page;
$scope.loadAll();
};
$scope.loadAll();
$scope.search = function () {
OrdersSearch.query({query: $scope.searchQuery}, function(result) {
$scope.orderss = result;
}, function(response) {
if(response.status === 404) {
$scope.loadAll();
}
});
};
$scope.refresh = function () {
$scope.loadAll();
$scope.clear();
};
$scope.clear = function () {
$scope.orders = {
details: null,
orderDate: null,
firstDelivery: null,
isActive: false,
id: null
};
};
});
现在我可以访问 http://localhost:3000/#/today
但它显示了来自 Orders
的所有数据我做错了什么?如何使用我自己的方法 OrdersRepository.java
?
我尝试搜索示例,但没有找到任何相关示例。我错过了哪些必要的步骤? Link 对于一些涵盖它的教程,如果答案很长,那将是很好的。
您需要为 today
API 端点创建一个新的 angular 服务。像这样的东西,叫做 orders-today.service.js
:
'use strict';
angular.module('fruitcrmApp')
.factory('OrdersToday', function ($resource) {
return $resource('api/orders/today', {}, {
'query': { method: 'GET', isArray: true}
});
});
然后在您的 orders.controller.js
文件中,您需要注入新的 OrdersToday 服务:
.controller('OrdersController', function ($scope, $state, Orders, OrdersSearch, OrdersToday, ParseLinks) {
当您想获取今天的订单列表时,您需要使用 OrdersToday.query
就像您在粘贴的示例中使用 Orders.query
一样。
您可能希望创建一个引用 OrdersToday
的 OrdersTodayController
,并在 today.js
中使用它而不是 OrdersController
。
我正在学习使用 JHipster,但不知道如何使用创建自定义查询。
在我的项目中,我有 Orders
table 和 DeliveryDay
和 Week
字段,并且只想显示一周中当天的订单。 DeliveryDay 和 Week 是 int
,值为(1-7 和 0-2)
所以在 OrdersRepository.java
中我添加了这样的自定义查询:
public interface OrdersRepository extends JpaRepository<Orders,Long> {
Page<Orders> findByDeliveryDayAndWeek(int weekday, int week, pageable);
在 OrdersResource.java
我添加了这个:
@RequestMapping(value = "/today",
method = RequestMethod.GET,
produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public ResponseEntity<List<Orders>> getOrdersForToday(Pageable pageable)
throws URISyntaxException {
log.debug("REST request to get a page of Orderss");
Page<Orders> page = ordersRepository.findByDeliveryDayAndWeek(1, 0, pageable);
HttpHeaders headers = PaginationUtil.generatePaginationHttpHeaders(page, "/api/today");
return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK);
}
我还添加了today.html
(复制orders.html
)和today.js
'use strict';
angular.module('fruitcrmApp')
.config(function ($stateProvider) {
$stateProvider
.state('today', {
parent: 'entity',
url: '/today',
data: {
authorities: ['ROLE_USER'],
pageTitle: 'fruitcrmApp.orders.home.title'
},
views: {
'content@': {
templateUrl: 'scripts/app/custom/today.html',
controller: 'OrdersController'
}
},
resolve: {
translatePartialLoader: ['$translate', '$translatePartialLoader', function ($translate, $translatePartialLoader) {
$translatePartialLoader.addPart('orders');
$translatePartialLoader.addPart('global');
return $translate.refresh();
}]
}
})
});
并在 index.html
today.js
我的 orders.controller.js
看起来像这样(由 JHipster 生成)
'use strict';
angular.module('fruitcrmApp')
.controller('OrdersController', function ($scope, $state, Orders, OrdersSearch, ParseLinks) {
$scope.orderss = [];
$scope.predicate = 'id';
$scope.reverse = true;
$scope.page = 1;
$scope.loadAll = function() {
Orders.query({page: $scope.page - 1, size: 20, sort: [$scope.predicate + ',' + ($scope.reverse ? 'asc' : 'desc'), 'id']}, function(result, headers) {
$scope.links = ParseLinks.parse(headers('link'));
$scope.totalItems = headers('X-Total-Count');
$scope.orderss = result;
});
};
$scope.loadPage = function(page) {
$scope.page = page;
$scope.loadAll();
};
$scope.loadAll();
$scope.search = function () {
OrdersSearch.query({query: $scope.searchQuery}, function(result) {
$scope.orderss = result;
}, function(response) {
if(response.status === 404) {
$scope.loadAll();
}
});
};
$scope.refresh = function () {
$scope.loadAll();
$scope.clear();
};
$scope.clear = function () {
$scope.orders = {
details: null,
orderDate: null,
firstDelivery: null,
isActive: false,
id: null
};
};
});
现在我可以访问 http://localhost:3000/#/today
但它显示了来自 Orders
的所有数据我做错了什么?如何使用我自己的方法 OrdersRepository.java
?
我尝试搜索示例,但没有找到任何相关示例。我错过了哪些必要的步骤? Link 对于一些涵盖它的教程,如果答案很长,那将是很好的。
您需要为 today
API 端点创建一个新的 angular 服务。像这样的东西,叫做 orders-today.service.js
:
'use strict';
angular.module('fruitcrmApp')
.factory('OrdersToday', function ($resource) {
return $resource('api/orders/today', {}, {
'query': { method: 'GET', isArray: true}
});
});
然后在您的 orders.controller.js
文件中,您需要注入新的 OrdersToday 服务:
.controller('OrdersController', function ($scope, $state, Orders, OrdersSearch, OrdersToday, ParseLinks) {
当您想获取今天的订单列表时,您需要使用 OrdersToday.query
就像您在粘贴的示例中使用 Orders.query
一样。
您可能希望创建一个引用 OrdersToday
的 OrdersTodayController
,并在 today.js
中使用它而不是 OrdersController
。