一、项目搭建
1、创建 web 项目:spring_mybatis
2、搭建项目的目录结构
3、导入 jar 包
-
注意: 导入 web/WEB-INF/lib 中,一下 jar 包都需要导入
4、创建 Spring 的配置文件
- 注意:因为是在 Spring 中整合 MyBatis,所以我们这里不需要 MyBatis 的 mybatis.xml 配置文件,只需要 Spring 的 applicationcontext.xml 配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置 数据源 bean -->
<bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/spring"/>
<property name="username" value="root"/>
<property name="password" value="root"/>
</bean>
<!-- 配置 工厂 bean -->
<bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="datasource"/>
</bean>
<!-- 配置 mapper 扫描 bean -->
<bean id="mapper" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="sqlSessionFactory" ref="factory"/>
<property name="basePackage" value="com.zer.mapper"/>
</bean>
<!-- 配置 业务层 bean -->
<bean id="us" class="com.zer.service.impl.LoginServiceImpl">
<property name="userMapper" ref="userMapper"/>
</bean>
</beans>
5、配置 web.xml 配置文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!--配置 Spring 路径的全局变量-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationcontext.xml</param-value>
</context-param>
<!--配置监听器-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
</web-app>
二、数据库的创建
- 使用 MySQL 数据库
- 这里用 小海豚 SQLyog 进行创建数据库
1、创建 spring 数据库
- 注意:这里的字符集要设置成 utf8
2、 创建 t_user 表,并插入数据
CREATE TABLE t_user(
uid INT(6) PRIMARY KEY AUTO_INCREMENT,
uname VARCHAR(32),
pwd VARCHAR(32)
);
INSERT INTO t_user VALUES(DEFAULT,'张三','123');
INSERT INTO t_user VALUES(DEFAULT,'李四','456');
三、书写核心代码
1、创建 t_user 实体类
- 在 src/com/zer/pojo 中创建
package com.zer.pojo;
/**
* @author yz
* @className User
* @time 2022-04-12 23:09
* Description:
*/
public class User {
private Integer uid;
private String uname;
private String pwd;
public User() {
}
public User(Integer uid, String uname, String pwd) {
this.uid = uid;
this.uname = uname;
this.pwd = pwd;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User{" +
"uid=" + uid +
", uname='" + uname + '\'' +
", pwd='" + pwd + '\'' +
'}';
}
}
2、创建 UserMapper 接口
- 在 src/com/zer/mapper 下创建接口
- 注意:因为这里只是一条简单的查询代码 ,所以我这里直接是使用了注解的方式,所以没有书写对应的 mapper.xml 文件
package com.zer.mapper;
import com.zer.pojo.User;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
public interface UserMapper {
/**
* 查询单个用户
*
* @param uname 用户名
* @param pwd 密码
* @return 用户对象
*/
@Select("select * from t_user where uname=#{uname} and pwd=#{pwd}")
User selectOnt(@Param("uname") String uname, @Param("pwd") String pwd);
}
3、创建 LoginService 接口
- 在 src/com/zer/service 下创建
package com.zer.service;
import com.zer.pojo.User;
public interface LoginService {
/**
* 用户登录Service
* @param uname 用户名
* @param pwd 密码
* @return 用户对象
*/
User userLoginService(String uname, String pwd);
}
4、创建 LoginServiceImpl 实现类
- 在 src/com/zer/service/impl 下创建
package com.zer.service.impl;
import com.zer.mapper.UserMapper;
import com.zer.pojo.User;
import com.zer.service.LoginService;
public class LoginServiceImpl implements LoginService {
private UserMapper userMapper;
public UserMapper getUserMapper() {
return userMapper;
}
public void setUserMapper(UserMapper userMapper) {
this.userMapper = userMapper;
}
@Override
public User userLoginService(String uname, String pwd) {
User user = userMapper.selectOnt(uname, pwd);
return user;
}
}
5、创建 LoginServlet
- 在 src/com/zer/controller 下创建
package com.zer.controller;
import com.zer.pojo.User;
import com.zer.service.LoginService;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
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 javax.servlet.http.HttpSession;
import java.io.IOException;
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
private LoginService loginService;
@Override
public void init() throws ServletException {
ApplicationContext ac = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
loginService = (LoginService) ac.getBean("us");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置请求编码格式
req.setCharacterEncoding("utf-8");
//设置响应编码格式
resp.setCharacterEncoding("uth-8");
resp.setContentType("test/html;charset=utf-8");
//获取请求数据
String uname = req.getParameter("uname");
String pwd = req.getParameter("pwd");
//获取查询的结果
User user = loginService.userLoginService(uname, pwd);
//响应结果
HttpSession session = req.getSession();
if (user != null) {
//登录成功,重定向到首页
session.setAttribute("user", user);
resp.sendRedirect(req.getContextPath() + "/index.jsp");
} else {
//登录失败,重定向到登录页面
session.setAttribute("flag","loginFail");
resp.sendRedirect(req.getContextPath() + "/login.jsp");
}
}
}
四、创建 JSP 页面
- 在 web 目录下创建
- login.jsp 页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>登录</title>
</head>
<c:if test="${sessionScope.flag=='loginFail'}">
<h2 style="color: red; font-size: 20px">登录失败:用户名或密码错误!</h2>
</c:if>
<c:remove var="flag" scope="session"/>
<form action="${pageContext.request.contextPath}/loginServlet" method="post">
用户名: <input type="text" name="uname" value=""><br>
密码: <input type="password" name="pwd" value=""><br>
<input type="submit" value="登录">
</form>
</html>
- index.jsp 页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>主页</title>
</head>
<body>
<c:if test="${sessionScope.user!=null}">
${sessionScope.user.uname},欢迎您!!!
</c:if>
<c:if test="${sessionScope.user==null}">
<a href="login.jsp">请先登录</a>
</c:if>
</body>
</html>
五、页面效果
那么,Spring整合MyBatis,实现登录功能 就已经实现了!
如果各位在搭建的时候遇到什么问题可以留言哈~~~
一起交流~~