Jdbc mysql pom

Để tiếp tục trong loạt bài Spring Boot này, tôi không thể bỏ qua một phần quan trọng đó là giao tiếp với Cơ sở dữ liệu

Nếu bạn cần xem lại các bài viết trước, thì nó ở đây

  1. 「Khởi động mùa xuân #8」Tạo web Helloworld với @Controller
  2. 「Khởi động mùa xuân #9」Giải thích cách Thymeleaf vận hành + Biểu thức + Bản demo đầy đủ
  3. 「Khởi động mùa xuân #10」@RequestMapping + @PostMapping + @ModelAttribute + @RequestParam + Web To-Do với Thymeleaf

Vì thiếu phần kết nối với Database nên chúng ta chưa thể hoàn thiện trang Web của mình, trong bài này chúng ta sẽ tìm hiểu Spring Boot JPA

Khởi động mùa xuân JPA

Spring Boot JPA là một phần trong hệ sinh thái Spring Data, nó tạo ra một lớp ở giữa tầng dịch vụ và cơ sở dữ liệu, giúp chúng ta thao tác với cơ sở dữ liệu một cách dễ dàng hơn, cấu hình tự động và mã giảm thiểu dư thừa

Spring Boot JPA đã bao bọc Hibernate và tạo ra một giao diện mạnh mẽ. Nếu như bạn gặp khó khăn khi làm việc với Hibernate thì đừng lo, hãy để Spring JPA làm hộ

Cài đặt

Để thêm Spring JPA vào dự án, bạn cần thêm phụ thuộc

@Entity
@Table(name = "user")
@Data
public class User implements Serializable {
    private static final long serialVersionUID = -297553281792804396L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // Mapping thông tin biến với tên cột trong Database
    @Column(name = "hp")
    private int hp;
    @Column(name = "stamina")
    private int stamina;

    // Nếu không đánh dấu @Column thì sẽ mapping tự động theo tên biến
    private int atk;
    private int def;
    private int agi;
}
0

Ngoài ra, để kết nối với MySql, chúng ta cần có trình điều khiển tương thích, vì vậy phải bổ sung thêm cả sự phụ thuộc

@Entity
@Table(name = "user")
@Data
public class User implements Serializable {
    private static final long serialVersionUID = -297553281792804396L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // Mapping thông tin biến với tên cột trong Database
    @Column(name = "hp")
    private int hp;
    @Column(name = "stamina")
    private int stamina;

    // Nếu không đánh dấu @Column thì sẽ mapping tự động theo tên biến
    private int atk;
    private int def;
    private int agi;
}
1 vào pom. xml

quả bông. xml



    4.0.0
    pom
    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.5.RELEASE
         
    
    me.loda.spring
    spring-boot-learning
    0.0.1-SNAPSHOT
    spring-boot-learning
    Everything about Spring Boot

    
        1.8
    

    

        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
        
            org.springframework.boot
            spring-boot-starter-data-jpa
        

        
        
            mysql
            mysql-connector-java
        
    

    
        
        
            org.springframework.boot
            spring-boot-maven-plugin
        
        
    


Constructor directory

Jdbc mysql pom

Mục đích ban đầu của Hibernate là giúp người lập trình dễ sử dụng, tuy nhiên, trên thực tế, nhiều người gặp khó khăn trong việc sử dụng với Hibernate hơn cả

@Entity
@Table(name = "user")
@Data
public class User implements Serializable {
    private static final long serialVersionUID = -297553281792804396L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // Mapping thông tin biến với tên cột trong Database
    @Column(name = "hp")
    private int hp;
    @Column(name = "stamina")
    private int stamina;

    // Nếu không đánh dấu @Column thì sẽ mapping tự động theo tên biến
    private int atk;
    private int def;
    private int agi;
}
9

