Skip to content

Commit 324cf9a

Browse files
committed
Add json support to sql queries and update example to show usage
1 parent 69465ec commit 324cf9a

File tree

23 files changed

+493
-568
lines changed

23 files changed

+493
-568
lines changed

querydsl-examples/querydsl-example-sql-spring/pom.xml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@
5151
<artifactId>querydsl-sql</artifactId>
5252
<version>${project.version}</version>
5353
</dependency>
54+
<dependency>
55+
<groupId>io.github.openfeign.querydsl</groupId>
56+
<artifactId>querydsl-sql-json</artifactId>
57+
<version>${project.version}</version>
58+
</dependency>
5459
<dependency>
5560
<groupId>io.github.openfeign.querydsl</groupId>
5661
<artifactId>querydsl-sql-spring</artifactId>
@@ -90,6 +95,13 @@
9095
<customType>com.querydsl.sql.types.LocalDateTimeType</customType>
9196
<customType>com.querydsl.sql.types.LocalDateType</customType>
9297
</customTypes>
98+
<typeMappings>
99+
<typeMapping>
100+
<table>CUSTOMER_ADDRESS</table>
101+
<column>ADDRESS</column>
102+
<type>com.querydsl.example.dto.Address</type>
103+
</typeMapping>
104+
</typeMappings>
93105
<packageName>com.querydsl.example.sql</packageName>
94106
<targetFolder>${project.basedir}/target/generated-sources/java</targetFolder>
95107
</configuration>

