Code ví dụ jOOQ – thêm, sửa, xóa dữ liệu

Code ví dụ jOOQ – thêm, sửa, xóa dữ liệu

Trong ví dụ này mình sẽ thực hiện kết nối java tới MySQL sử dụng jOOQ để insert/update/delete dữ liệu

Tạo database

Đầu tiên mình tạo database library với table auto như sau:

CREATE DATABASE `library`;

USE `library`;

CREATE TABLE `author` (
  `id` int NOT NULL,
  `first_name` varchar(255) DEFAULT NULL,
  `last_name` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`)
);

Tạo Maven Project

Code ví dụ jOOQ - thêm, sửa, xóa dữ liệu

Thư viện sử dụng:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>stackjava.com</groupId>
  <artifactId>jOOQDemo</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <properties>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.source>1.8</maven.compiler.source>
  </properties>

  <dependencies>

    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.16</version>
    </dependency>


    <dependency>
      <groupId>org.jooq</groupId>
      <artifactId>jooq</artifactId>
      <version>3.11.11</version>
    </dependency>
    <dependency>
      <groupId>org.jooq</groupId>
      <artifactId>jooq-meta</artifactId>
      <version>3.11.11</version>
    </dependency>
    <dependency>
      <groupId>org.jooq</groupId>
      <artifactId>jooq-codegen</artifactId>
      <version>3.11.11</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.jooq</groupId>
        <artifactId>jooq-codegen-maven</artifactId>
        <executions>
          <execution>
            <id>jooq</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>generate</goal>
            </goals>
            <configuration>
              <skip>${maven.generate-sources.skip}</skip>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.16</version>
          </dependency>
        </dependencies>
        <configuration>
          <jdbc>
            <driver>com.mysql.cj.jdbc.Driver</driver>
            <url>jdbc:mysql://localhost:3306/library</url>
            <user>root</user>
            <password>admin1234</password>
          </jdbc>
          <generator>
            <name>org.jooq.codegen.JavaGenerator</name>
            <database>
              <name>org.jooq.meta.mysql.MySQLDatabase</name>
              <includes>.*</includes>
              <excludes />
              <inputSchema>library</inputSchema>
            </database>
            <target>
              <packageName>stackjava.com.jooq</packageName>
              <directory>src/main/java</directory>
            </target>
          </generator>
        </configuration>
      </plugin>
    </plugins>
  </build>

</project>

Phần class entity mình sẽ thực hiện generate từ database

(Xem lại: Code ví dụ jOOQ, generate/tạo class từ table, database)

Thực hiện insert data

package stackjava.com.jooq.test;

import java.sql.Connection;
import java.sql.DriverManager;

import org.jooq.DSLContext;
import org.jooq.SQLDialect;
import org.jooq.impl.DSL;

import stackjava.com.jooq.Tables;
import stackjava.com.jooq.tables.records.AuthorRecord;


public class DemoInsert {
    public static void main(String[] args) throws Exception {
          String user = "root";
          String password = "admin1234";
          String url = "jdbc:mysql://localhost:3306/library";
          try (Connection connection = DriverManager.getConnection(url, user, password)) {
              DSLContext dslContext = DSL.using(connection, SQLDialect.MYSQL);
              
              AuthorRecord r1 = new AuthorRecord(1, "Tolstoy", "Lev Nikolayevich");
              AuthorRecord r2 = new AuthorRecord(2, "Shakespeare", "William");
              
              dslContext.newRecord(Tables.AUTHOR, r1).store();
              dslContext.newRecord(Tables.AUTHOR, r2).store();
              
              // or
              dslContext
              .insertInto(Tables.AUTHOR, Tables.AUTHOR.ID, Tables.AUTHOR.FIRST_NAME, Tables.AUTHOR.LAST_NAME)
              .values(3, "Conan Doyle", "Arthur")
              .values(4, "Hugo", "Victor")
              .execute();
              
              // or
              dslContext
              .insertInto(Tables.AUTHOR)
              .set(Tables.AUTHOR.ID, 5)
              .set(Tables.AUTHOR.FIRST_NAME, "Rowling")
              .set(Tables.AUTHOR.LAST_NAME, "J.K")
              .execute();
              
              System.out.println("Inserted!");
          }
          catch (Exception e) {
              e.printStackTrace();
          }
      }
}

Để thực hiện xử lý (truy vấn, thêm, sửa, xóa) data với database ta dùng đối tượng dslContext

dslContext trong jOOQ tương tự như session/entityManager trong hibernate hay Statement trong jdbc

Ta có thể thực hiện insert đối tượng giống như Hibernate bằng cách sử dụng newRecord(). Hoặc sử dụng hàm insertInto() để chỉ rõ giá trị từng field.

Chạy file DemoInsert.java

Kết quả:

Inserted!

Code ví dụ jOOQ - thêm, sửa, xóa dữ liệu

Thực hiện update dữ liệu:

Ví dụ sửa last name thành Stepenie và first name thành Meyer đối với bản ghi có id = 5

package stackjava.com.jooq.test;

import java.sql.Connection;
import java.sql.DriverManager;

import org.jooq.DSLContext;
import org.jooq.SQLDialect;
import org.jooq.impl.DSL;

import stackjava.com.jooq.Tables;

public class DemoUpdate {
  public static void main(String[] args) throws Exception {
    String user = "root";
    String password = "admin1234";
    String url = "jdbc:mysql://localhost:3306/library";
    try (Connection connection = DriverManager.getConnection(url, user, password)) {
      DSLContext dslContext = DSL.using(connection, SQLDialect.MYSQL);

      dslContext.update(Tables.AUTHOR).set(Tables.AUTHOR.FIRST_NAME, "Meyer")
          .set(Tables.AUTHOR.LAST_NAME, "Stephenie").where(Tables.AUTHOR.ID.eq(5)).execute();

      System.out.println("Updated!");
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

Để update dữ liệu ta dùng hàm update() với điều kiện where() (Trong bài truy vấn data bằng jOOQ mình sẽ nói rõ về method where())

Chạy file DemoUpdate.java

Updated!

Code ví dụ jOOQ - thêm, sửa, xóa dữ liệu

Xóa dữ liệu

Tương tự với update, để xóa dữ liệu ta dùng method delete()

Ví dụ xóa các bản ghi có id > 3

package stackjava.com.jooq.test;

import java.sql.Connection;
import java.sql.DriverManager;

import org.jooq.DSLContext;
import org.jooq.SQLDialect;
import org.jooq.impl.DSL;

import stackjava.com.jooq.Tables;


public class DemoDelete {
    public static void main(String[] args) throws Exception {
          String user = "root";
          String password = "admin1234";
          String url = "jdbc:mysql://localhost:3306/library";
          try (Connection connection = DriverManager.getConnection(url, user, password)) {
              DSLContext dslContext = DSL.using(connection, SQLDialect.MYSQL);
              
              dslContext.deleteFrom(Tables.AUTHOR).where(Tables.AUTHOR.ID.gt(3)).execute();
              
              System.out.println("Deleted!");
          }
          catch (Exception e) {
              e.printStackTrace();
          }
      }
}

Chạy file DemoDelete.java

Deleted!

Code ví dụ jOOQ - thêm, sửa, xóa dữ liệu

 

Okay, Done!

Download code ví dụ trên tại đây.

 

References: https://www.jooq.org/doc/3.11/manual/sql-building/

stackjava.com