1. 程式人生 > 其它 >mybatis和servlet整和 增刪改查

mybatis和servlet整和 增刪改查

重定向和請求轉發的區別

一個會改變地址,一個不會改變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 物件可以用來進行分頁的一些列操作。