If error 'ERROR 1819 [HY000]. Mật khẩu của bạn không đáp ứng các yêu cầu chính sách hiện hành' thì do mysql của bạn đã cài đặt 1 plugin yêu cầu bạn tạo 1 mật khẩu đủ mạnh. Ví dụ như độ dài phải là bao nhiêu, có cả chữ HOA và chữ thường, có ký tự đặc biệt. Để sửa lỗi này, bạn hãy xem hướng dẫn cụ thể tại video sau. nhấp để xem Dòng trên ta đã tạo 1 tên người dùng là 'demo' chỉ có thể truy cập từ chính máy này có sử dụng mật khẩu là 'abc123'. Nếu muốn người dùng truy cập từ mọi nơi thì thay 'localhost' bằng '%'
Xem thông tin về người dùng
SELECT * FROM mysql.user where user = 'demo' \G
Các thông tin về người dùng được lưu trong bảng người dùng của cơ sở dữ liệu mysql
Gán quyền cho user
GRANT SELECT ON demo_database.demo_table TO 'demo'@'localhost';
Lệnh trên gán quyền CHỌN trên bảng 'demo_table' của cơ sở dữ liệu 'demo_database' cho người dùng 'demo'@'localhost'. To view of user ta used
SHOW GRANTS FOR 'demo'@'localhost';
Bỏ quyền của người dùng
REVOKE SELECT ON demo_database.demo_table FROM 'demo'@'localhost';
Câu lệnh loại bỏ quyền CHỌN trên bảng 'bảng demo' của cơ sở dữ liệu 'demo_database' từ người dùng 'demo'@'localhost'
Cài đặt mật khẩu cho người dùng
SET PASSWORD FOR 'demo'@'localhost' = PASSWORD['demo_password'];
Hàm PASSWORD[] để mã hóa mật khẩu của bạn không thể xem được khi truy xuất từ bảng người dùng của cơ sở dữ liệu mysql. Cảm ơn các bạn vì đã đọc bài viết. Mọi người đóng góp hãy để bình luận lại ở bên dưới
Để 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
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
Trong bài có đề cập kiến thức
- ngủ đông
- Lombok
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 thừa thãi
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, bạn 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ần phụ thuộc _______50
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ả phụ thuộc
CREATE DATABASE micro_db;
use micro_db;
CREATE TABLE `user`
[
`id` bigint[20] NOT NULL AUTO_INCREMENT,
`hp` int NULL DEFAULT NULL,
`stamina` int DEFAULT NULL,
`atk` int DEFAULT NULL,
`def` int DEFAULT NULL,
`agi` int DEFAULT NULL,
PRIMARY KEY [`id`]
];
DELIMITER $$
CREATE PROCEDURE generate_data[]
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 100 DO
INSERT INTO `user` [`hp`,`stamina`,`atk`,`def`,`agi`] VALUES [i,i,i,i,i];
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
CALL generate_data[];
1 vào pom. xmlquả 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
Create Table and data
Trước khi bắt đầu, chúng ta cần tạo dữ liệu trong Cơ sở dữ liệu. Ở đây tôi chọn
CREATE DATABASE micro_db;
use micro_db;
CREATE TABLE `user`
[
`id` bigint[20] NOT NULL AUTO_INCREMENT,
`hp` int NULL DEFAULT NULL,
`stamina` int DEFAULT NULL,
`atk` int DEFAULT NULL,
`def` int DEFAULT NULL,
`agi` int DEFAULT NULL,
PRIMARY KEY [`id`]
];
DELIMITER $$
CREATE PROCEDURE generate_data[]
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 100 DO
INSERT INTO `user` [`hp`,`stamina`,`atk`,`def`,`agi`] VALUES [i,i,i,i,i];
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
CALL generate_data[];
2Dưới đây là SQL Script để tạo CƠ SỞ DỮ LIỆU
CREATE DATABASE micro_db;
use micro_db;
CREATE TABLE `user`
[
`id` bigint[20] NOT NULL AUTO_INCREMENT,
`hp` int NULL DEFAULT NULL,
`stamina` int DEFAULT NULL,
`atk` int DEFAULT NULL,
`def` int DEFAULT NULL,
`agi` int DEFAULT NULL,
PRIMARY KEY [`id`]
];
DELIMITER $$
CREATE PROCEDURE generate_data[]
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 100 DO
INSERT INTO `user` [`hp`,`stamina`,`atk`,`def`,`agi`] VALUES [i,i,i,i,i];
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
CALL generate_data[];
3. Chứa một BẢNG duy nhất là CREATE DATABASE micro_db;
use micro_db;
CREATE TABLE `user`
[
`id` bigint[20] NOT NULL AUTO_INCREMENT,
`hp` int NULL DEFAULT NULL,
`stamina` int DEFAULT NULL,
`atk` int DEFAULT NULL,
`def` int DEFAULT NULL,
`agi` int DEFAULT NULL,
PRIMARY KEY [`id`]
];
DELIMITER $$
CREATE PROCEDURE generate_data[]
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 100 DO
INSERT INTO `user` [`hp`,`stamina`,`atk`,`def`,`agi`] VALUES [i,i,i,i,i];
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
CALL generate_data[];
4Khi chạy tập lệnh này, nó sẽ tự động chèn vào db 100
CREATE DATABASE micro_db;
use micro_db;
CREATE TABLE `user`
[
`id` bigint[20] NOT NULL AUTO_INCREMENT,
`hp` int NULL DEFAULT NULL,
`stamina` int DEFAULT NULL,
`atk` int DEFAULT NULL,
`def` int DEFAULT NULL,
`agi` int DEFAULT NULL,
PRIMARY KEY [`id`]
];
DELIMITER $$
CREATE PROCEDURE generate_data[]
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 100 DO
INSERT INTO `user` [`hp`,`stamina`,`atk`,`def`,`agi`] VALUES [i,i,i,i,i];
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
CALL generate_data[];
4CREATE DATABASE micro_db;
use micro_db;
CREATE TABLE `user`
[
`id` bigint[20] NOT NULL AUTO_INCREMENT,
`hp` int NULL DEFAULT NULL,
`stamina` int DEFAULT NULL,
`atk` int DEFAULT NULL,
`def` int DEFAULT NULL,
`agi` int DEFAULT NULL,
PRIMARY KEY [`id`]
];
DELIMITER $$
CREATE PROCEDURE generate_data[]
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 100 DO
INSERT INTO `user` [`hp`,`stamina`,`atk`,`def`,`agi`] VALUES [i,i,i,i,i];
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
CALL generate_data[];
Sau khi chạy xong script trên, chúng ta kiểm tra cơ sở dữ liệu đã có dữ liệu chưa
Tạo Model User
When has been data in Database. Chúng ta sẽ tạo một Class trong Java để ánh xạ thông tin
Phần này chúng ta cần có một chút kiến thức về Hibernate. Nếu bạn chưa biết những Annotation dưới đây để làm gì thì hãy tạm dừng và tìm hiểu Hibernate tại đây
Người dùng. java
GRANT SELECT ON demo_database.demo_table TO 'demo'@'localhost';
3Tới đây là chúng ta đã đi được nửa đường rồi
Vấn đề của hệ thống truyền Hibernate
Thông thường, khi bạn đã định nghĩa
CREATE DATABASE micro_db;
use micro_db;
CREATE TABLE `user`
[
`id` bigint[20] NOT NULL AUTO_INCREMENT,
`hp` int NULL DEFAULT NULL,
`stamina` int DEFAULT NULL,
`atk` int DEFAULT NULL,
`def` int DEFAULT NULL,
`agi` int DEFAULT NULL,
PRIMARY KEY [`id`]
];
DELIMITER $$
CREATE PROCEDURE generate_data[]
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 100 DO
INSERT INTO `user` [`hp`,`stamina`,`atk`,`def`,`agi`] VALUES [i,i,i,i,i];
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
CALL generate_data[];
6 tương ứng với CREATE DATABASE micro_db;
use micro_db;
CREATE TABLE `user`
[
`id` bigint[20] NOT NULL AUTO_INCREMENT,
`hp` int NULL DEFAULT NULL,
`stamina` int DEFAULT NULL,
`atk` int DEFAULT NULL,
`def` int DEFAULT NULL,
`agi` int DEFAULT NULL,
PRIMARY KEY [`id`]
];
DELIMITER $$
CREATE PROCEDURE generate_data[]
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 100 DO
INSERT INTO `user` [`hp`,`stamina`,`atk`,`def`,`agi`] VALUES [i,i,i,i,i];
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
CALL generate_data[];
7 trong DB thông qua Hibernate. Nhiệm vụ tiếp theo sẽ là tạo ra các lớp thao tác với DBVí dụ muốn truy vấn lấy tất cả
CREATE DATABASE micro_db;
use micro_db;
CREATE TABLE `user`
[
`id` bigint[20] NOT NULL AUTO_INCREMENT,
`hp` int NULL DEFAULT NULL,
`stamina` int DEFAULT NULL,
`atk` int DEFAULT NULL,
`def` int DEFAULT NULL,
`agi` int DEFAULT NULL,
PRIMARY KEY [`id`]
];
DELIMITER $$
CREATE PROCEDURE generate_data[]
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 100 DO
INSERT INTO `user` [`hp`,`stamina`,`atk`,`def`,`agi`] VALUES [i,i,i,i,i];
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
CALL generate_data[];
4 bằng Hibernate truyền hệ thống sẽ như sauGRANT SELECT ON demo_database.demo_table TO 'demo'@'localhost';
7Mặc dù Hibernate đã làm rất tốt và giảm thiểu mã cho công việc thao tác với Cơ sở dữ liệu xuống rồi, những gì nó vẫn chưa Chắc chắn là dễ dàng. [
Mục đích ban đầu của Hibernate là giúp người thiết lập chương 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ả
CREATE DATABASE micro_db;
use micro_db;
CREATE TABLE `user`
[
`id` bigint[20] NOT NULL AUTO_INCREMENT,
`hp` int NULL DEFAULT NULL,
`stamina` int DEFAULT NULL,
`atk` int DEFAULT NULL,
`def` int DEFAULT NULL,
`agi` int DEFAULT NULL,
PRIMARY KEY [`id`]
];
DELIMITER $$
CREATE PROCEDURE generate_data[]
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 100 DO
INSERT INTO `user` [`hp`,`stamina`,`atk`,`def`,`agi`] VALUES [i,i,i,i,i];
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
CALL generate_data[];
9Nắm bắt 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 cho 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à hiển nhiên là làm mờ Hibernate giảm đá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
GRANT SELECT ON demo_database.demo_table TO 'demo'@'localhost';
30Yêu cầu của giao diện này là bạn phải cung cấp 2 thông tin
- Thực thể [ Đối tượng tương ứng với Bảng trong DB]
- 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
CREATE DATABASE micro_db;
use micro_db;
CREATE TABLE `user`
[
`id` bigint[20] NOT NULL AUTO_INCREMENT,
`hp` int NULL DEFAULT NULL,
`stamina` int DEFAULT NULL,
`atk` int DEFAULT NULL,
`def` int DEFAULT NULL,
`agi` int DEFAULT NULL,
PRIMARY KEY [`id`]
];
DELIMITER $$
CREATE PROCEDURE generate_data[]
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 100 DO
INSERT INTO `user` [`hp`,`stamina`,`atk`,`def`,`agi`] VALUES [i,i,i,i,i];
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
CALL generate_data[];
4 thì làm như sauSHOW GRANTS FOR 'demo'@'localhost';
1Vì thế thôi,
GRANT SELECT ON demo_database.demo_table TO 'demo'@'localhost';
32 đánh dấu GRANT SELECT ON demo_database.demo_table TO 'demo'@'localhost';
33 là Bean và chịu trách nhiệm giao tiếp với DBSpring Boot sẽ tìm thấy tự động và khởi động tạo đối tượng
GRANT SELECT ON demo_database.demo_table TO 'demo'@'localhost';
33 trong Ngữ cảnh. Việc tạo ra GRANT SELECT ON demo_database.demo_table TO 'demo'@'localhost';
33 hoàn toàn tự động và tự động cấu hình, vì chúng ta đã kế thừa GRANT SELECT ON demo_database.demo_table TO 'demo'@'localhost';
30Bây giờ, việc lấy toàn bộ
CREATE DATABASE micro_db;
use micro_db;
CREATE TABLE `user`
[
`id` bigint[20] NOT NULL AUTO_INCREMENT,
`hp` int NULL DEFAULT NULL,
`stamina` int DEFAULT NULL,
`atk` int DEFAULT NULL,
`def` int DEFAULT NULL,
`agi` int DEFAULT NULL,
PRIMARY KEY [`id`]
];
DELIMITER $$
CREATE PROCEDURE generate_data[]
BEGIN
DECLARE i INT DEFAULT 0;
WHILE i < 100 DO
INSERT INTO `user` [`hp`,`stamina`,`atk`,`def`,`agi`] VALUES [i,i,i,i,i];
SET i = i + 1;
END WHILE;
END$$
DELIMITER ;
CALL generate_data[];
4 sẽ như sauSHOW GRANTS FOR 'demo'@'localhost';
8Đơn giản và rút gọn hơn rất nhiều
Nếu bạn tìm kiếm thì sẽ thấy
GRANT SELECT ON demo_database.demo_table TO 'demo'@'localhost';
33 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 GRANT SELECT ON demo_database.demo_table TO 'demo'@'localhost';
30 rồiThử 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
GRANT SELECT ON demo_database.demo_table TO 'demo'@'localhost';
30Bước đầu tiên là cấu hình thông tin về MySQL trong
GRANT SELECT ON demo_database.demo_table TO 'demo'@'localhost';
71đăng kí. đặc tính
REVOKE SELECT ON demo_database.demo_table FROM 'demo'@'localhost';
3Spring JPA sẽ tự động kết nối cho chúng ta, mà không cần thêm đoạn mã nào cả
Người dùng. java
GRANT SELECT ON demo_database.demo_table TO 'demo'@'localhost';
3Ứng dụng. java
REVOKE SELECT ON demo_database.demo_table FROM 'demo'@'localhost';
5OUTPUT chương trình
REVOKE SELECT ON demo_database.demo_table FROM 'demo'@'localhost';
6
Bài viết nằm trong sê-ri Làm chủ Spring Boot, Zero to Hero
Bài viết đã được đăng tải lại dưới sự cho phép của tác giả - Thầy Nam là giảng viên Lộ trình Java Spring Boot Full Stack