import java.util.List;
public interface ProductService {
List<Product> getProductsByCategory(String category, int page, int pageSize);
}
public class ProductServiceImpl implements ProductService {
private final ProductRepository productRepository;
public ProductServiceImpl(ProductRepository productRepository) {
this.productRepository = productRepository;
}
@Override
public List<Product> getProductsByCategory(String category, int page, int pageSize) {
int offset = (page - 1) * pageSize;
return productRepository.getProductsByCategory(category, offset, pageSize);
}
}
public interface ProductRepository {
List<Product> getProductsByCategory(String category, int offset, int limit);
}
public class ProductRepositoryImpl implements ProductRepository {
private final DataSource dataSource;
public ProductRepositoryImpl(DataSource dataSource) {
this.dataSource = dataSource;
}
@Override
public List<Product> getProductsByCategory(String category, int offset, int limit) {
String sql = "SELECT * FROM products WHERE category = ? LIMIT ?, ?";
List<Product> products = new ArrayList<>();
try (Connection conn = dataSource.getConnection();
PreparedStatement pstmt = conn.prepareStatement(sql)) {
pstmt.setString(1, category);
pstmt.setInt(2, offset);
pstmt.setInt(3, limit);
try (ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) {
Product product = new Product();
// 设置Product对象的属性
products.add(product);
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return products;
}
}
public class Product {
// Product的属性
}
在这个示例中,ProductService
是一个定义了一个方法getProductsByCategory
的接口。ProductServiceImpl
是这个接口的实现类,它依赖于一个ProductRepository
对象来进行数据查询。ProductRepository
是一个定义了一个方法getProductsByCategory
的接口,ProductRepositoryImpl
是这个接口的实现类,它使用一个DataSource
对象来获取数据库连接,然后执行联合查询语句,获取满足条件的产品列表。Product
是一个简单的POJO类,用于存储产品的属性。
注意,以上示例中使用了DataSource
来获取数据库连接,这是一种常见的方式。实际项目中,您可能需要使用您项目中的数据库连接方式来初始化ProductRepositoryImpl
类。
使用这些类,您可以在您的应用程序中按类别获取产品列表,并进行分页查询。例如:
ProductService productService = new ProductServiceImpl(new ProductRepositoryImpl(dataSource));
List<Product> products = productService.getProductsByCategory("category", 1, 10);
上述示例中,调用getProductsByCategory
方法,并传入类别名称、页码和每页的大小作为参数。这将返回满足条件的产品列表的子集,以进行分页显示。