Spring MVC Pagination Örneği

sametklou

Spring MVC Pagination Örneği

Spring Framework, web uygulamaları geliştirmek için oldukça popüler bir seçenektir. Bu yazıda, Spring MVC framework'ünü kullanarak sayfalama (pagination) işlemlerini nasıl gerçekleştireceğinizi öğreneceksiniz.

Sayfalama, büyük miktardaki verileri daha kullanıcı dostu bir şekilde göstermek için kullanılan bir tekniktir. Özellikle veri tabanından çekilen büyük veri setlerini kullanıcıya daha erişilebilir bir şekilde sunmak için sayfalama işlemine ihtiyaç duyulur.

Adım 1: Proje Oluşturma

Öncelikle, Spring MVC projesi oluşturmanız gerekmektedir. Bu işlem için Spring Initializr veya Maven kullanabilirsiniz.

Adım 2: Veritabanı Bağlantısı

Veritabanı bağlantısı için applicationContext.xml dosyasına dataSource ve hibernateSessionFactory bean'lerini tanımlayın.

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
    <property name="username" value="root"/>
    <property name="password" value="password"/>
</bean>

<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="com.example.model"/>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
        </props>
    </property>
</bean>

Adım 3: Veri Tabanı Entity'sini Oluşturma

Veritabanından çekeceğiniz verileri temsil edecek olan entity sınıfını oluşturun.

@Entity
@Table(name = "users")
public class User {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    private String email;
    
    // getters and setters
}

Adım 4: Repository ve Service Sınıflarını Oluşturma

Veritabanı işlemlerini gerçekleştirecek olan repository ve service sınıflarını oluşturun.

public interface UserRepository extends JpaRepository<User, Long> {
    
    Page<User> findAll(Pageable pageable);
}

@Service
public class UserService {
    
    @Autowired
    private UserRepository userRepository;
    
    public Page<User> getAllUsers(int pageNumber, int pageSize) {
        Pageable pageable = PageRequest.of(pageNumber, pageSize);
        return userRepository.findAll(pageable);
    }
}

Adım 5: Controller Sınıfını Oluşturma

Pagination işlemlerini kontrol edecek olan controller sınıfını oluşturun.

@Controller
public class UserController {
    
    @Autowired
    private UserService userService;
    
    @GetMapping("/users")
    public String getUsers(Model model, @RequestParam(defaultValue = "0") int page) {
        int pageSize = 5;
        Page<User> userPage = userService.getAllUsers(page, pageSize);
        
        model.addAttribute("users", userPage.getContent());
        model.addAttribute("currentPage", page);
        model.addAttribute("totalPages", userPage.getTotalPages());
        
        return "users";
    }
}

Adım 6: View Oluşturma

Son olarak, pagination işlemlerini gösterecek olan view dosyasını oluşturun.

<!DOCTYPE html>
<html>
<head>
    <title>Users</title>
</head>
<body>
    <h1>Users</h1>
    
    <table>
        <tr>
            <th>ID</th>
            <th>Name</th>
            <th>Email</th>
        </tr>
        
        <c:forEach var="user" items="${users}">
            <tr>
                <td>${user.id}</td>
                <td>${user.name}</td>
                <td>${user.email}</td>
            </tr>
        </c:forEach>
    </table>
    
    <c:if test="${currentPage > 0}">
        <a href="/users?page=${currentPage - 1}">Önceki Sayfa</a>
    </c:if>
    
    <c:if test="${currentPage < totalPages - 1}">
        <a href="/users?page=${currentPage + 1}">Sonraki Sayfa</a>
    </c:if>
</body>
</html>

Bu adımları takip ederek Spring MVC framework'ü kullanarak sayfalama işlemlerini gerçekleştirebilir ve veri tabanından çekilen büyük veri setlerini kullanıcı dostu bir şekilde gösterebilirsiniz.