Nắm bắt được vấn đề này, Spring Data đã trình bao bọc lên Hibernate một lớp nữa được gọi là Spring JPA, giúp mọi thao tác với DB của chúng ta rút ngắn xuống còn 1 dòng và tất nhiên là làm mờ Hibernate down đáng kể để tránh rắc rối

Kho lưu trữ Jpa

Để sử dụng Spring JPA, bạn cần sử dụng giao diện

// Giả sử đã có đối tượng session rồi
Session session = getSession();

try {
    // Tất cả các lệnh hành động với DB thông qua Hibernate
    // đều phải nằm trong 1 giao dịch (Transaction)
    // Bắt đầu giao dịch
    session.getTransaction().begin();

    // Tạo một query

    String sql = "Select u from " + User.class.getName() + " u ";

    // Tạo đối tượng Query.
    Query<User> query = session.createQuery(sql);

    // Thực hiện truy vấn và lấy ra dữ liệu.
    List<User> users = query.getResultList();

    // In ra màn hình
    for (User user : users) {
        System.out.println(user);
    }

    // Commit dữ liệu và kết thúc session.
    session.getTransaction().commit();
} catch (Exception e) {
    e.printStackTrace();
    // Rollback trong trường hợp có lỗi xẩy ra.
    session.getTransaction().rollback();
}
0

Yêu cầu của giao diện này là bạn phải cung cấp 2 thông tin

  1. Thực thể ( Đối tượng tương ứng với Bảng trong DB)
  2. Kiểu dữ liệu của khóa chính (khóa chính)

Ví dụ. Tôi muốn lấy thông tin của bảng

@Entity
@Table(name = "user")
@Data
public class User implements Serializable {
    private static final long serialVersionUID = -297553281792804396L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // Mapping thông tin biến với tên cột trong Database
    @Column(name = "hp")
    private int hp;
    @Column(name = "stamina")
    private int stamina;

    // Nếu không đánh dấu @Column thì sẽ mapping tự động theo tên biến
    private int atk;
    private int def;
    private int agi;
}
4 thì làm như sau

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

Vì thế thôi,

// Giả sử đã có đối tượng session rồi
Session session = getSession();

try {
    // Tất cả các lệnh hành động với DB thông qua Hibernate
    // đều phải nằm trong 1 giao dịch (Transaction)
    // Bắt đầu giao dịch
    session.getTransaction().begin();

    // Tạo một query

    String sql = "Select u from " + User.class.getName() + " u ";

    // Tạo đối tượng Query.
    Query<User> query = session.createQuery(sql);

    // Thực hiện truy vấn và lấy ra dữ liệu.
    List<User> users = query.getResultList();

    // In ra màn hình
    for (User user : users) {
        System.out.println(user);
    }

    // Commit dữ liệu và kết thúc session.
    session.getTransaction().commit();
} catch (Exception e) {
    e.printStackTrace();
    // Rollback trong trường hợp có lỗi xẩy ra.
    session.getTransaction().rollback();
}
2 đánh dấu
// Giả sử đã có đối tượng session rồi
Session session = getSession();

try {
    // Tất cả các lệnh hành động với DB thông qua Hibernate
    // đều phải nằm trong 1 giao dịch (Transaction)
    // Bắt đầu giao dịch
    session.getTransaction().begin();

    // Tạo một query

    String sql = "Select u from " + User.class.getName() + " u ";

    // Tạo đối tượng Query.
    Query<User> query = session.createQuery(sql);

    // Thực hiện truy vấn và lấy ra dữ liệu.
    List<User> users = query.getResultList();

    // In ra màn hình
    for (User user : users) {
        System.out.println(user);
    }

    // Commit dữ liệu và kết thúc session.
    session.getTransaction().commit();
} catch (Exception e) {
    e.printStackTrace();
    // Rollback trong trường hợp có lỗi xẩy ra.
    session.getTransaction().rollback();
}
3 là một Bean và chịu trách nhiệm giao tiếp với DB

