[Spring boot + spring data] Viết một ứng dụng nhỏ sử dụng spring boot + spring datajdbc
spring boot
65
spring data
3
White

xoandaica viết ngày 07/02/2019

Bài viết này sẽ hướng dẫn các bạn từng bước xây dựng một ứng dụng java sử dụng spring boot kết hợp với spring data jdbc để lưu trữ và nhận dữ liệu trong cơ sở dữ liệu quan hệ.

A. Đầu ra

Một ứng dụng nhỏ lưu trữ và truy xuất dữ liệu Account trong cơ sở dữ liệu

B. Đầu vào

  • Jdk 1.8
  • Maven 3.2+
  • IDE tùy ý (MÌnh dùng netbean, các bạn có thể import luôn cái file pom vào cũng được) ### C. Các bước thực hiện 1. Cấu trúc thư mục

2. File pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
        <relativePath/>
        <!-- lookup parent from repository -->
    </parent>
    <groupId>com.vnpt.ssdc.springjdbc</groupId>
    <artifactId>springjdbc</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springjdbc</name>
    <description>Demo project for Spring Boot + Spring JDBC</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.1.4.RELEASE</version>
            <type>jar</type>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.5</version>
            <type>jar</type>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

File Pom trên định nghĩa những gì:

  • Định nghĩa ứng dụng trên đang sử dụng spring boot (Thông qua thẻ parent)
  • Định nghĩa các lib mà nó phụ thuộc (Thông qua thẻ dependency)
  • Khai báo thêm maven plugin (Mục đich của nó các bạn có thể tham khảo tại đây: https://bit.ly/2DjiLYK)

3. Xây dựng đối tượng Account

Bài viết này mình chỉ làm ở mức hết sức basic nên chúng ta sẽ định nghĩa một đối tượng đơn giản để lưu trữ thông tin Account bao gồm usesname và password

public class Account {

    private Long id;
    private String userName;
    private String password;

    public Account() {
    }

    public Account(String userName, String password) {
        this.userName = userName;
        this.password = password;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

}

3. DAO pattern

Để giữ cho logic của tầng nghiệp vụ trong suốt với tầng trình diễn chúng ta sẽ sử dụng một design patter căn bản của java là DAO pattern. Design pattern này có chức năng gì?

  • Định nghĩa một tập các method thao tác với đối tượng Account thong qua interface AccountDao.
  • Định nghĩa một object cài đặt các logic nghiệp vụ đã khai báo trong interface trên.
  • Ẩn đi logic thực hiện.

Ở đây để có thể query với cơ sở dữ liệu, chúng ta sử dụng một đối tượng gọi là jdbcTemplate, là một thành phần trong jdbccore của spring. Thông thường để có thể thực hiện một truy vấn trong jdbc, người sử dụng phải thực hiện khai báo đóng mở connection các kiểu, sử dụng jdbctemplate giúp ta tiết kiệm thời gian cho các bước ấy và chỉ tập trung vào việc viết query và map dữ liệu trả về vào các object đã được định nghĩa trước.

4. Account controller

Để đơn giản, minh xây dựng một lớp account controller tự thực hiện các thao tác insert dữ liệu, fetch dữ liệu hiển thị ra màn hình console thay cho việc sử dụng giao diện web

    @Autowired
    AccountDaoManager accountService;

    public void run() {
        Account acc = new Account("soithattha", "123456");
        accountService.addAccount(acc);
        logger.info("Add account " + new Gson().toJson(acc));

        acc = new Account("hungdd", "123456");
        accountService.addAccount(acc);
        logger.info("Add account " + new Gson().toJson(acc));

        logger.info("fetchAll:");
        List<Account> accounts = accountService.fetchAll();
        accounts.forEach(s -> System.out.println(new Gson().toJson(s)));

    }

5. App Runner

AppRunner là một đống tượng cài đặt interface CommandLineRunner của springboot, tác dụng duy nhất của nó ở đây là sẽ class này sẽ được run sau khi ứng dụng kết thúc việc khởi tạo các bean.

    @Autowired
    private AccountController controller;

    @Override
    public void run(String... args) throws Exception {
        controller.run();
    }

6. App Configuration

    @Bean
    @Primary
    public DataSource getDataSource() {

        return new EmbeddedDatabaseBuilder()
                .setType(EmbeddedDatabaseType.H2)
                .addScript("createAccountTable.sql")
                .build();
    }

    @Bean
    public JdbcTemplate getJDBCTemplate() {
        return new JdbcTemplate(getDataSource());
    }

Ở đây chúng ta sử dụng cơ sở dữ liệu h2 dạng nhúng, tức là khi ứng dụng chạy nó sẽ tự tạo một cơ sở dữ liệu quan hệ cho người dùng mà không cần phải khai báo các thông tin như username, password, driver v.v....
Script createAccountTable.sql được sẽ được run cùng lúc khởi tạo cơ sở dữ liệu trên.
Để có thể sử dụng được jdbcTemplate chúng ta cần phải khai báo datasource cho nó.

7. Demo

8. Full source

https://bit.ly/2SxZlZT

Ps: Bác nào thắc mắc gì cứ comment ở dưới nhé, rất sẵn lòng giải đáp

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

xoandaica

14 bài viết.
6 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
2 0
1. Single Thread 1. Làm một việc tại một thời điểm Không giống như đa số các ngôn ngữ lập trình khác, javascript đơn giản là đơn luồng. Điều này ...
xoandaica viết 7 tháng trước
2 0
White
2 0
1. Prepare Tools IDE: Netbean 8.2 JDK: 1.8 Maven: 3.5.0 2. Target Build project thỏa mãn các yêu cầu sau: Sử dụng spring boot + spring ...
xoandaica viết 7 tháng trước
2 0
White
2 0
1.Overview and Spring Architecture Spring security là một framework của spring được tạo ra nhằm phục vụ việc Authentication(Xác thực) và Authorizat...
xoandaica viết 7 tháng trước
2 0
Bài viết liên quan
White
27 14
Hướng dẫn lập trình Spring Security Trong bài viết lần này, mình sẽ giúp các bạn bước đầu tìm hiểu (Link) thông qua xây dựng các chức năng: Đăng ...
Nguyễn Tuấn Anh viết hơn 2 năm trước
27 14
White
46 41
MyContact là một ứng dụng mà mình thường viết mỗi khi học một ngôn ngữ hay công nghệ mới. MyContact chỉ là một ứng dụng CRUD đơn giản, cho phép ngư...
Nguyễn Tuấn Anh viết hơn 2 năm trước
46 41
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
14 bài viết.
6 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!