相关配置:
1.相关配置
首先java的编译器有许多,我使用的编译器是idea,jkd使用的是1.8版本,Tomcat是8.5.45版本。至于maven,我在这里没用到,所以跟我不一样的同学可以自行上网找maven的环境搭建,关于这方面网上有许多。
功能实现
首先打开项目包,下面是我的项目结构
这里说明一下UserDaoTest是我对接口UserDao里方法的测试,建议一下,建方法时最好测试一下方法的可行性,这对后面改错很有帮助。
具体操作步骤
第一步:获取SqlSessionFactory对象和sqlsession实例
package cn.kgc.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 MapperConfig {
private static SqlSessionFactory factory;
//static初始化就加载
static {
SqlSessionFactoryBuilder builder=new SqlSessionFactoryBuilder();
try {
//两行代码死的,mybatis第一步:获取SqlSessionFactory对象
InputStream is= Resources.getResourceAsStream("mybatis-cfg.xml");
factory=builder.build(is);
} catch (IOException e) {
e.printStackTrace();
}
}
//获取SqlSessionFactory对象后,获得sqlsession实例
//sqlsession包含了几乎所有sql语句
public static SqlSession getSession(){
return factory.openSession(true);
}
//关闭SqlSession
public static void closeSession(SqlSession session){
if(session!=null){
session.close();
}
}
private MapperConfig(){
}
}
第二步,建实体类User
package cn.kgc.entity;
public class User {
private int user_id;
private String user_name;
private String password;
private int grade;
private String phone;
private String user_type;
public User(){}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public User(int user_id, String user_name, String password, int grade, String phone, String user_type) {
this.user_id = user_id;
this.user_name = user_name;
this.password = password;
this.grade = grade;
this.phone = phone;
this.user_type = user_type;
}
public int getUser_id() {
return user_id;
}
public void setUser_id(int user_id) {
this.user_id = user_id;
}
public String getUser_name() {
return user_name;
}
public void setUser_name(String user_name) {
this.user_name = user_name;
}
public int getGrade() {
return grade;
}
public void setGrade(int grade) {
this.grade = grade;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getUser_type() {
return user_type;
}
public void setUser_type(String user_type) {
this.user_type = user_type;
}
//重写toString方法
@Override
public String toString() {
return "User{" +
"user_id=" + user_id +
", user_name='" + user_name + '\'' +
", password='" + password + '\'' +
", grade=" + grade +
", phone='" + phone + '\'' +
", user_type='" + user_type + '\'' +
'}';
}
}
第三步、数据访问层Dao接口的创建,编写实现方法
package cn.kgc.dao;
import cn.kgc.entity.User;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface UserDao {
//这里注意一下,参数的写法建议用下面这种方式
User login(@Param("uname") String uname, @Param("password") String password);
}
第四步、Mapper层实现接口方法
建一个mapper文件,实现接口功能,命名没有限制,但最好有意义,比如说接口名加上Mapper,文件类型为xml。这里的namespace指向了UserDao接口,这里的标签中的id必须与接口中的方法名对应。 resultType 为返回值类型,当然我这里的“user” 在我的mybatis-cfg.xml 中为它配置了别名。
第五步、service层的实现
再建一个service包,这个包下的文件会实现具体需要的功能,比如说注册和登录。创建接口UserService。
package cn.kgc.service;
import cn.kgc.entity.User;
public interface UserService {
User login(String user_name, String password);
}
创建实现类UserServiceImpl
package cn.kgc.service.impl;
import cn.kgc.dao.UserDao;
import cn.kgc.entity.User;
import cn.kgc.service.UserService;
import cn.kgc.util.MapperConfig;
import org.apache.ibatis.session.SqlSession;
public class UserServiceImpl implements UserService {
private SqlSession session;
public UserServiceImpl(){
session= MapperConfig.getSession();
}
@Override
public User login(String uname, String password) {
//1、对参数判空
if(uname==null||password==null||uname.trim().equals("")||
password.trim().equals("")){
return null;
}else{
//2、执行登陆查询
User user=session.getMapper(UserDao.class).login(uname,password);
session.commit();
session.close();
return user;
}
}
}
第六步、servlet层的实现
package cn.kgc.servlet;
import cn.kgc.entity.User;
import cn.kgc.service.UserService;
import cn.kgc.service.impl.UserServiceImpl;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class LoginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setCharacterEncoding("utf-8");
String uname=req.getParameter("userName");
String password=req.getParameter("password");
UserServiceImpl service=new UserServiceImpl();
User user= service.login(uname,password);
if(user==null){
req.getSession().setAttribute("msg","用户名和密码不正确");
resp.sendRedirect("index.jsp");
}else{
//查询成功,可以登陆,把用户名塞入session中
req.getSession().setAttribute("msg","登陆成功");
req.getSession().setAttribute("user",user);
resp.sendRedirect("index.jsp");
}
}
}
第七步:web.xml 配置:
光有上面的代码肯定是不够的,从哪连接数据库,从哪设置登录界面什么的都没有定。这里我们先来配置最主要的web.xml文件!
loginServlet
cn.kgc.servlet.LoginServlet
loginServlet
/login.do
第八步:jsp实现用户登陆模块
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
用户登陆
<%
Object msg=session.getAttribute("msg");
if(msg!=null && msg.equals("登陆成功")){
response.sendRedirect("login.jsp");
}
%>
<%
session.removeAttribute("msg");
%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
Title
登陆成功
最后别忘了数据库表的创建,下面贴上表信息
CREATE TABLE `user_info` (
`user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_name` varchar(20) DEFAULT NULL,
`password` varchar(20) DEFAULT NULL,
`grade` int(10) DEFAULT NULL,
`phone` varchar(20) DEFAULT NULL,
`user_type` varchar(20) DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8