Spring Boot sẽ tìm thấy tự động và khởi động tạo đối tượng

// Giả sử đã có đối tượng session rồi
Session session = getSession();

try {
    // Tất cả các lệnh hành động với DB thông qua Hibernate
    // đều phải nằm trong 1 giao dịch (Transaction)
    // Bắt đầu giao dịch
    session.getTransaction().begin();

    // Tạo một query

    String sql = "Select u from " + User.class.getName() + " u ";

    // Tạo đối tượng Query.
    Query<User> query = session.createQuery(sql);

    // Thực hiện truy vấn và lấy ra dữ liệu.
    List<User> users = query.getResultList();

    // In ra màn hình
    for (User user : users) {
        System.out.println(user);
    }

    // Commit dữ liệu và kết thúc session.
    session.getTransaction().commit();
} catch (Exception e) {
    e.printStackTrace();
    // Rollback trong trường hợp có lỗi xẩy ra.
    session.getTransaction().rollback();
}
3 trong Context. Việc tạo ra
// Giả sử đã có đối tượng session rồi
Session session = getSession();

try {
    // Tất cả các lệnh hành động với DB thông qua Hibernate
    // đều phải nằm trong 1 giao dịch (Transaction)
    // Bắt đầu giao dịch
    session.getTransaction().begin();

    // Tạo một query

    String sql = "Select u from " + User.class.getName() + " u ";

    // Tạo đối tượng Query.
    Query<User> query = session.createQuery(sql);

    // Thực hiện truy vấn và lấy ra dữ liệu.
    List<User> users = query.getResultList();

    // In ra màn hình
    for (User user : users) {
        System.out.println(user);
    }

    // Commit dữ liệu và kết thúc session.
    session.getTransaction().commit();
} catch (Exception e) {
    e.printStackTrace();
    // Rollback trong trường hợp có lỗi xẩy ra.
    session.getTransaction().rollback();
}
3 hoàn toàn tự động và tự động cấu hình, vì chúng ta đã kế thừa
// Giả sử đã có đối tượng session rồi
Session session = getSession();

try {
    // Tất cả các lệnh hành động với DB thông qua Hibernate
    // đều phải nằm trong 1 giao dịch (Transaction)
    // Bắt đầu giao dịch
    session.getTransaction().begin();

    // Tạo một query

    String sql = "Select u from " + User.class.getName() + " u ";

    // Tạo đối tượng Query.
    Query<User> query = session.createQuery(sql);

    // Thực hiện truy vấn và lấy ra dữ liệu.
    List<User> users = query.getResultList();

    // In ra màn hình
    for (User user : users) {
        System.out.println(user);
    }

    // Commit dữ liệu và kết thúc session.
    session.getTransaction().commit();
} catch (Exception e) {
    e.printStackTrace();
    // Rollback trong trường hợp có lỗi xẩy ra.
    session.getTransaction().rollback();
}
0

Bây giờ, việc lấy toàn bộ

@Entity
@Table(name = "user")
@Data
public class User implements Serializable {
    private static final long serialVersionUID = -297553281792804396L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // Mapping thông tin biến với tên cột trong Database
    @Column(name = "hp")
    private int hp;
    @Column(name = "stamina")
    private int stamina;

    // Nếu không đánh dấu @Column thì sẽ mapping tự động theo tên biến
    private int atk;
    private int def;
    private int agi;
}
4 sẽ như sau

@Autowired
UserRepository userRepository;

userRepository.findAll()
                .forEach(System.out::println);

Đơn giản và rút gọn hơn rất nhiều

Nếu bạn đang tìm kiếm thì sẽ thấy

// Giả sử đã có đối tượng session rồi
Session session = getSession();

