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页面调用相关方法(前面的博文已经介绍过)

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