淘先锋技术网

首页 1 2 3 4 5 6 7

Mybatis是一款流行的Java持久层框架,它通过XML文件或Java注解配置实现将Java对象与关系型数据库之间的交互,简化了开发者基于JDBC进行数据库操作的复杂性。本篇文章将详细介绍Mybatis如何实现在Oracle数据库中的分页查询。

假设我们有一个名为UserInfo的表,包含字段userId, userName, userAge和userGender。我们需要查询用户信息并实现分页展示。下面是UserInfo表的创建语句:

CREATE TABLE UserInfo
(
userId INT PRIMARY KEY,
userName VARCHAR2(50),
userAge INT,
userGender VARCHAR2(10)
);

首先,我们在mapper.xml文件中定义查询语句及其参数:

<select id="getUserInfoByPage" parameterType="map" resultType="UserInfo">
SELECT * FROM 
(
SELECT u.*, rownum rownum_
FROM (
SELECT *
FROM UserInfo
WHERE 1=1
<if test="userName != null">
AND userName = #{userName,jdbcType=VARCHAR}
</if>
<if test="userAge != null">
AND userAge = #{userAge,jdbcType=INTEGER}
</if>
<if test="userGender != null">
AND userGender = #{userGender,jdbcType=VARCHAR}
</if>
ORDER BY userId DESC
) u
WHERE rownum <= #{end,jdbcType=INTEGER}
) 
WHERE rownum_ >= #{start,jdbcType=INTEGER}
</select>

以上代码实现了带条件的分页查询,其中start表示开始位置,end表示结束位置,都为页面request请求中传来的参数。如果没有传入参数,则start为0,end为页大小。

接着,在Java代码中调用Mapper接口的方法来查询数据,如下:

public List<UserInfo> getUserInfoByPage(int start, int end, String userName, Integer userAge, String userGender) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("start", start);
paramMap.put("end", end);
paramMap.put("userName", userName);
paramMap.put("userAge", userAge);
paramMap.put("userGender", userGender);
return session.selectList("com.xxx.mapper.UserInfoMapper.getUserInfoByPage", paramMap);
}

最后,在Controller中获取请求参数并调用Service方法返回数据,如下:

@RequestMapping("/getUserInfoByPage")
@ResponseBody
public Result getUserInfoByPage(HttpServletRequest request) {
String userName = request.getParameter("userName");
String userAge = request.getParameter("userAge");
String userGender = request.getParameter("userGender");
int start = Integer.parseInt(request.getParameter("start"));
int pageSize = Integer.parseInt(request.getParameter("pageSize"));
int end = start + pageSize;
List<UserInfo> userInfoList = userInfoService.getUserInfoByPage(start, end, userName, userAge, userGender);
int totalCount = userInfoService.getUserInfoCount(userName, userAge, userGender);
int totalPage = (int) Math.ceil((double) totalCount / pageSize);
return new Result(true, "查询成功", userInfoList, totalCount, totalPage, start, end);
}

以上代码实现了用户信息的分页查询,同时返回了查询的总条数、总页数、当前页起始项和终止项等信息。

总结来说,Mybatis配合Oracle数据库可以非常方便地实现分页查询,通过mapper.xml定义SQL语句及其参数,Java代码中使用传参方式来查询数据,最后传回Controller进行页面展示。