本文将为您提供关于micronaut项目中数据库查询结果排序不正确的详细介绍,我们还将为您解释数据库查询结果需要排序的话的相关知识,同时,我们还将为您提供关于laravel中数据库查询结果自动转数组、
本文将为您提供关于micronaut 项目中数据库查询结果排序不正确的详细介绍,我们还将为您解释数据库查询结果需要排序的话的相关知识,同时,我们还将为您提供关于laravel 中数据库查询结果自动转数组、Micronaut MockBean/Replaces 在使用 @MicronautTest、MongoDB文档查询-分页查询(limit、skip)与查询结果排序(sort、mysql 问题 对查询结果排序 查询指定记录在结果中的第几位的实用信息。
本文目录一览:- micronaut 项目中数据库查询结果排序不正确(数据库查询结果需要排序的话)
- laravel 中数据库查询结果自动转数组
- Micronaut MockBean/Replaces 在使用 @MicronautTest
- MongoDB文档查询-分页查询(limit、skip)与查询结果排序(sort
- mysql 问题 对查询结果排序 查询指定记录在结果中的第几位
micronaut 项目中数据库查询结果排序不正确(数据库查询结果需要排序的话)
如何解决micronaut 项目中数据库查询结果排序不正确?
我将此传递给存储库函数:
Pageable.from(offset,limit).order(Sort.Order(orderBy,direction,true))
如果 orderBy 是 String 属性的名称,它就可以正常工作。如果我尝试按数字属性排序,它将返回按以下顺序排序的结果:
1,11、 12、 ... 19、 2、 20,21
关于如何修复数字排序的任何建议?
对方法名称(例如 findAllOrderByNameAsc)进行排序不是一种选择,因为这是来自 API 的参数。我们需要支持任何属性的订购。
解决方法
删除 ignoreCase=true 参数或将其作为 false 传递
Sort.Order(orderBy,direction,true)
你应该只在字符串字段上使用 ignoreCase
laravel 中数据库查询结果自动转数组
今天在项目中再次碰见laravel中从数据库中查询到的结果是对象,用toArray也不好用,之前改过一次,印象中是在/confing/database.php, ''fetch'' => PDO::FETCH_OBJ,这行改为''fetch'' =>FETCH_ASSOC就好用了,但是我现在做的这个是二次开发,那么如果这个改了,之前做的东西可能会出错,然后又找了找,查了查,结果是这样的
引用
use PDO;
DB::setFetchMode(PDO::FETCH_ASSOC);
$rs = DB::table(''vrtourl'') -> get();
就可以解决了。
参考网站https://stackoverflow.com/questions/37517728/laravel-5-1-dbselect-toarray
参考网站:https://blog.csdn.net/kirsten_z/article/details/60144167
PDO::FETCH_ASSOC //从结果集中获取以列名为索引的关联数组。
PDO::FETCH_NUM //从结果集中获取一个以列在行中的数值偏移量为索引的值数组。
PDO::FETCH_BOTH //这是默认值,包含上面两种数组。
PDO::FETCH_OBJ //从结果集当前行的记录中获取其属性对应各个列名的一个对象。
PDO::FETCH_BOUND //使用fetch()返回TRUE,并将获取的列值赋给在bindParm()方法中指定的相应变量。
PDO::FETCH_LAZY //创建关联数组和索引数组,以及包含列属性的一个对象,从而可以在这三种接口中任选一种。
另外的方法:
function objectToArray($object) {
//先编码成json字符串,再解码成数组
return json_decode(json_encode($object), true);
}
Micronaut MockBean/Replaces 在使用 @MicronautTest
如何解决Micronaut MockBean/Replaces 在使用 @MicronautTest?
我正在使用 Micronaut 框架。我正在为以下控制器编写junit。 -
class Controller {
Client client;
List<Object> handleEvent(Object event) {
try {
client.handle(event);
} catch (Exception E) {
throw new Exception()
}
}
}
我想模拟客户端对象。我尝试了@MockBean 注释和@Replaces 注释。但没有运气。
客户端是从工厂注入的 -
@Factory
class ClientFactory {
@Singleton
@Named("client_name")
Client getClient() {
return new Client();
}
}
我在测试中尝试了以下注释 -
@Inject
Client client;
@MockBean(bean = Client.class,named = "client_name")
Client getClient() {
return Mockito.mock(Client.class);
}
它给出错误 - “无法为类注册器的参数 client_name 注入值。给定的限定符 @Named(client_name) 不存在类型的 bean” 注册器是另一个也注入了客户端的类同名。不知道为什么它会出现在控制器的图片中。
我对这些错误并不感到困惑。我也试过@Replaces注解,像这样-
@Replaces(value = Client.class,named = "client_name)
Client getClient() {
return Mockito.mock(Client.class);
}
但没有运气。有人可以指导我在这里缺少什么吗?
解决方法
您的 new Client()
实现表明您的 bean 定义是实际注入的类 interface Client {
void handleEvent(Object event);
}
。
Micronaut 无法替换/注入类定义的 bean,您将不得不引入一个提供 bean 公开 API 的中间接口,然后模拟后者:
定义您的通用类型接口:
Client
提供默认的 Primary
实现(请注意,您可以为工厂提供程序提供 public class DefaultClient {
public void handleEvent(Object event) {
// your default implementation goes here
}
}
注释,以便在存在多个可注入类型时将其选为默认提供程序):
Factory
您的 @Factory
public class ClientFactory {
@Singleton
@Named("client_name")
public Client getClient() {
return new DefaultClient();
}
}
应该注入默认的具体实现:
class Controller {
Client client; // the interface is injected in here
List<Object> handleEvent(Object event) {
try {
client.handle(event);
} catch (Exception E) {
throw new Exception()
}
}
}
您的控制器实现保持不变,不必关心实现细节:
@MockBean(DefaultClient.class)
Client client() {
return Mockito.mock(Client.class);
}
然后您的测试 bean 可以使用自定义实现替换默认实现:
import track
track.B = B # or setattr(track,''B'',B)
track.some_func = some_func # or settattr(track,''some_func'',some_func)
作为一般建议,您应该更好地编写接口程序,并且仅在为 bean 内省注释具体实现时才注入这些接口。
MongoDB文档查询-分页查询(limit、skip)与查询结果排序(sort
MongoDB使用find()
方法查询后,可能需要对于返回结果进行排序。在有些查询中,我们并不需要返回全部结果,而是按指定的页长和页码返回指定数量的结果
limit()
指定查询结果数量skip()
指定查询偏移量sort()
实现查询结果排序
1. limit()
指定查询结果数量
find()方法查询文档后,其默认返回前20条数据。要限制MongoDB查询结果数,使用limit()
方法,该方法接受一个数字值,表示要返回的结果数。
limit()
语法结构
db.COLLECTION_NAME.find().limit(NUMBER)
例如,现有sites
数据集合,集合数据如下:
{ "_id" : ObjectId("56999ca102129bdec412ed38"), "name" : "IT笔录", "domain" : "itbilu.com" } { "_id" : ObjectId("56999ca902129bdec412ed39"), "name" : "老聂", "domain" : "niefengjun.cn" } { "_id" : ObjectId("56999cb102129bdec412ed3a"), "name" : "一介布衣", "domain" : "yijiebuyi.com" }
查询该集合,只返回第一条数据:
> db.sites.find().limit(1) { "_id" : ObjectId("56999ca102129bdec412ed38"), "name" : "IT笔录", "domain" : "itbilu.com" }
2. skip()
指定查询偏移量
在使用SQL
查询的数据库(如:mySQL、PostgreSQL)中,可以使用limit 数量,偏移量
或使用limit 数量 offset 偏移量
实现数据的分页查询。而在MongoDB中,可以使用skip()
方法,指定偏移量,该也接受一个表示数量的参数。
skip()
语法结构
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
例如,使用skip()
查询sites
集合中的第二个文档:
> db.sites.find().limit(1).skip(1) { "_id" : ObjectId("56999ca902129bdec412ed39"), "name" : "老聂", "domain" : "niefengjun.cn" }
3. sort()
实现查询结果排序
对MongoDB的查询文档进行排序,要使用sort()
方法。sort()
方法接受一个文档,其中包含的排序的字段,及要指定排序方式。排序方式为可选值为:1
和-1
,1
表示使用升序排列,-1
表示降序排序。
sort()
语法结构
db.COLLECTION_NAME.find().sort({KEY:1})
例如,查询sites
数据集合,分别按name
升序和降序两种试查询:
> db.sites.find().sort({name:1}) { "_id" : ObjectId("56999ca102129bdec412ed38"), "name" : "IT笔录", "domain" : "itbilu.com" } { "_id" : ObjectId("56999cb102129bdec412ed3a"), "name" : "一介布衣", "domain" : "yijiebuyi.com" } { "_id" : ObjectId("56999ca902129bdec412ed39"), "name" : "老聂", "domain" : "niefengjun.cn" } > db.sites.find().sort({name:-1}) { "_id" : ObjectId("56999ca902129bdec412ed39"), "name" : "老聂", "domain" : "niefengjun.cn" } { "_id" : ObjectId("56999cb102129bdec412ed3a"), "name" : "一介布衣", "domain" : "yijiebuyi.com" } { "_id" : ObjectId("56999ca102129bdec412ed38"), "name" : "IT笔录", "domain" : "itbilu.com" }
mysql 问题 对查询结果排序 查询指定记录在结果中的第几位
网上查到了个方法
SET @row_number =0; select *, @row_number := @row_number+1 AS row_number from tb order by col;可是在php语言中
怎么把这两条语句一起执行呢
关于micronaut 项目中数据库查询结果排序不正确和数据库查询结果需要排序的话的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于laravel 中数据库查询结果自动转数组、Micronaut MockBean/Replaces 在使用 @MicronautTest、MongoDB文档查询-分页查询(limit、skip)与查询结果排序(sort、mysql 问题 对查询结果排序 查询指定记录在结果中的第几位等相关知识的信息别忘了在本站进行查找喔。
本文标签: