Mybatis與Servlet的整合

整合步驟

以User業務爲例

1.建立pojo實體類,繼續建立UserMapper.java接口以及對應的UserMapper.xml(規則要求前面的博文已經講過)

2.準備工具類

MyBatisUtil.java(自己編寫)

public class MyBatisUtil {
	private static SqlSessionFactory factory;
	// 通過靜態代碼塊創建會話工廠
	static{
		try {
			factory = new SqlSessionFactoryBuilder().build(Resources.getResourceAsStream("SqlMapConfig.xml"));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 方法描述:獲得會話工廠
	 * @return
	 */
	public static SqlSessionFactory getSqlSessionFactory(){
		return factory;
	}
}

3.編寫service層接口及實現類

此處給出UserServiceImpl.java

public class UserServiceImpl implements UserService {
	// 注入會話工廠,通過會話工廠得到Mapper,
	private SqlSessionFactory factory =MyBatisUtil.getSqlSessionFactory();
	@Override
	public User login(User user) {
		// 獲取會話
		SqlSession sqlSession = factory.openSession();
		// 創建代理對象
		UserMapper mapper = sqlSession.getMapper(UserMapper.class);
		// 使用mapper對象調用方法執行操作
		User result = mapper.findUserByNameAndPwd(user);
		// 釋放資源
		sqlSession.close();
		return result;
	}

	@Override
	public List<User> findAllUser() {
		// 獲取會話
		SqlSession sqlSession = factory.openSession();
		// 創建代理對象
		UserMapper mapper = sqlSession.getMapper(UserMapper.class);
		// 使用mapper對象調用方法執行操作
		List<User> allUser = mapper.findAllUser();
		// 釋放資源
		sqlSession.close();
		return allUser;
		
	}
}

4.編寫UserServlet

package com.hpe.servlet;

import java.io.IOException;
import java.lang.reflect.Method;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.hpe.po.User;
import com.hpe.service.UserService;
import com.hpe.service.impl.UserServiceImpl;

@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private UserService  userService = new UserServiceImpl();
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doPost(request, response);
	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 設置編碼格式及響應的內容類型
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		String action = request.getParameter("action");
		try {
			Method method = this.getClass().getDeclaredMethod(action, HttpServletRequest.class,HttpServletResponse.class);
			method.invoke(this, request,response);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 登錄
	public void login(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 得到用戶名和密碼
		String username = request.getParameter("username");
		String password = request.getParameter("password");
		// 封裝User對象
		User user = new User();
		user.setUsername(username);
		user.setPassword(password);
		// 調用UserServlet中的login方法
		User currUser = userService.login(user);
		if (currUser != null) {
			// 登錄成功,將用戶信息添加到session域
			request.getSession().setAttribute("user", currUser);
			// 查詢所有用戶
			response.sendRedirect(request.getContextPath()+"/UserServlet?action=selectAll");
		}else {
			// 登錄失敗
			request.setAttribute("msg", "<script>alert('用戶名或密碼錯誤')</script>");
			// 請求轉發到登錄頁面
			request.getRequestDispatcher("/login.jsp").forward(request, response);
		}
	}
	// 查詢所有用戶
	public void selectAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		List<User> users = userService.findAllUser();
		request.getSession().setAttribute("users", users);
		request.getRequestDispatcher("/index.jsp").forward(request, response);
	}
}

5.編寫前端JSP頁面調用相關方法(前面的博文已經介紹過)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章