流程说明
- 用户填写用户名、密码等信息、点击注册按钮,提交到RegisterServlet
- 在RegisterServlet中使用MyBatis 保存数据
- 保存前,需要判断用户名是否已经存在:根据用户名查询数据库
UserMapper.java
编写UserMapper接口中方法,这里add方法使用mybatis,不使用注解,容易bug
package com.taotao.mapper;
import com.taotao.pojo.User;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
@SuppressWarnings({"all"})
public interface UserMapper {
/**
* 根据用户名和密码查询用户对象
* @param username
* @param password
* @return
*/
@Select("select * from tb_user where username = #{username} and password = #{password}")
User select(@Param("username") String username, @Param("password") String password);
/**
* 根据用户名查询用户对象
* @param username
* @return
*/
@Select("select * from tb_user where username = #{username}")
User selectByUsername(String username);
// /**
// * 添加用户
// * @param user
// */
// @Insert("insert into tb_user values (null,#{username},#{password})")
void add(User user);
}
映射sql
编写映射UserMapper.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.taotao.mapper.UserMapper">
<insert id="add">
insert into tb_user(id,username,password)
values (null,#{username},#{password});
</insert>
</mapper>
Register表单
编写Register.html表单页面
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Register</title>
<link rel="stylesheet" type="text/css" href="./css/log.css"/>
</head>
<body>
<form action="/User_demo1/registerServlet" method="post">
<p class="head">Welcome Register</p>
<input id="user" name="username" type="text" placeholder="Username:"><br>
<input id="paws" name="password" type="password" placeholder="Password:"><br>
<input id="sub" type="submit" value="Register"/>
</form>
<script src="./js/log.js" type="text/javascript" charset="utf-8"></script>
</body>
</html>
css文件
*{
margin: 0;
padding: 0;
border: 0px;
}
body{
background-color: skyblue;
}
form{
position: absolute;
left: 50%;
top: 50%;
margin-left: -300px;
margin-top: -280px;
width: 600px;
height: 400px;
background-color: #ebc4c4;
border: 1px solid;
border-radius: 10px;
box-shadow: 0px 0px 5px 5px rgba(0,0,0,.3);
transition: all 1s;
opacity: 0;
}
.show{
opacity: 1;
transform:translateY(80px)
}
.head{
width: 100%;
font-family: "隶书";
text-align: center;
font-size: 24px;
color: #ffffff;
margin-top: 50px;
letter-spacing: 5px;
}
#user{
position: absolute;
top: 40%;
left: 50%;
margin-left: -100px;
width: 200px;
height: 20px;
outline: none;
background-color: transparent;
border-bottom: 1px solid;
}
#paws{
position: absolute;
top: 50%;
left: 50%;
margin-left: -100px;
width: 200px;
height: 20px;
outline: none;
background-color: transparent;
border-bottom: 1px solid;
}
#sub{
position: absolute;
top: 60%;
left: 50%;
margin-left: -60px;
width: 120px;
height: 35px;
background-color: orange;
border-radius: 8px;
}
#sub:hover{
cursor: pointer;
background-color: #87CEEB;
}
Js文件
var from = document.querySelector('form');
console.log(from);
window.addEventListener('load',function(){
from.className=('show'+' from')
})
RegisterServlet
com.taotao.web包下新建RegisterServlet.java类
package com.taotao.web;
import com.taotao.mapper.UserMapper;
import com.taotao.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.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
/**
* create by 刘鸿涛
* 2022/3/26 23:04
*/
@SuppressWarnings({"all"})
@WebServlet(urlPatterns = "/registerServlet")
public class RegisterServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.接收用户数据
String username = req.getParameter("username");
String password = req.getParameter("password");
//封装用户对象
User user = new User();
user.setUsername(username);
user.setPassword(password);
//2.调用mapper 根据用户名查询用户对象
//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 userMapper = sqlSession.getMapper(UserMapper.class);
//2.4调用方法
User u = userMapper.selectByUsername(username);
System.out.println(user);
//设置utf-8编码格式以及识别html标签
resp.setContentType("text/html;charset=utf-8");
//3.判断用户对象是否为null
if (u == null){
//用户名不存在,添加用户
userMapper.add(user);
//提交事务
sqlSession.commit();
//释放资源
sqlSession.close();
resp.getWriter().write("create user successful!!");
}else {
//用户名存在,给出提示信息
resp.getWriter().write("can't create the user,the user is exists");
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
this.doGet(req, resp);
}
}
测试运行
注意
遇到了一个注解sql参数报错,最后使用mybatis映射文件sql解决问题