try {
    // Tất cả các lệnh hành động với DB thông qua Hibernate
    // đều phải nằm trong 1 giao dịch (Transaction)
    // Bắt đầu giao dịch
    session.getTransaction().begin();

    // Tạo một query

    String sql = "Select u from " + User.class.getName() + " u ";

    // Tạo đối tượng Query.
    Query<User> query = session.createQuery(sql);

    // Thực hiện truy vấn và lấy ra dữ liệu.
    List<User> users = query.getResultList();

    // In ra màn hình
    for (User user : users) {
        System.out.println(user);
    }

    // Commit dữ liệu và kết thúc session.
    session.getTransaction().commit();
} catch (Exception e) {
    e.printStackTrace();
    // Rollback trong trường hợp có lỗi xẩy ra.
    session.getTransaction().rollback();
}
3 có hàng ngàn phương pháp mà chúng ta không cần phải viết lại nữa. Vì nó kế thừa
// Giả sử đã có đối tượng session rồi
Session session = getSession();

try {
    // Tất cả các lệnh hành động với DB thông qua Hibernate
    // đều phải nằm trong 1 giao dịch (Transaction)
    // Bắt đầu giao dịch
    session.getTransaction().begin();

    // Tạo một query

    String sql = "Select u from " + User.class.getName() + " u ";

    // Tạo đối tượng Query.
    Query<User> query = session.createQuery(sql);

    // Thực hiện truy vấn và lấy ra dữ liệu.
    List<User> users = query.getResultList();

    // In ra màn hình
    for (User user : users) {
        System.out.println(user);
    }

    // Commit dữ liệu và kết thúc session.
    session.getTransaction().commit();
} catch (Exception e) {
    e.printStackTrace();
    // Rollback trong trường hợp có lỗi xẩy ra.
    session.getTransaction().rollback();
}
0 rồi

Jdbc mysql pom

Nguyễn Hoàng Nam @loda-kun

Theo dõi

2. 3K 180 47

Đã đăng vào ngày 31 tháng 5 năm 2019 5. 14 CH 5 phút đọc

2. 4K

0

0

「Khởi động mùa xuân #11」 Hướng dẫn Khởi động mùa xuân JPA + MySQL

  • Report
  • Add to series of me

Bài đăng này đã không được cập nhật trong 3 năm

Nguồn. loda. tôi

Giới thiệu

Để tiếp tục trong loạt bài Spring Boot này, tôi không thể bỏ qua một phần quan trọng đó là giao tiếp với Cơ sở dữ liệu

Nếu bạn cần xem lại các bài viết trước, thì nó ở đây

  1. 「Khởi động mùa xuân #8」Tạo web Helloworld với @Controller
  2. 「Khởi động mùa xuân #9」Giải thích cách Thymeleaf vận hành + Biểu thức + Bản demo đầy đủ
  3. 「Khởi động mùa xuân #10」@RequestMapping + @PostMapping + @ModelAttribute + @RequestParam + Web To-Do với Thymeleaf

Vì thiếu phần kết nối với Database nên chúng ta chưa thể hoàn thiện trang Web của mình, trong bài này chúng ta sẽ tìm hiểu Spring Boot JPA

Khởi động mùa xuân JPA

Spring Boot JPA là một phần trong hệ sinh thái Spring Data, nó tạo ra một lớp ở giữa tầng dịch vụ và cơ sở dữ liệu, giúp chúng ta thao tác với cơ sở dữ liệu một cách dễ dàng hơn, cấu hình tự động và mã giảm thiểu dư thừa

Spring Boot JPA đã bao bọc Hibernate và tạo ra một giao diện mạnh mẽ. Nếu như bạn gặp khó khăn khi làm việc với Hibernate thì đừng lo, hãy để Spring JPA làm hộ

Cài đặt

Để thêm Spring JPA vào dự án, bạn cần thêm phụ thuộc

@Entity
@Table(name = "user")
@Data
public class User implements Serializable {
    private static final long serialVersionUID = -297553281792804396L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // Mapping thông tin biến với tên cột trong Database
    @Column(name = "hp")
    private int hp;
    @Column(name = "stamina")
    private int stamina;

