JavaWed项目之查询操作
JavaWeb 开发代码一般分为三层,分层结构是 JavaWeb 开发中的一种设计思 想,这样会让我们开发层次分明,每一层只要完成对应的功能即可,使得项目便于开发和维护。
○1. Web层/表现层 : 主要接受前台浏览器用户的参数,给浏览器响应数据等等
○2. Service层/业务成/服务层:主要处理业务功能,日志,权限,事物,等等
○3. DAO层/持久层:专门负责和数据库交互,数据处理相关代码
DAO : Data Access Object 数据访问对象
进行查询操作,首先当然是在jsp上进行触发查询,也就是在WebContent上进行操作。
一般查询页面都是直接加载,或者也可以使用button标签、a标签。
<a href="UserListServlet?mthname=list">查询所有 </a>
再有wed层进入service层。
private void list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String pageNum = request.getParameter("countPage");//获取第几页的页数
int pageSize = 5; //每一页的条数
if("".equals(pageNum) || pageNum == null) { // 判断是否为空值
pageNum="1"; //为空值,赋值1
}
PageService ps = new PageService();
//Integer.parseInt(pageNum) 当前页码 pageSize 每一页的条数 PageBean<User> pageBean =ps.findUserByPage(Integer.parseInt(pageNum), pageSize);
request.setAttribute("pageBean", pageBean); request.getRequestDispatcher("listUsers.jsp").forward(request,response);
}
上面代码主要功能是把所查收到的数据返回给listUsers.jsp页面上。
public class PageService {
// 当前页码 每页显示的条数
public PageBean<User> findUserByPage(int pageNum,int pageSize) {
//封装一个pagebean
UserDao ud =new UserDaoImpl();
int count=ud.userCount(); //获取user表的总条数
int taotalPage=count%pageSize==0?count/pageSize:count/pageSize+1 ;
if(pageNum >taotalPage) {//如果传过来的当前页数 大于 总数
pageNum=taotalPage;
}
if(pageNum <1) {//至少请求第一个页面
pageNum=1;
}
PageBean<User> pageBean=new PageBean<User>();
List<User> users=ud.findPage(pageNum, pageSize);//当前页码 每页显示的条数
//"select * from users limit ?,?;";
pageBean.setList(users); //每页的数据list集合
pageBean.setPageNum(pageNum);//当前页码
pageBean.setTotalCount(count);//总条数
pageBean.setTotalPage(taotalPage);// 总页数
pageBean.setPageSize(pageSize); //每页显示的条数
return pageBean;
}
这里的方法主要是处理 int count=ud.userCount(); //获取user表的总条数
和 List users=ud.findPage(pageNum, pageSize);//当前页码
获取到所查询出来的总条数进行处理。
而查询数据的操作主要是userCount()方法和findPage()方法
public int userCount() {
Connection conn = DbUtils.getConnection();
String sql = "select count(*) from users;";
PreparedStatement st = null;
ResultSet rs = null;
int i = 0;
try {
st = conn.prepareStatement(sql);
rs = st.executeQuery();
while (rs.next()) {
i = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtils.close(conn, st, rs);
}
return i;
}
public List<User> findPage(int pageNum, int pageSize) {
Connection conn = DbUtils.getConnection();
String sql = "select * from users limit ?,?;";
PreparedStatement st = null;
ResultSet rs = null;
//要第一页 num= (pageNum -1)*5
//0
//5
List<User> users = new ArrayList<User>();
int num = (pageNum - 1) * pageSize;
try {
st = conn.prepareStatement(sql);
st.setInt(1, num);
st.setInt(2, pageSize);
rs = st.executeQuery();
while (rs.next()) {
User user = new User();
user.setId(rs.getInt(1));
user.setUsername(rs.getString(2));
user.setPassword(rs.getString(3));
user.setEmail(rs.getString(4));
user.setRole(rs.getInt(5));
user.setStatus(rs.getInt(6));
users.add(user);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DbUtils.close(conn, st, rs);
}
return users;
}
findPage这里主要是,通过传送过来的int pageNum, int pageSize,进行选择查询。