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/