535 项目分析
1.创建DDL数据库表结构!
create table employee(
eid int(5) primary key auto_increment,
ename VARCHAR(55),
pwd VARCHAR(55),
sex VARCHAR(55),
hobby VARCHAR(55),
birth date,
remark VARCHAR(55)
)
插了一条数据
1导包
2把前端项目文件进行导入(这是别人写的)
3在src下构建项目结构
4util---->DBUtil
ThreadLocal是什么?本地线程,不是线程池!
为了使一次请求使用同一个SqlSession对象!
package com.bjsxt.util;
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 java.io.IOException;
import java.io.InputStream;
public class DBUtil {
private static SqlSessionFactory factory;
private static ThreadLocal<SqlSession> tl=new ThreadLocal<>();
static {
InputStream inputStream = null;
try {
//[1]解析myBatis.xml文件
inputStream = Resources.getResourceAsStream("mybatis.xml");
//[2]获得sqlsession工厂
factory=new SqlSessionFactoryBuilder().build(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
}
//获得sqlsession对象
public static SqlSession getSqlSession(){
//获得ThreadLoacl中的sqlsession对象
SqlSession sqlSession = tl.get();
if(sqlSession==null){
sqlSession = factory.openSession(true);
//把创建好的对象放到ThreadLoacl
tl.set(sqlSession);
}
return tl.get();
}
//关闭sqlsession
public static void closeAll(){
SqlSession sqlSession = tl.get();
if(sqlSession!=null){
sqlSession.close();
}
tl.set(null);
}
}
5实体类
util.date 和 sql.date有什么区别?
sql.date 是mysql的date 只含年月日
util.date是sql.date的父类!可以包含年月日时分秒
实体类都需要实现序列化接口!
package com.bjsxt.entity;
import java.io.Serializable;
import java.util.Date;
public class Employee implements Serializable {
private Integer eid;
private String ename;
private String pwd;
private String sex;
private String hobby;
private Date birth;
private String phone;
private String remark;
}
536 登陆的实现
1.编写mapper EmployeeMapper EmployeeMapper.xml
package com.bjsxt.mapper;
import com.bjsxt.entity.Employee;
public interface EmployeeMapper {
//查询指定员工操作
Employee selectOne(String ename,String pwd);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.bjsxt.mapper.EmployeeMapper">
<select id="selectOne" resultType="employee">
select * from employee where ename=#{param1} and pwd=#{param2}
</select>
</mapper>
2 编写功能service EmployeeService 和 EmployeeServiceImpl
package com.bjsxt.service;
import com.bjsxt.entity.Employee;
public interface EmployeeService {
//用户登录
Employee login(String ename,String pwd);
}
package com.bjsxt.service.impl;
import com.bjsxt.entity.Employee;
import com.bjsxt.mapper.EmployeeMapper;
import com.bjsxt.service.EmployeeService;
import com.bjsxt.util.DBUtil;
public class EmployeeServiceImpl implements EmployeeService {
@Override
public Employee login(String ename, String pwd) {
EmployeeMapper mapper = DBUtil.getSqlSession().getMapper(EmployeeMapper.class);
Employee employee = mapper.selectOne(ename, pwd);
return employee;
}
}
3 编写servlet EmployeeLoginServlet
package com.bjsxt.servlet;
import com.bjsxt.entity.Employee;
import com.bjsxt.service.EmployeeService;
import com.bjsxt.service.impl.EmployeeServiceImpl;
import jdk.internal.org.objectweb.asm.commons.SerialVersionUIDAdder;
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;
@WebServlet(urlPatterns = "/EmployeeLoginServlet")
public class EmployeeLoginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1.接收页面的数据
String ename = req.getParameter("ename");
String pwd = req.getParameter("pwd");
//2.数据的处理 返回结果
EmployeeService emps= new EmployeeServiceImpl();
Employee employee = emps.login(ename, pwd);
//3.根据结果给用户做出响应
if(employee!=null){
resp.sendRedirect(req.getContextPath()+"/index.html");
}else{
req.setAttribute("msg","登陆失败");
req.getRequestDispatcher("/login.jsp").forward(req,resp);
}
}
}
537 添加的实现
1.写EmployeeMapper 和 EmployeeMapper.xml
//添加员工操作
int insert(Employee employee);
<insert id="insert" parameterType="employee">
insert into employee values(DEFAULT
,#{ename},#{pwd},#{sex},#{hobby},#{birth},#{phone},#{remark})
</insert>
2 写EmployeeService 和 EmployeeServiceImpl
EmployeeMapper mapper = DBUtil.getSqlSession().getMapper(EmployeeMapper.class);先不要提到外面!
因为涉及到异步请求,会出问题!等到spring后可以解决这个问题!
//添加操作
int save(Employee employee);
@Override
public int save(Employee employee) {
EmployeeMapper mapper = DBUtil.getSqlSession().getMapper(EmployeeMapper.class);
int insert = mapper.insert(employee);
DBUtil.closeAll();
return insert;
}
3 写EmployeeSaveServlet
package com.bjsxt.servlet;
import com.bjsxt.entity.Employee;
import com.bjsxt.service.EmployeeService;
import com.bjsxt.service.impl.EmployeeServiceImpl;
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.sql.Date;
import java.util.Arrays;
@WebServlet(urlPatterns = "/EmployeeSaveServlet")
public class EmployeeSaveServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
//接受前端数据
String ename = req.getParameter("ename");
String pwd = req.getParameter("pwd");
String sex = req.getParameter("sex"