mybatis和servlet整和 增刪改查
阿新 • • 發佈:2021-12-09
重定向和請求轉發的區別
一個會改變地址,一個不會改變url的地址
一個不能傳物件,一個可以傳物件過去
1.OpenSessionInView 的使用
Open Session In View 模式:
Open Session In View 是將一個數據庫會話物件繫結到當前請求執行緒中,在請求期間一直
保持資料庫會話物件處於Open 狀態,使資料庫會話物件在請求的整個期間都可以使用。直
到產生響應後關閉當前的資料庫會話物件。
點選檢視程式碼
/** * 在Filter 中開啟一個SqlSession */ @WebFilter("/*") public class OpenSqlSessionInViewFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } //一有請求就建立sqlsession,這裡直接進行業務提交和回滾等操作,不用在業務層操作了 @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { SqlSession sqlSession = MybatisUtils.getSqlSession(); try{ filterChain.doFilter(servletRequest, servletResponse); sqlSession.commit(); }catch(Exception e){ e.printStackTrace(); sqlSession.rollback(); }finally { MybatisUtils.closeSqlSession(); } } @Override public void destroy() { } }
2.建立頁面
開始頁面有增刪改查四個超連結,每個超連結對應一個頁面
建立操作完成介面,完成每個頁面,都重定向到這個頁面
3.建立servlet控制層
3.1新增使用者
點選檢視程式碼
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String flag = req.getParameter("flag"); //判斷頁面傳來的表達是幹什麼 if (flag.equals("addUsers") ) { this.addUsers(req, resp); } } //新增使用者操作 public void addUsers(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //獲取資料 Users users = this.createUsers(req); //呼叫服務層 UsersService usersService = new UsersServiceImpl(); usersService.addUsers(users); resp.sendRedirect("ok.jsp"); } //獲取頁面傳來的資料 public Users createUsers(HttpServletRequest req) { Users users = new Users(); users.setUsername(req.getParameter("username") ); users.setUsersex(req.getParameter("usersex") ); return users; }
3.2 檢視使用者
點選檢視程式碼
@Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String flag = req.getParameter("flag"); //判斷頁面傳來的表達是幹什麼 if (flag.equals("addUsers") ) { this.addUsers(req, resp); } else if (flag.equals("selectUsers") ) { this.selectUsers(req, resp); } } //檢視使用者 public void selectUsers(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //獲取資料 Users users = this.createUsers(req); //用於獲取當前頁數,用於分頁操作 String pageIndex = req.getParameter("pageIndex"); int page = 1; if( pageIndex != null && pageIndex.length() > 0) { //查詢的頁數存放 進page page = Integer.parseInt(pageIndex); } //業務操作 UsersService usersService = new UsersServiceImpl(); PageInfo<Users> pageInfo = usersService.selectUsers(page, users); //返回 users物件,用於下次分頁查詢, pagInfo 這次查詢結果 //放入Attribute物件中,後面 請求轉發給介面 req.setAttribute("users", users); req.setAttribute("pageInfo", pageInfo); // 請求轉發給介面 req.getRequestDispatcher("showUsers.jsp").forward(req, resp); }
3.3刪除使用者
點選檢視程式碼
3.4修改使用者
點選檢視程式碼
4. 建立業務層
4.1 新增使用者的
點選檢視程式碼
public void addUsers(Users users) {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);
mapper.insertSelective(users);
//這裡不用提交事務和處理異常,監聽那邊已經處理了
}
4.2檢視使用者
點選檢視程式碼
@Override
public PageInfo<Users> selectUsers(int page, Users users) {
SqlSession sqlSession = MybatisUtils.getSqlSession();
UsersMapper mapper = sqlSession.getMapper(UsersMapper.class);
//拼接查詢條件
UsersExample usersExample = this.createUsersExample(users);
PageHelper.startPage(page,2);
List<Users> list = mapper.selectByExample(usersExample);
PageInfo<Users> pageInfo = new PageInfo(list);
return pageInfo;
}
//查詢條件
private UsersExample createUsersExample(Users users) {
UsersExample usersExample = new UsersExample();
UsersExample.Criteria criteria = usersExample.createCriteria();
if(users.getUsername() != null && users.getUsername().length() > 0) {
criteria.andUsersexEqualTo(users.getUsername() );
}
if(users.getUsersex() != null && users.getUsersex().length() > 0) {
criteria.andUsersexEqualTo(users.getUsersex() );
}
return usersExample;
}
分頁查詢時,查詢物件要維護好,第一次查詢是按照給定的users查詢的,但是點第二次查詢時也要以前的物件進行查詢,否則點下一次查詢的就有問題,分頁外掛PageHelper中的PageInfo 物件可以用來進行分頁的一些列操作。