    // Nếu không đánh dấu @Column thì sẽ mapping tự động theo tên biến
    private int atk;
    private int def;
    private int agi;
}
0

Ngoài ra, để kết nối với MySql, chúng ta cần có trình điều khiển tương thích, vì vậy phải bổ sung thêm cả sự phụ thuộc

@Entity
@Table(name = "user")
@Data
public class User implements Serializable {
    private static final long serialVersionUID = -297553281792804396L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // Mapping thông tin biến với tên cột trong Database
    @Column(name = "hp")
    private int hp;
    @Column(name = "stamina")
    private int stamina;

    // Nếu không đánh dấu @Column thì sẽ mapping tự động theo tên biến
    private int atk;
    private int def;
    private int agi;
}
1 vào pom. xml

quả bông. xml



    4.0.0
    pom
    
        org.springframework.boot
        spring-boot-starter-parent
        2.0.5.RELEASE
         
    
    me.loda.spring
    spring-boot-learning
    0.0.1-SNAPSHOT
    spring-boot-learning
    Everything about Spring Boot

    
        1.8
    

    

        
        
            org.springframework.boot
            spring-boot-starter-web
        

        
        
            org.springframework.boot
            spring-boot-starter-data-jpa
        

        
        
            mysql
            mysql-connector-java
        
    

    
        
        
            org.springframework.boot
            spring-boot-maven-plugin
        
        
    


Constructor directory

Jdbc mysql pom

Mục đích ban đầu của Hibernate là giúp người lập trình dễ sử dụng, tuy nhiên, trên thực tế, nhiều người gặp khó khăn trong việc sử dụng với Hibernate hơn cả

@Entity
@Table(name = "user")
@Data
public class User implements Serializable {
    private static final long serialVersionUID = -297553281792804396L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // Mapping thông tin biến với tên cột trong Database
    @Column(name = "hp")
    private int hp;
    @Column(name = "stamina")
    private int stamina;

    // Nếu không đánh dấu @Column thì sẽ mapping tự động theo tên biến
    private int atk;
    private int def;
    private int agi;
}
9

Nắm bắt được vấn đề này, Spring Data đã trình bao bọc lên Hibernate một lớp nữa được gọi là Spring JPA, giúp mọi thao tác với DB của chúng ta rút ngắn xuống còn 1 dòng và tất nhiên là làm mờ Hibernate down đáng kể để tránh rắc rối

Kho lưu trữ Jpa

Để sử dụng Spring JPA, bạn cần sử dụng giao diện

// Giả sử đã có đối tượng session rồi
Session session = getSession();

try {
    // Tất cả các lệnh hành động với DB thông qua Hibernate
    // đều phải nằm trong 1 giao dịch (Transaction)
    // Bắt đầu giao dịch
    session.getTransaction().begin();

    // Tạo một query

    String sql = "Select u from " + User.class.getName() + " u ";

    // Tạo đối tượng Query.
    Query<User> query = session.createQuery(sql);

    // Thực hiện truy vấn và lấy ra dữ liệu.
    List<User> users = query.getResultList();

    // In ra màn hình
    for (User user : users) {
        System.out.println(user);
    }

    // Commit dữ liệu và kết thúc session.
    session.getTransaction().commit();
} catch (Exception e) {
    e.printStackTrace();
    // Rollback trong trường hợp có lỗi xẩy ra.
    session.getTransaction().rollback();
}
0

Yêu cầu của giao diện này là bạn phải cung cấp 2 thông tin

  1. Thực thể ( Đối tượng tương ứng với Bảng trong DB)
  2. Kiểu dữ liệu của khóa chính (khóa chính)

Ví dụ. Tôi muốn lấy thông tin của bảng

@Entity
@Table(name = "user")
@Data
public class User implements Serializable {
    private static final long serialVersionUID = -297553281792804396L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // Mapping thông tin biến với tên cột trong Database
    @Column(name = "hp")
    private int hp;
    @Column(name = "stamina")
    private int stamina;

