mysql 多表查询加分页查询怎么在service实现
时间: 2024-06-10 13:10:08 浏览: 90
在service实现多表查询加分页查询,需要先定义好多表查询的SQL语句和分页查询的参数,然后在service中进行调用和处理。
以下是一个示例代码:
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public List<User> findUsersByPage(int pageNo, int pageSize) {
int offset = (pageNo - 1) * pageSize;
List<User> userList = userDao.findUsersByPage(offset, pageSize);
return userList;
}
@Override
public List<User> findUsersByConditionAndPage(String name, int pageNo, int pageSize) {
int offset = (pageNo - 1) * pageSize;
List<User> userList = userDao.findUsersByConditionAndPage(name, offset, pageSize);
return userList;
}
@Override
public List<User> findUsersAndOrdersByPage(int pageNo, int pageSize) {
int offset = (pageNo - 1) * pageSize;
List<User> userList = userDao.findUsersAndOrdersByPage(offset, pageSize);
return userList;
}
}
```
在上面的示例代码中,我们定义了三个方法用于实现不同的多表查询和分页查询功能:
1. `findUsersByPage`方法用于实现简单的分页查询,查询结果为单表记录。
2. `findUsersByConditionAndPage`方法用于实现带有条件的分页查询,查询结果为单表记录。
3. `findUsersAndOrdersByPage`方法用于实现多表查询和分页查询,查询结果为多表记录。
在每个方法中,我们都需要先计算出分页查询的偏移量(offset),然后调用Dao层的方法进行查询并返回结果。
其中,Dao层的方法实现可以参考以下示例代码:
```java
@Repository
public interface UserDao {
@Select("SELECT * FROM user LIMIT #{offset}, #{pageSize}")
List<User> findUsersByPage(@Param("offset") int offset, @Param("pageSize") int pageSize);
@Select("SELECT * FROM user WHERE name LIKE CONCAT('%',#{name},'%') LIMIT #{offset}, #{pageSize}")
List<User> findUsersByConditionAndPage(@Param("name") String name, @Param("offset") int offset, @Param("pageSize") int pageSize);
@Select("SELECT u.*, o.* FROM user u LEFT JOIN orders o ON u.id = o.user_id LIMIT #{offset}, #{pageSize}")
@Results({
@Result(id = true, column = "id", property = "id"),
@Result(column = "name", property = "name"),
@Result(column = "id", property = "orders", many = @Many(select = "com.example.demo.dao.OrderDao.findOrdersByUserId"))
})
List<User> findUsersAndOrdersByPage(@Param("offset") int offset, @Param("pageSize") int pageSize);
}
```
在Dao层的方法中,我们使用了@Select注解来定义SQL语句,同时使用@Param注解来传递参数。对于多表查询,我们还需要使用@Results注解来定义查询结果的映射关系。
最后,我们在Controller层调用service方法来获取查询结果并进行展示。
```java
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping
public List<User> getUsers(@RequestParam(value = "name", required = false) String name,
@RequestParam(value = "pageNo", defaultValue = "1") int pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {
if (name != null) {
return userService.findUsersByConditionAndPage(name, pageNo, pageSize);
} else {
return userService.findUsersByPage(pageNo, pageSize);
}
}
@GetMapping("/orders")
public List<User> getUsersAndOrders(@RequestParam(value = "pageNo", defaultValue = "1") int pageNo,
@RequestParam(value = "pageSize", defaultValue = "10") int pageSize) {
return userService.findUsersAndOrdersByPage(pageNo, pageSize);
}
}
```
在Controller层中,我们定义了两个接口分别用于单表记录查询和多表记录查询,通过@RequestParam注解来获取查询条件和分页参数。最后返回查询结果即可。
以上就是在service实现mysql多表查询加分页查询的全部内容,希望能对大家有所帮助。
阅读全文