1、准备登录注册页面
2、创建db1数据库,创建tb_user用户表,创建User实体类
-- 创建数据库
CREATE DATAbase db1;
-- 创建用户表
CREATE TABLE tb_user(
id int primary key auto_increment,
username varchar(20) unique,
password varchar(32)
);
-- 添加数据
INSERT INTO tb_user(username,password) values('zhangsan','123'),('lisi','234');
SELECt * FROM tb_user;
创建User实体类,存放在pojo包下
package com.zcl.webs.pojo;
public class User {
private Integer id;
private String username;
private String password;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + ''' +
", password='" + password + ''' +
'}';
}
}
3、导入MyBatis坐标,MySQL驱动坐标
org.mybatis
mybatis
3.5.5
mysql
mysql-connector-java
8.0.27
4、创建mybatis-config.xml核心配置文件,UserMapper.xml映射文件,UserMapper接口
mybatis-config.xml核心配置文件(可官网复制修改)
链接数据库的核心文件
在mapper包下创建UserMapper接口
package com.zcl.mapper;
public interface UserMapper {
}
创建UserMapper映射文件
需要在resources包下通过【com/zcl/mapper】方式创建包名,不可使用点来区分,映射文件的名称需要与UserMapper接口一致,如果有插件的就会出现小鸟的图标显示,mapper里的namespace是接口的全路径名需要写对
2、正式完成步骤
2.1、在UserMapper接口上写MyBatis查询数据库sql语句
public interface UserMapper {
@Select("select * from tb_user where username = #{username}} and password = #{password})")
User select(@Param("username") String username,@Param("password") String password);
}
2.2、修改登录页面的form表单的提交路径
2.3、在webs包下创建loginServlet服务器
package com.zcl.webs;
import com.zcl.mapper.UserMapper;
import com.zcl.pojo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
@WebServlet("/loginServlet")
public class loginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1、获取用户名和密码
String username = request.getParameter("username");
String password = request.getParameter("password");
// 2、使用mybatis链接数据库完成查询
// 2.1、获取SqlSessionFactory对象【直接官网复制修改配置文件路径即可】
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 2.2、获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 2.3、获取Mapper
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 2.4、调用方法传入参数查询数据库信息
User user = mapper.select(username, password);
// 2.5、释放资源
sqlSession.close();
// 设置字符输出流,并设置content-type和编码格式
response.setContentType("text/html;charset=utf-8");
// 获取字符输出流对象
PrintWriter writer = response.getWriter();
// 3、判断user是否为null来判断是否登录成功
if(user!=null){
// 登录成功
writer.write("登录成功");
}else {
// 登录失败
writer.write("登录失败");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doGet(request, response);
}
}
测试
先访问login.html页面,填写登录信息来完成测试
3.1、完成UserMapper接口的根据用户名查询信息和注册信息方法
@Select("select * from tb_user where username = #{username} and")
User selectByUsername(String username);
@Select("insert into tb_user values (null,#{username},#{password})")
void add(User user);
3.2、设置表单页面的提交路径和post方式
3.3、创建registerServlet注册服务器
@WebServlet("/registerServlet")
public class registerServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("registerServlet....");
// 1、接收用户数据
String username = request.getParameter("username");
String password = request.getParameter("password");
// 2、封装用户对象
User user = new User();
user.setUsername(username);
user.setPassword(password);
// 3、使用mybatis链接数据库完成查询
// 3.1、获取SqlSessionFactory对象【直接官网复制修改配置文件路径即可】
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
// 3.2、获取SqlSession对象
SqlSession sqlSession = sqlSessionFactory.openSession();
// 3.3、获取Mapper
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
// 4、调用mapper查询用户名是否存在
User u = mapper.selectByUsername(username);
// 5、判断是否存在来决定注册情况
if(u==null){
// 用户名不存在
mapper.add(user);
// 提交事务
sqlSession.commit();
// 释放资源
sqlSession.close();
}else {
// 用户名已存在
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("用户名已存在");
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("post.....");
this.doGet(request, response);
}
}
注册结果
4、代码优化第一次注册添加了wangwu用户信息
问题存在:
1、代码重复
2、SqlSessionFactory工厂对象创建了两次,浪费资源
解决方法:
1、创建工具类
public class SqlSessionFactoryUtils {
private static SqlSessionFactory sqlSessionFactory;
// 静态代码块【会随着类的创建加载而自动执行且只执行一次】
static {
// 2.1、获取SqlSessionFactory对象【直接官网复制修改配置文件路径即可】
String resource = "mybatis-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
public static SqlSessionFactory getSqlSessionFactory(){
return sqlSessionFactory;
}
}
2、替换原代码
注释那三条连接的数据
SqlSessionFactory sqlSessionFactory = SqlSessionFactoryUtils.getSqlSessionFactory();