    // Nếu không đánh dấu @Column thì sẽ mapping tự động theo tên biến
    private int atk;
    private int def;
    private int agi;
}
4 thì làm như sau

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}

Vì thế thôi,

// Giả sử đã có đối tượng session rồi
Session session = getSession();

try {
    // Tất cả các lệnh hành động với DB thông qua Hibernate
    // đều phải nằm trong 1 giao dịch (Transaction)
    // Bắt đầu giao dịch
    session.getTransaction().begin();

    // Tạo một query

    String sql = "Select u from " + User.class.getName() + " u ";

    // Tạo đối tượng Query.
    Query<User> query = session.createQuery(sql);

    // Thực hiện truy vấn và lấy ra dữ liệu.
    List<User> users = query.getResultList();

    // In ra màn hình
    for (User user : users) {
        System.out.println(user);
    }

    // Commit dữ liệu và kết thúc session.
    session.getTransaction().commit();
} catch (Exception e) {
    e.printStackTrace();
    // Rollback trong trường hợp có lỗi xẩy ra.
    session.getTransaction().rollback();
}
2 đánh dấu
// Giả sử đã có đối tượng session rồi
Session session = getSession();

try {
    // Tất cả các lệnh hành động với DB thông qua Hibernate
    // đều phải nằm trong 1 giao dịch (Transaction)
    // Bắt đầu giao dịch
    session.getTransaction().begin();

    // Tạo một query

    String sql = "Select u from " + User.class.getName() + " u ";

    // Tạo đối tượng Query.
    Query<User> query = session.createQuery(sql);

    // Thực hiện truy vấn và lấy ra dữ liệu.
    List<User> users = query.getResultList();

    // In ra màn hình
    for (User user : users) {
        System.out.println(user);
    }

    // Commit dữ liệu và kết thúc session.
    session.getTransaction().commit();
} catch (Exception e) {
    e.printStackTrace();
    // Rollback trong trường hợp có lỗi xẩy ra.
    session.getTransaction().rollback();
}
3 là một Bean và chịu trách nhiệm giao tiếp với DB

Spring Boot sẽ tìm thấy tự động và khởi động tạo đối tượng

// Giả sử đã có đối tượng session rồi
Session session = getSession();

try {
    // Tất cả các lệnh hành động với DB thông qua Hibernate
    // đều phải nằm trong 1 giao dịch (Transaction)
    // Bắt đầu giao dịch
    session.getTransaction().begin();

    // Tạo một query

    String sql = "Select u from " + User.class.getName() + " u ";

    // Tạo đối tượng Query.
    Query<User> query = session.createQuery(sql);

    // Thực hiện truy vấn và lấy ra dữ liệu.
    List<User> users = query.getResultList();

    // In ra màn hình
    for (User user : users) {
        System.out.println(user);
    }

    // Commit dữ liệu và kết thúc session.
    session.getTransaction().commit();
} catch (Exception e) {
    e.printStackTrace();
    // Rollback trong trường hợp có lỗi xẩy ra.
    session.getTransaction().rollback();
}
3 trong Context. Việc tạo ra
// Giả sử đã có đối tượng session rồi
Session session = getSession();

try {
    // Tất cả các lệnh hành động với DB thông qua Hibernate
    // đều phải nằm trong 1 giao dịch (Transaction)
    // Bắt đầu giao dịch
    session.getTransaction().begin();

    // Tạo một query

    String sql = "Select u from " + User.class.getName() + " u ";

    // Tạo đối tượng Query.
    Query<User> query = session.createQuery(sql);

    // Thực hiện truy vấn và lấy ra dữ liệu.
    List<User> users = query.getResultList();

    // In ra màn hình
    for (User user : users) {
        System.out.println(user);
    }

    // Commit dữ liệu và kết thúc session.
    session.getTransaction().commit();
} catch (Exception e) {
    e.printStackTrace();
    // Rollback trong trường hợp có lỗi xẩy ra.
    session.getTransaction().rollback();
}
3 hoàn toàn tự động và tự động cấu hình, vì chúng ta đã kế thừa
// Giả sử đã có đối tượng session rồi
Session session = getSession();

