jOOQ - DML语句



jOOQ支持各种SQL语句。这些SQL语句由DSLContext对象创建。它将根据查询类型返回结果。在本教程中,我们将学习DML语句以及如何在jOOQ中创建和执行它们。

什么是DML?

DML代表数据操纵语言 (Data Manipulation Language)。如果您熟悉SQL,您可能已经了解它的命令。DML是一组SQL命令,允许您修改给定数据库中的数据。最常见的DML操作是

  • SELECT:此操作将从指定的表中检索数据。

  • INSERT:它将新数据插入到给定的表中。

  • UPDATE:用于修改表中现有数据。

  • DELETE:它从指定的表中删除数据。

创建DML语句的jOOQ方法

在jOOQ中,DSL类提供了一组用于创建DML语句的方法,如下表所示:

序号 方法和描述
1. insertInto(Table<Record> table)

此方法用于启动对给定表的INSERT语句。

2. set(Field<T> field, T value)

此方法用于在插入和更新记录时设置字段的值。

3. values(Object... values)

它用于定义要插入表中的值。

4. update(Table<Record> table)

此方法用于启动对指定表的UPDATE语句。

5. deleteFrom(Table<Record> table)

它用于启动对指定表的DELETE语句。

6. select(Field<?>... fields)

此方法用于使用指定的字段创建SELECT查询。

7. from(Table<?>... tables)

此方法用于指定要从中选择数据的表。

jOOQ中DML语句示例

在此示例中,我们将执行INSERT操作以添加新行。假设现有的表employee存储以下记录:

ID 姓名 职位
1 Aman 技术撰写人
4 Vivek 开发者

要使用jOOQ插入新记录,请在src -> main -> java -> com.example.demo内部创建一个包。com.example.demo文件夹的名称将取决于您的项目名称。在这个包内创建一个Java类。我们命名了包service和Java类EmployeeService.java。您可以随意命名。

将以下代码片段复制并粘贴到EmployeeService.java文件中。(此处省略代码示例)

package com.example.demo.service;

import org.jooq.*;
import org.jooq.Record;
import org.jooq.impl.DSL;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import javax.sql.DataSource;

@Service
public class EmployeeService {

   private final DataSource dataSource;

   @Autowired
   public EmployeeService(DataSource dataSource) {
       this.dataSource = dataSource;
   }

   public void run() {
       // Create a DSLContext using the DataSource
       DSLContext create = DSL.using(dataSource, SQLDialect.MYSQL);

       // Manually define the table and columns
       Table<?> employee = DSL.table("employee");
       Field<Integer> id = DSL.field("id", Integer.class);
       Field<String> name = DSL.field("name", String.class);
       Field<String> jobTitle = DSL.field("job_title", String.class);

       // Insert a new employee record into the table
       create.insertInto(employee, id, name, jobTitle)
          .values(2, "Shriansh", "Software Engineer")
          .execute();
	   // Fetch the values from the employee table
       Result<Record3<Integer, String, String>> result = create.select(id, name, jobTitle)
          .from(employee)
          .fetch();

       // Print the results
       for (Record record : result) {
          Integer employeeId = record.get(id);
          String employeeName = record.get(name);
          String employeeJobTitle = record.get(jobTitle);
	    
          System.out.println("ID: " + employeeId + ", Name: " + employeeName + ", Job Title: " + employeeJobTitle);
       }
   }
}

现在,导航到com.example.demo文件夹内的DemoApplication.java文件。并编写以下代码:(此处省略代码示例)

package com.example.demo;

import com.example.demo.service.EmployeeService;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication implements CommandLineRunner {

   private final EmployeeService demoApplication;
      
   public DemoApplication(EmployeeService demoApplication) {
      this.demoApplication = demoApplication;
   }
      
   public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
   }
      
   @Override
   public void run(String... args) throws Exception {
      demoApplication.run();
   }
}

运行此代码时,它将打印更新后的表:(此处省略代码示例)

ID: 1, Name: Aman, Job Title: Technical Writer
ID: 2, Name: Shriansh, Job Title: Software Engineer
ID: 4, Name: Vivek, Job Title: Developer
广告