Thuật ngữ cơ bản
entity: Thực thể trong mô hình dữ liệu
timestamp: Dấu thời gian hệ thống
refactor: Tái cấu trúc mã nguồn
query: Truy vấn cơ sở dữ liệu
override: Ghi đè phương thức
container: Thành phần quản lý đối tượng
Ví dụ minh họa JDBC
Connection conn = DataSourceManager.getKetNoi();
String sql = "SELECT ho_ten, tuoi FROM nhan_vien WHERE phong_ban = ?";
PreparedStatement stmt = conn.prepareStatement(sql);
stmt.setString(1, "PhatTrien");
ResultSet rs = stmt.executeQuery();
while (rs.next()) {
String ten = rs.getString("ho_ten");
int tuoi = rs.getInt("tuoi");
System.out.println("Nhân viên: " + ten + ", Tuổi: " + tuoi);
}
rs.close();
stmt.close();
Quản lý giao dịch
try {
conn.setAutoCommit(false);
String capNhat1 = "UPDATE tai_khoan SET so_du = so_du - ? WHERE id = 1";
PreparedStatement ps1 = conn.prepareStatement(capNhat1);
ps1.setDouble(1, 500000);
ps1.executeUpdate();
String capNhat2 = "UPDATE tai_khoan SET so_du = so_du + ? WHERE id = 2";
PreparedStatement ps2 = conn.prepareStatement(capNhat2);
ps2.setDouble(1, 500000);
ps2.executeUpdate();
conn.commit();
} catch (SQLException e) {
conn.rollback();
System.err.println("Lỗi giao dịch: " + e.getMessage());
} finally {
conn.setAutoCommit(true);
}
Spring Framework
IoC (Inversion of Control): Cơ chế đảo ngược kiểm soát
BeanPostProcessor: Giao diện xử lý vòng đời bean
@Autowired: Tự động tiêm phụ thuộc
@Service
public class XuLyDonHang {
private final KhoHang khoHang;
private final ThanhToanService thanhToan;
@Autowired
public XuLyDonHang(KhoHang khoHang, ThanhToanService thanhToan) {
this.khoHang = khoHang;
this.thanhToan = thanhToan;
}
@Transactional
public void thucHienDonHang(DonHang donHang) {
khoHang.kiemTraTonKho(donHang.getSanPham());
thanhToan.thanhToan(donHang.getSoTien());
khoHang.capNhatKho(donHang.getSanPham());
}
}
MySQL Cơ Bản
PRIMARY KEY: Khóa chính xác định bản ghi duy nhất
FOREIGN KEY: Khóa ngoại liên kết giữa các bảng
AUTO_INCREMENT: Tự động tăng giá trị
CREATE TABLE khach_hang (
ma_khach INT PRIMARY KEY AUTO_INCREMENT,
ten_khach VARCHAR(100) NOT NULL,
ngay_sinh DATE,
gioi_tinh ENUM('Nam', 'Nu', 'Khac')
) ENGINE=InnoDB;
RESTful API
endpoint: Điểm kết nối API
payload: Dữ liệu truyền trong request
status code: Mã phản hồi HTTP
@RestController
@RequestMapping("/api/san-pham")
public class SanPhamController {
@Autowired
private SanPhamService service;
@GetMapping("/{id}")
public ResponseEntity<SanPham> layChiTiet(@PathVariable Long id) {
return service.timKiem(id)
.map(ResponseEntity::ok)
.orElse(ResponseEntity.notFound().build());
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED)
public SanPham taoMoi(@RequestBody SanPham moi) {
return service.luu(moi);
}
}
JavaScript Modern
const tinhTong = (a, b) => a + b;
function xuLyDongGoi(thamSo) {
return new Promise((giaiQuyet, tuChoi) => {
if (typeof thamSo === 'number') {
giaiQuyet(tinhTong(thamSo, 10));
} else {
tuChoi(new Error('Tham số không hợp lệ'));
}
});
}
xuLyDongGoi(5)
.then(ketQua => console.log(`Kết quả: ${ketQua}`))
.catch(err => console.error(err.message));
Spring Boot Configuration
# application.properties
server.port=8081
spring.datasource.url=jdbc:mysql://localhost:3306/cua_hang
spring.datasource.username=admin
spring.datasource.password=secure123
spring.jpa.hibernate.ddl-auto=update
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
Thuật ngữ liên quan ORM
Entity: Lớp ánh xạ bảng cơ sở dữ liệu
Repository: Giao diện truy cập dữ liệu
JPQL (Java Persistence Query Language): Ngôn ngữ truy vấn
Lazy Loading: Tải dữ liệu theo yêu cầu