absolute links
[yosql.git] / yosql-website / content / persistence / jdbc.md
blobbfa30273016391ae9bacd539282bc546c079c9b7
1 ---
2 title: JDBC
3 date: 2019-09-27T18:51:08+02:00
4 menu:
5   main:
6     parent: Persistence APIs
7 categories:
8   - Persistence
9 tags:
10   - JDBC
11 ---
13 The `javax.sql` based implementation. It does not require any dependencies outside from standard JDK classes.
16 ## Tooling
18 ### Maven
20 In order to use `YoSQL` together with [Maven](https://maven.apache.org/), take a look at the tooling [documentation
21 for Maven](/tooling/maven/).
23 ```xml
24   <build>
25     <plugins>
26       ...
27       <plugin>
28         <groupId>wtf.metio.yosql</groupId>
29         <artifactId>yosql-tooling-maven</artifactId>
30         <configuration>
31           <apis>
32             <daoApi>JDBC</daoApi>
33           </apis>
34         </configuration>
35       </plugin>
36       ...
37     </plugins>
38   </build>
39 ```
41 ### Gradle
43 In order to use `YoSQL` together with [Gradle](https://gradle.org/), take a look at the tooling [documentation for Gradle](/tooling/gradle/).
45 ```groovy
46 plugins {
47   id("wtf.metio.yosql")
50 yosql {
51   apis {
52     daoApi = JDBC
53   }
55 ```
57 ### Bazel
59 In order to use `YoSQL` together with [Bazel](https://bazel.build/), take a look at the tooling [documentation for
60 Bazel](/tooling/bazel/).
62 ### CLI
64 In order to use YoSQL on the command line, take a look at the tooling [documentation for CLI](/tooling/cli/).
66 ```shell
67 $ yosql --apis-dao-api=JDBC
68 ```
70 The shorter form is available as well:
72 ```shell
73 $ yosql --dao-api=JDBC
74 ```
76 ## Manual Converters
78 The JDBC API offers no built-in object mapping mechanism. In order to use high level types of your domain, use a converter to map results to your types.
80 ```sql
81 -- results:
82 --   converter: my.own.UserConverter
83 SELECT  *
84 FROM    users
85 ```
87 You can either specify the fully-qualified name of the converter or use its alias. The result type is read from the converter configuration as well. This in turn changes the generated code into this:
89 ```java
90 // uses "User" as type argument for all return types
91 List<User> findUsers()
92 Stream<User> findUsersStreamEager()
93 Stream<User> findUsersStreamLazy()
94 Flowable<User> findUsersFlow()
95 ```
97 `my.own.UserConverter` could look like this:
99 ```java
100 package my.own;
102 import java.sql.ResultSet;
103 import java.sql.SQLException;
105 import my.own.User;
106 import my.own.persistence.util.ResultState;
108 public class UserConverter {
110     public final User asUserType(final ResultState result) throws SQLException {
111         final ResultSet resultSet = result.getResultSet();
112         final User pojo = new User();
113         pojo.setId(resultSet.getInt("id"));
114         pojo.setName(resultSet.getString("name"));
115         return pojo;
116     }