This documentation is not maintained. Please refer to doc.castsoftware.com/technologies to find the latest updates.

Extension ID

com.castsoftware.jooq

What's new?

See jOOQ - 1.0 - Release Notes for more information.

Description

jOOQ (Java Object Oriented Query), is a library that generates Java classes based on database tables and allows the creation of type-safe SQL queries through its fluent API. This extension supports API for the jOOQ framework, which is responsible for the typical CRUD operations with the database.

In what situation should you install this extension?

If your Java application contains CRUD operations with fluent API or "raw" SQL queries in its source code provided by jOOQ packages and you want to view these object types and their links, then you should install this extension.

Technology support


ItemVersionSupportedSupported Technology
jOOQUp to : 3.18(tick)Java

jOOQ requires minimum of Java 8 to run

AIP Core compatibility

AIP Core release

Supported

8.3.x(tick)

Supported DBMS servers

DBMSSupported
CSS/PostgreSQL      (tick)

Download and installation instructions

For JEE applications using jOOQ, the extension will be automatically installed by CAST Console. This is in place since october 2023.

For upgrade, if the Extension Strategy is not set to Auto updateyou can manually install the new release using the Application - Extensions interface.

What results can you expect?

Once the analysis/snapshot generation has completed, the following objects and  links will be displayed in CAST Enlighten:

Objects

The following objects are displayed in CAST Enlighten:

IconDescriptionWhen is this object created ?

JOOQ SQL Query

An object is created for each SQL query found and resolved in a jOOQ DSLContext method call.

JOOQ Entity

An object is created for each jOOQ Entity class found which inherits from Table TableImpl.

JOOQ Entity Operation

An object is created for each CRUD operation performed on Entity.

The following link types are created by the jOOQ extension, or by other extensions.

Link TypeCaller typeCallee typeMethods Supported
callLink Java MethodjOOQ SQL Query
  • org.jooq.DSLContext.fetch
  • org.jooq.DSLContext.execute
  • org.jooq.DSLContext.query
callLinkJava methodJOOQ Entity Operation
  • org.jooq.ResultQuery.fetch
  • org.jooq.ResultQuery.fetchOne
  • org.jooq.ResultQuery.fetchAny
  • org.jooq.ResultQuery.fetchLazy
  • org.jooq.ResultQuery.fetchResultSet
  • org.jooq.ResultQuery.fetchStream
  • org.jooq.Query.execute
  • org.jooq.Batch.execute
  • org.jooq.ResultQuery.stream
  • org.jooq.Query.executeAsync
useLinkjOOQ SQL QueryTable, ViewCreated by SQL Analyzer when DDL source files are analyzed
callLinkjOOQ SQL QueryProcedure
useLinkjOOQ Entity OperationTable, ViewCreated by WBS when DDL source files are analyzed by SQL Analyzer
callLinkjOOQ Entity OperationProcedure
useLinkjOOQ SQL QueryMissing TableCreated by Missing tables and procedures for JEE extension when the object is not analyzed.
callLinkJDBC SQL QueryMissing Procedure

Example code scenarios

Fluent API

Fluent API Examples
Select Operation
package com.Jooqexample.jooq;

import static com.JooQDemo.jooq.sample.model.Tables.*;
import com.JooQDemo.jooq.sample.model.tables.records.BikeRecord;
import com.JooQDemo.jooq.sample.model.tables.records.CarsRecord;
import org.jooq.*;
import org.jooq.Record;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.sql.ResultSet;
import java.util.stream.Stream;

@SpringBootTest

class SpringBootJooqApplicationTests {

	@Autowired
	private DSLContext dsl;

	@Test
	void DisplayData() {
		CarsRecord Cars = dsl.selectFrom(CARS).fetchAny();
		System.out.println("Result are -- " + Cars);

		Result<Record> result0 = dsl.select().from(AIR_WAYS).fetch();
		System.out.println("Result are1 -- " + result0);

		Result<Record> result0 = dsl.select().from(CARS).stream();

		Result<Record> result1  = dsl.select().from(CARS).fetch();
		System.out.println("Result are1 -- " + result1);

		Result<BikeRecord> result = dsl.selectFrom(BIKE).fetch();
		System.out.println("Result are -- " + result);

		ResultSet rs1 = dsl.selectFrom(CARS).fetchResultSet();
		System.out.println("Result are -- " + rs1);

		Cursor<Record1<String>> rs2 = dsl.select(CARS.MODEL_NAME).from(CARS).fetchLazy();
		for (Record1<String> record : rs2){
			System.out.println("Result are fetchlazy -- " + record);
		}
		Stream<Record1<String>> rs3 = dsl.select(CARS.MODEL_NAME).from(CARS).fetchStream();

		rs3.forEach(record -> {
			System.out.println("Result are fetchStream -- " + record);
			// ...
		});

		CarsRecord Cars1 = dsl.selectFrom(CARS).where(CARS.MODEL_NAME.eq("Ertiga")).fetchOne();
		System.out.println("Result are -- " + Cars1);



	}
}


	