try {
    // Tất cả các lệnh hành động với DB thông qua Hibernate
    // đều phải nằm trong 1 giao dịch (Transaction)
    // Bắt đầu giao dịch
    session.getTransaction().begin();

    // Tạo một query

    String sql = "Select u from " + User.class.getName() + " u ";

    // Tạo đối tượng Query.
    Query<User> query = session.createQuery(sql);

    // Thực hiện truy vấn và lấy ra dữ liệu.
    List<User> users = query.getResultList();

    // In ra màn hình
    for (User user : users) {
        System.out.println(user);
    }

    // Commit dữ liệu và kết thúc session.
    session.getTransaction().commit();
} catch (Exception e) {
    e.printStackTrace();
    // Rollback trong trường hợp có lỗi xẩy ra.
    session.getTransaction().rollback();
}
0

Bây giờ, việc lấy toàn bộ

@Entity
@Table(name = "user")
@Data
public class User implements Serializable {
    private static final long serialVersionUID = -297553281792804396L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // Mapping thông tin biến với tên cột trong Database
    @Column(name = "hp")
    private int hp;
    @Column(name = "stamina")
    private int stamina;

    // Nếu không đánh dấu @Column thì sẽ mapping tự động theo tên biến
    private int atk;
    private int def;
    private int agi;
}
4 sẽ như sau

@Autowired
UserRepository userRepository;

userRepository.findAll()
                .forEach(System.out::println);

Đơn giản và rút gọn hơn rất nhiều

Nếu bạn đang tìm kiếm thì sẽ thấy

// Giả sử đã có đối tượng session rồi
Session session = getSession();

try {
    // Tất cả các lệnh hành động với DB thông qua Hibernate
    // đều phải nằm trong 1 giao dịch (Transaction)
    // Bắt đầu giao dịch
    session.getTransaction().begin();

    // Tạo một query

    String sql = "Select u from " + User.class.getName() + " u ";

    // Tạo đối tượng Query.
    Query<User> query = session.createQuery(sql);

    // Thực hiện truy vấn và lấy ra dữ liệu.
    List<User> users = query.getResultList();

    // In ra màn hình
    for (User user : users) {
        System.out.println(user);
    }

    // Commit dữ liệu và kết thúc session.
    session.getTransaction().commit();
} catch (Exception e) {
    e.printStackTrace();
    // Rollback trong trường hợp có lỗi xẩy ra.
    session.getTransaction().rollback();
}
3 có hàng ngàn phương pháp mà chúng ta không cần phải viết lại nữa. Vì nó kế thừa
// Giả sử đã có đối tượng session rồi
Session session = getSession();

try {
    // Tất cả các lệnh hành động với DB thông qua Hibernate
    // đều phải nằm trong 1 giao dịch (Transaction)
    // Bắt đầu giao dịch
    session.getTransaction().begin();

    // Tạo một query

    String sql = "Select u from " + User.class.getName() + " u ";

    // Tạo đối tượng Query.
    Query<User> query = session.createQuery(sql);

    // Thực hiện truy vấn và lấy ra dữ liệu.
    List<User> users = query.getResultList();

    // In ra màn hình
    for (User user : users) {
        System.out.println(user);
    }

    // Commit dữ liệu và kết thúc session.
    session.getTransaction().commit();
} catch (Exception e) {
    e.printStackTrace();
    // Rollback trong trường hợp có lỗi xẩy ra.
    session.getTransaction().rollback();
}
0 rồi

Thử nghiệm

