Spring dataでr 2 dbcを使用します.
5807 ワード
概要
上記の文章はSpring webFluxでr 2 dbcをどう使うかについて述べました.今日はspring-data-r 2 dbcというSpring dataを使ってr 2 dbcをパッケージ化してr 2 dbcを操作する方法を見てみます.
依存関係
Spring-datea-r 2 dbcを使用するには、以下の依存関係を設定する必要があります.
Spring-data-r 2 dbcはR 2 dbc Proptiesを使ってプロファイルの読み込みを行います.
簡単にR 2 dbc Proptiesの定義を見てください.
データベース初期化
データベース初期化の過程で、私たちはusersテーブルを作成する必要があります.ここではinitDatabase beanで実現します.
第二の部分はデータベーステーブルにデータを挿入します.
なお、上記の2つの部分の動作は、本当にReactive動作をトリガするためにsubscribe動作を実行する必要がある.
DAO操作
DAO操作の前に、私たちはUsers entityを作成する必要があります.
ReactiveCrudRepositoryは、save、saveAll、findById、existsByIdなどのDAOの基本的な操作を実装してくれました.
もちろん、上のfindByLastnameなどのSQL文もカスタマイズできます.
Service操作とTransaction
どのようにUserDaoを使って具体的な方法を操作するかを確認します.
制御装置
最後に、私たちは外部に対応する方法を暴露するためにcontrollerを作成しました.
はい、今私たちのプログラムはもう書きました.テストができます.
プログラムを実行します.
完璧で、実験は成功します.
本論文のコード:spring-data-r 2 dbc
本文の作者:flydeanプログラムのあれらの事
本論文のリンク:http://www.flydean.com/spring-data-r2dbc/
flydeanのブログ
私の公衆番号に注目してください.「プログラムに関すること」を最も分かりやすく解読し、最も深い商品、最も簡潔な教程、多くのあなたの知らない小さな技術などを発見してください.
上記の文章はSpring webFluxでr 2 dbcをどう使うかについて述べました.今日はspring-data-r 2 dbcというSpring dataを使ってr 2 dbcをパッケージ化してr 2 dbcを操作する方法を見てみます.
依存関係
Spring-datea-r 2 dbcを使用するには、以下の依存関係を設定する必要があります.
org.springframework.boot
spring-boot-starter-data-r2dbc
2.3.3.RELEASE
io.r2dbc
r2dbc-h2
${r2dbc-h2.version}
org.springframework.boot
spring-boot-starter-webflux
データベース接続の設定Spring-data-r 2 dbcはR 2 dbc Proptiesを使ってプロファイルの読み込みを行います.
簡単にR 2 dbc Proptiesの定義を見てください.
@ConfigurationProperties(prefix = "spring.r2dbc")
public class R2dbcProperties {
/**
* Database name. Set if no name is specified in the url. Default to "testdb" when
* using an embedded database.
*/
private String name;
/**
* Whether to generate a random database name. Ignore any configured name when
* enabled.
*/
private boolean generateUniqueName;
/**
* R2DBC URL of the database. database name, username, password and pooling options
* specified in the url take precedence over individual options.
*/
private String url;
/**
* Login username of the database. Set if no username is specified in the url.
*/
private String username;
/**
* Login password of the database. Set if no password is specified in the url.
*/
private String password;
したがって、私たちの配置ファイルはどうなっていますか?spring.r2dbc.url=r2dbc:h2:mem://./testdb
spring.r2dbc.username=sa
spring.r2dbc.password=password
ここで使っているのはH 2データベースです.データベース初期化
データベース初期化の過程で、私たちはusersテーブルを作成する必要があります.ここではinitDatabase beanで実現します.
@Bean
public ApplicationRunner initDatabase(DatabaseClient client, UsersDao usersDao) {
List statements = Arrays.asList(
"DROP TABLE IF EXISTS USERS;",
"CREATE TABLE IF NOT EXISTS USERS ( id SERIAL PRIMARY KEY, firstname VARCHAR(100) NOT NULL, lastname VARCHAR(100) NOT NULL);");
statements.forEach(sql -> executeSql(client,sql)
.doOnSuccess(count -> log.info("Schema created, rows updated: {}", count))
.doOnError(error -> log.error("got error : {}",error.getMessage(),error))
.subscribe()
);
return args ->getUser().flatMap(usersDao::save).subscribe(user -> log.info("User saved: {}", user));
}
private Flux getUser() {
return Flux.just(new Users(null, "John", "Doe"), new Users(null, "Jane", "Doe"));
}
private Mono executeSql(DatabaseClient client, String sql) {
return client.execute(sql).fetch().rowsUpdated();
}
上記の例では、データベースを作成して二つの部分に分けて、第一部分はデータベースschemaの操作で、dropとcreate tableの操作を実行しました.第二の部分はデータベーステーブルにデータを挿入します.
なお、上記の2つの部分の動作は、本当にReactive動作をトリガするためにsubscribe動作を実行する必要がある.
DAO操作
DAO操作の前に、私たちはUsers entityを作成する必要があります.
@Data
@AllArgsConstructor
public class Users {
@Id
private Integer id;
private String firstname;
private String lastname;
boolean hasId() {
return id != null;
}
}
私達が作成したUserDaoをもう一度見てみます.public interface UsersDao extends ReactiveCrudRepository {
@Query("select id, firstname, lastname from users c where c.lastname = :lastname")
Flux findByLastname(String lastname);
}
ここでは@Componentコメントを追加する必要はありません.ReactiveCrudRepositoryを継承しているので、UsersDaoの実例を自動的に作成してくれるので、そのまま使ってもいいです.ReactiveCrudRepositoryは、save、saveAll、findById、existsByIdなどのDAOの基本的な操作を実装してくれました.
もちろん、上のfindByLastnameなどのSQL文もカスタマイズできます.
Service操作とTransaction
どのようにUserDaoを使って具体的な方法を操作するかを確認します.
@Component
public class UsersService {
@Resource
private UsersDao usersDao;
@Transactional
public Mono save(Users user) {
return usersDao.save(user).map(it -> {
if (it.getFirstname().equals("flydean")) {
throw new IllegalStateException();
} else {
return it;
}
});
}
}
上記では、対応するUserオブジェクトを保存するためのsave方法を作成しました.制御装置
最後に、私たちは外部に対応する方法を暴露するためにcontrollerを作成しました.
@RestController
@RequiredArgsConstructor
public class UsersController {
private final UsersDao usersDao;
@GetMapping("/users")
public Flux findAll() {
return usersDao.findAll();
}
}
テストはい、今私たちのプログラムはもう書きました.テストができます.
プログラムを実行します.
curl "localhost:8080/users"
[{"id":1,"firstname":"John","lastname":"Doe"},{"id":2,"firstname":"Jane","lastname":"Doe"}]%
相応の結果を取り出したことが見えます.完璧で、実験は成功します.
本論文のコード:spring-data-r 2 dbc
本文の作者:flydeanプログラムのあれらの事
本論文のリンク:http://www.flydean.com/spring-data-r2dbc/
flydeanのブログ
私の公衆番号に注目してください.「プログラムに関すること」を最も分かりやすく解読し、最も深い商品、最も簡潔な教程、多くのあなたの知らない小さな技術などを発見してください.