หลังจากสร้าง Folder repository แล้ว คุณต้องมีไฟล์ Interface เพื่อให้ Spring Data JPA จัดการ Query ข้อมูลจาก SQL Server ครับ
สร้างไฟล์ Repository
UserRepository.java
src/main/java/com/example/demo/repository/UserRepository.java
ไฟล์นี้เปรียบเสมือนการสั่ง User::where('username', $username)->first() ใน Laravel เพื่อหาผู้ใช้
package com.example.demo.repository;
import com.example.demo.entity.User;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
// เหมือนการเช็ค User::where('username', $username)->first() ใน Laravel
Optional<User> findByUsername(String username);
// เช็คว่ามี Email นี้หรือยัง (สำหรับ Register)
Boolean existsByEmail(String email);
}
RoleRepository.java
src/main/java/com/example/demo/repository/RoleRepository.java
ไฟล์นี้เปรียบเสมือนการสั่ง Role::where('name', $name)->first() ใน Laravel เพื่อใช้เช็คสิทธิ์ของผู้ใช้
package com.example.demo.repository;
import com.example.demo.entity.Role;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
public interface RoleRepository extends JpaRepository<Role, Long> {
// ค้นหา Role ด้วยชื่อ เช่น 'ROLE_ADMIN' หรือ 'ROLE_USER'
Optional<Role> findByName(String name);
// เช็คว่ามี Role นี้อยู่ในระบบหรือยัง
Boolean existsByName(String name);
}
PermissionRepository.java
src/main/java/com/example/demo/repository/PermissionRepository.java
ไฟล์นี้ใช้จัดการสิทธิ์ย่อย ๆ ( Permissions ) เช่น การเช็คว่า User คนนี้สามารถ ‘edit-post’ ได้หรือไม่
package com.example.demo.repository;
import com.example.demo.entity.Permission;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
import java.util.Set;
@Repository
public interface PermissionRepository extends JpaRepository<Permission, Long> {
// ค้นหาสิทธิ์ด้วยชื่อ เช่น 'user-create'
Optional<Permission> findByName(String name);
// ค้นหาหลายๆ Permission พร้อมกัน (ใช้ตอนประกาศสิทธิ์ให้ Role)
Set<Permission> findByNameIn(Set<String> names);
}
วิธีการนำไปใช้งาน ( Usage Example )
เมื่อคุณมี Repository ครบแล้ว คุณสามารถเรียกใช้ใน Service เพื่อจัดการสิทธิ์ได้ง่ายๆ เหมือนใน Laravel เลยครับ
@Service
public class UserService {
@Autowired
private UserRepository userRepository;
@Autowired
private RoleRepository roleRepository;
public void assignRoleToUser(Long userId, String roleName) {
User user = userRepository.findById(userId).orElseThrow();
Role role = roleRepository.findByName(roleName).orElseThrow();
user.getRoles().add(role);
userRepository.save(user); // เหมือน $user->assignRole($role)
}
}
ข้อควรระวัง
- Package Name: ตรวจสอบบรรทัด
package com.example.demo.repository;ให้ตรงกับชื่อโปรเจกต์จริงของคุณ - Imports: ตรวจสอบว่าได้ Import Entity (
com.example.demo.entity.*) เข้ามาถูกต้อง