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
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!
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!
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!
Okay, Done!
Download code ví dụ trên tại đây.
References: https://www.jooq.org/doc/3.11/manual/sql-building/