Bây giờ chúng ta sẽ làm ứng dụng Demo các tính năng cơ bản với

// Giả sử đã có đối tượng session rồi
Session session = getSession();

try {
    // Tất cả các lệnh hành động với DB thông qua Hibernate
    // đều phải nằm trong 1 giao dịch (Transaction)
    // Bắt đầu giao dịch
    session.getTransaction().begin();

    // Tạo một query

    String sql = "Select u from " + User.class.getName() + " u ";

    // Tạo đối tượng Query.
    Query<User> query = session.createQuery(sql);

    // Thực hiện truy vấn và lấy ra dữ liệu.
    List<User> users = query.getResultList();

    // In ra màn hình
    for (User user : users) {
        System.out.println(user);
    }

    // Commit dữ liệu và kết thúc session.
    session.getTransaction().commit();
} catch (Exception e) {
    e.printStackTrace();
    // Rollback trong trường hợp có lỗi xẩy ra.
    session.getTransaction().rollback();
}
0

Bước đầu tiên là cấu hình thông tin về MySQL trong

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
}
1

ứng dụng. của cải

spring.datasource.url=jdbc:mysql://localhost:3306/micro_db?useSSL=false
spring.datasource.username=root
spring.datasource.password=root


## Hibernate Properties
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto = update

logging.level.org.hibernate = ERROR

Spring JPA sẽ tự kết nối cho chúng ta, mà không cần thêm đoạn mã nào cả

Người sử dụng. java

@Entity
@Table(name = "user")
@Data
public class User implements Serializable {
    private static final long serialVersionUID = -297553281792804396L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    // Mapping thông tin biến với tên cột trong Database
    @Column(name = "hp")
    private int hp;
    @Column(name = "stamina")
    private int stamina;

    // Nếu không đánh dấu @Column thì sẽ mapping tự động theo tên biến
    private int atk;
    private int def;
    private int agi;
}

Ứng dụng. java


import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;

import lombok.RequiredArgsConstructor;

@SpringBootApplication
@RequiredArgsConstructor
public class App {
    public static void main(String[] args) {
        ApplicationContext context = SpringApplication.run(App.class, args);
        UserRepository userRepository = context.getBean(UserRepository.class);

        // Lấy ra toàn bộ user trong db
        userRepository.findAll()
                      .forEach(System.out::println);

        // Lưu user xuống database
        User user = userRepository.save(new User());
        // Khi lưu xong, nó trả về User đã lưu kèm theo Id.
        System.out.println("User vừa lưu có ID: " + user.getId());
        Long userId = user.getId();
        // Cập nhật user.
        user.setAgi(100);
        // Update user
        // Lưu ý, lúc này đối tượng user đã có Id. 
        // Nên nó sẽ update vào đối tượng có Id này 
        // chứ không insert một bản ghi mới
        userRepository.save(user);

        // Query lấy ra user vừa xong để kiểm tra xem.
        User user2 = userRepository.findById(userId).get();
        System.out.println("User: " + user);
        System.out.println("User2: " + user2);

        // Xóa User khỏi DB
        userRepository.delete(user);

        // In ra kiểm tra xem userId còn tồn tại trong DB không
        User user3 = userRepository.findById(userId).orElse(null);
        System.out.println("User3: " + user2);

    }

}

OUTPUT chương trình

User vừa lưu có ID: 104
// sau khi update, cả 2 đối tượng user đều có giá trị agi mới
User: User(id=104, hp=0, stamina=0, atk=0, def=0, agi=100)
User2: User(id=104, hp=0, stamina=0, atk=0, def=0, agi=100)
// Sau khi xóa, user không còn tồn tại
User3: null

Kết quả

Đây là một bài viết trong [Series làm chủ Spring Boot, from zero to hero][link-series-spring-boot] [link-series-spring-boot]. https. // loda. me/spring-boot-0-series-lam-chu-spring-boot-tu-zero-to-hero-loda1558963914472