01-JOOQ查询数据记录能量车

本文介绍了如何使用JOOQ进行数据库查询,包括获取Record对象、利用count方法进行计数、处理多表联合查询以及将查询结果转化为Map。讨论了在查询时可能遇到的重复数据问题,并展示了如何通过group by解决。
摘要由CSDN通过智能技术生成

Record型号能量车队

在从数据库中找寻出一行数据,这行数据会转换为Java对象,在Jooq中是相应的Record对象,其中数据库的列表名对应Record对象的属性名称。

  1. 查询出完整的一行会默认返回一个对应的Record,如UserRecord

  2. 只查询出一行中的几个字段,则会返回抽象的Record带有数字,Record2<Integer, String>,而具体的Record,如UserRecord,能够通过getAttriName,来获取属性名,比较方便。其中可以将Record数据(如: Record2)转化为具体的Record(如: UserRecord)

    Record2<Integer, String> record = select... sentence.
    UserCardRecord res = record.into(USER_CARD);
    
  3. 其中Record通过intoMap方法能转化为Map,属性为key,内容值为value,而像Record2<Integer,String>这种散装的临时能量车转化为Map时,有装载(查询时)设置的字段名称决定,如:

    Record2<Integer, String> record = db().select(USER_CARD.CARD_ID,USER_CARD.CARD_NO)...something...
    Map<String, Object> intoMap = record.intoMap();
    // {card_id=1, card_no=4892585300092512}
    

select count方法

stack overflow: how to write count query in jooq

int count = 
DSL.using(configuration)
   .selectCount()
   .from(Table)
   .fetchOne(0, int.class);

select 多个表的数据时

在select通过join需要查询多个数据时,返回的POJO,我们可以使用jooq的Record类,这样与我们的Vo类非常解耦,vo就可以只是当做json输出类,pojo就是查询数据的类。

stackoverflow:how-to-join-3-tables-and-iterate-results-using-jooq

Result<?> result = sql
    .select()
    .from(SCHEUDLE)
    .leftOuterJoin(COURSE)
    .on(SCHEDULE.CID.eq(COURSE.ID))
    .leftOuterJoin(STUDENT)
    .on(SCHEDULE.SID.eq(STUDENT.ID))
    .fetch();
for (Record r : result) {
   
    StudentRecord s = r.into(STUDENT);
    CourseRecord c = r.into(COURSE);
}

在实际中的应用:

我们需要值查询出我们需要的数据,但是又不想新建一个pojo类,我们可以通过动态的方式,创建新的Record.

JOOQ提供了一个newRecord的方法,供我们使用

Field<?>[] fields = USER_SCORE.fields();
List<Field<?>> f = new ArrayList<>(Arrays.asList(fields));
f.add(USER.USERNAME);
f.add(USER.MOBILE);
Field<?>[] myFields = f.toArray(new Field<?>[0]);
Record myRecord = db().newRecord(myFields);

List<? extends Record> fetch = db().select(myFields)
	.from(USER_SCORE.leftJoin(USER).on(USER_SCORE.USER_ID.eq(USER.USER_ID)).leftJoin(USER_TAG).on(USER_SCORE.USER_ID.eq(USER_TAG.USER_ID)))
	.where(USER_SCORE.DESC.eq(VersionName.SUB_3_SIGN_SCORE))
	.and(condition)
	.orderBy(USER_SCORE.CREATE_TIME.desc())
	.fetchInto(myRecord.getClass());

myRecord的数据现在为

+------+-------+------+------+-------+------------+-----------+--------+--------+-------+------+---------+-----------+-----------+-----------+----------+--------+----
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值