Example With Cars Entity

Example With Bike Entity

Insert Operation
    void AddData() {
		int insertedrow = dsl.insertInto(CARS).values(2,"TATA","NEXON",2012,100000000).execute();
		System.out.println("Insert Operation Row Affected are -- " + insertedrow);

		int insertedrow_bike = dsl.insertInto(BIKE).values(1,"Bajaj","Avenger",2012,150000).execute();
		System.out.println("Insert Operation Row Affected are -- " + insertedrow_bike);

		int insertedrow_bike2 = dsl.insertInto(BIKE).values(2,"Duke","KTM",2016,150000).execute();
		System.out.println("Insert Operation Row Affected are -- " + insertedrow_bike2);



	}

Delete Operation
	void DeleteData(){

		int deleterow = dsl.deleteFrom(CARS).where(CARS.ID.eq(2)).execute();
		System.out.println("Delete Operation Row Affected are -- " + deleterow);

		int deleterow_bike = dsl.deleteFrom(BIKE).where(BIKE.ID.eq(1)).execute();
		System.out.println("Delete Operation Row Affected are -- " + deleterow_bike);

	}

Update Operation
private void applyRuleFilter(HighlightDSLContext defaultDSLContext, Long aggregatedResultId, Long applicationId) {

        defaultDSLContext.update(AGGREGATED_CLOUD_TECHNOLOGY)
                .set(AGGREGATED_CLOUD_TECHNOLOGY.EXCLUSION, DSL.val(null,String.class))
                .set(AGGREGATED_CLOUD_TECHNOLOGY.MALUSRATIO, AGGREGATED_CLOUD_TECHNOLOGY.EXCLUDED_MALUSRATIO)
                .set(AGGREGATED_CLOUD_TECHNOLOGY.SCANINDICATOR, AGGREGATED_CLOUD_TECHNOLOGY.EXCLUDED_MALUSRATIO)
                .set(AGGREGATED_CLOUD_TECHNOLOGY.COUNTEDELEMENTS, AGGREGATED_CLOUD_TECHNOLOGY.EXCLUDED_COUNTEDELEMENTS)
                .where(AGGREGATED_CLOUD_TECHNOLOGY.AGGREGATED_RESULT_ID.eq(aggregatedResultId))
                .and(AGGREGATED_CLOUD_TECHNOLOGY.EXCLUSION.isNotNull())
                .execute();
}

Batch Operation
void execute_batchUpdate() {

	Result<BikeRecord> existingProjects = DSLContext.selectFrom(BIKE).where(BIKE.ID.eq(1)); 

	DSLContext.batchUpdate(existingProjects.stream().collect(Collectors.toList())).execute();

}

Raw SQL API

Raw SQL API Example
org.jooq.DSLContext.fetch
 // Import the necessary jOOQ classes
import org.jooq.impl.DSL;
import org.jooq.*;
import org.jooq.Record;
import static org.jooq.impl.DSL.*;
   
public class JooqSample {

	public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/vehicle";
        String uname = "root";
        String password = "mysql";
        String query = "select * from cars";

        /////////// Creating the connection with database //////////
        try {

            DSLContext context = DSL.using(url, uname, password);

            fetchRecord(context, query);
           

        } catch (Exception e) {
            System.out.println("\n Exception" + e);
        }

    }        


	public static void fetchRecord(DSLContext context, String query) {
        try {

            
            Result<Record> result = context.fetch(query);
            System.out.println("Result are -- " + result);

        } catch (Exception e) {
            System.out.println("\n Exception " + e);
        }

    }

}

org.jooq.DSLContext.execute
        public static void executeRecord(DSLContext context) {
        try {

            
            int rowCount = context.execute("insert into cars values(100,'Hyundai','verna',2016,1500000,3)");
            

            System.out.println("Number of row affected are -- " + rowCount);

        } catch (Exception e) {
            System.out.println("\n Exception " + e);
        }

    }

org.jooq.DSLContext.query
    public static void queryRecord(DSLContext context) {
        try {

            
            Query query = context.query("insert into cars values(100,'Hyundai','verna',2016,1500000)");
            

            System.out.println("Number of row affected are -- " + query);

        } catch (Exception e) {
            System.out.println("\n Exception " + e);
        }

    }

Limitations

  • Objects will not be created if evaluation fails to resolve the necessary parameter.