querydsl-examples/querydsl-example-sql-spring/src/main/java/com/querydsl/example/config/JdbcConfiguration.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
import com.querydsl.sql.H2Templates;
44
import com.querydsl.sql.SQLQueryFactory;
5-
import com.querydsl.sql.SQLTemplates;
65
import com.querydsl.sql.spring.SpringConnectionProvider;
76
import com.querydsl.sql.spring.SpringExceptionTranslator;
87
import com.querydsl.sql.types.LocalDateTimeType;
98
import com.querydsl.sql.types.LocalDateType;
9+
import io.github.openfeign.querydsl.sql.json.types.JSONType;
1010
import javax.sql.DataSource;
1111
import org.springframework.beans.factory.annotation.Autowired;
1212
import org.springframework.context.annotation.Bean;
@@ -25,7 +25,7 @@ public class JdbcConfiguration {
2525

2626
@Bean
2727
public DataSource dataSource() {
28-
SimpleDriverDataSource dataSource = new SimpleDriverDataSource();
28+
var dataSource = new SimpleDriverDataSource();
2929
Class driver;
3030
try {
3131
driver = Class.forName(env.getRequiredProperty("jdbc.driver"));
@@ -46,17 +46,18 @@ public PlatformTransactionManager transactionManager() {
4646

4747
@Bean
4848
public com.querydsl.sql.Configuration querydslConfiguration() {
49-
SQLTemplates templates = H2Templates.builder().build();
50-
com.querydsl.sql.Configuration configuration = new com.querydsl.sql.Configuration(templates);
49+
var templates = H2Templates.builder().build();
50+
var configuration = new com.querydsl.sql.Configuration(templates);
5151
configuration.setExceptionTranslator(new SpringExceptionTranslator());
5252
configuration.register(new LocalDateTimeType());
5353
configuration.register(new LocalDateType());
54+
configuration.register(new JSONType());
5455
return configuration;
5556
}
5657

5758
@Bean
5859
public SQLQueryFactory queryFactory() {
59-
SpringConnectionProvider provider = new SpringConnectionProvider(dataSource());
60+
var provider = new SpringConnectionProvider(dataSource());
6061
return new SQLQueryFactory(querydslConfiguration(), provider);
6162
}
6263
}

querydsl-examples/querydsl-example-sql-spring/src/main/java/com/querydsl/example/dao/CustomerDaoImpl.java

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,17 @@
11
package com.querydsl.example.dao;
22

33
import static com.querydsl.core.types.Projections.bean;
4-
import static com.querydsl.example.sql.QAddress.address;
54
import static com.querydsl.example.sql.QCustomer.customer;
65
import static com.querydsl.example.sql.QCustomerAddress.customerAddress;
76
import static com.querydsl.example.sql.QPerson.person;
87

98
import com.querydsl.core.group.GroupBy;
109
import com.querydsl.core.types.Predicate;
1110
import com.querydsl.core.types.QBean;
12-
import com.querydsl.example.dto.Address;
1311
import com.querydsl.example.dto.Customer;
1412
import com.querydsl.example.dto.CustomerAddress;
1513
import com.querydsl.example.dto.Person;
1614
import com.querydsl.sql.SQLQueryFactory;
17-
import com.querydsl.sql.dml.SQLInsertClause;
1815
import java.util.List;
1916
import org.springframework.beans.factory.annotation.Autowired;
2017
import org.springframework.transaction.annotation.Transactional;
@@ -30,7 +27,7 @@ public class CustomerDaoImpl implements CustomerDao {
3027
customerAddress.addressTypeCode,
3128
customerAddress.fromDate,
3229
customerAddress.toDate,
33-
bean(Address.class, address.all()).as("address"));
30+
customerAddress.address);
3431

3532
final QBean<Customer> customerBean =
3633
bean(
@@ -42,7 +39,7 @@ public class CustomerDaoImpl implements CustomerDao {
4239

4340
@Override
4441
public Customer findById(long id) {
45-
List<Customer> customers = findAll(customer.id.eq(id));
42+
var customers = findAll(customer.id.eq(id));
4643
return customers.isEmpty() ? null : customers.get(0);
4744
}
4845

@@ -52,14 +49,13 @@ public List<Customer> findAll(Predicate... where) {
5249
.from(customer)
5350
.leftJoin(customer.contactPersonFk, person)
5451
.leftJoin(customer._customer3Fk, customerAddress)
55-
.leftJoin(customerAddress.addressFk, address)
5652
.where(where)
5753
.transform(GroupBy.groupBy(customer.id).list(customerBean));
5854
}
5955

6056
@Override
6157
public Customer save(Customer c) {
62-
Long id = c.getId();
58+
var id = c.getId();
6359

6460
if (id == null) {
6561
id =
@@ -81,16 +77,11 @@ public Customer save(Customer c) {
8177
queryFactory.delete(customerAddress).where(customerAddress.customerId.eq(id)).execute();
8278
}
8379

84-
SQLInsertClause insert = queryFactory.insert(customerAddress);
80+
var insert = queryFactory.insert(customerAddress);
8581
for (CustomerAddress ca : c.getAddresses()) {
86-
if (ca.getAddress().getId() == null) {
87-
ca.getAddress()
88-
.setId(
89-
queryFactory.insert(address).populate(ca.getAddress()).executeWithKey(address.id));
90-
}
9182
insert
9283
.set(customerAddress.customerId, id)
93-
.set(customerAddress.addressId, ca.getAddress().getId())
84+
.set(customerAddress.address, ca.getAddress())
9485
.set(customerAddress.addressTypeCode, ca.getAddressTypeCode())
9586
.set(customerAddress.fromDate, ca.getFromDate())
9687
.set(customerAddress.toDate, ca.getToDate())

querydsl-examples/querydsl-example-sql-spring/src/main/java/com/querydsl/example/dto/Address.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
package com.querydsl.example.dto;
22

3+
import io.github.openfeign.querydsl.sql.json.*;
34
import lombok.Data;
45

56
@Data
6-
public class Address {
7+
public class Address implements JsonEntity {
78

89
private Long id;
910

querydsl-examples/querydsl-example-sql-spring/src/main/sql/001_schema.sql

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -82,23 +82,12 @@ create table customer_order_delivery (
8282
constraint order2_fk foreign key (order_id) references customer_order(id)
8383
);
8484

85-
create table address (
86-
id identity primary key,
87-
street varchar(64),
88-
zip varchar(64),
89-
town varchar(64),
90-
state varchar(64),
91-
country varchar(3),
92-
other_details varchar(64)
93-
);
94-
9585
create table customer_address (
9686
customer_id long,
97-
address_id long,
87+
address clob,
9888
from_date date,
9989
to_date date,
10090
address_type_code varchar(12),
10191

102-
constraint customer3_fk foreign key (customer_id) references customer(id),
103-
constraint address_fk foreign key (address_id) references address(id)
92+
constraint customer3_fk foreign key (customer_id) references customer(id)
10493
);

querydsl-libraries/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
<module>querydsl-sql</module>
2424
<module>querydsl-sql-spatial</module>
2525
<module>querydsl-sql-spring</module>
26+
<module>querydsl-sql-json</module>
2627
<!-- Reactive SQL -->
2728
<module>querydsl-r2dbc</module>
2829

0 commit comments

Comments
 (0)