用户登录业务流程
SSM的web.xml文件视图解析器对视图进行过滤
dao层
UsersDao.java
public interface UsersDao {
Users queryByNameAndPass(String name,String pass);
}
注意参数的传递方式:https://blog.csdn.net/weixin_34375356/article/details/112440218
UsersDao.xml
id要与接口的方法名相同, sql语句中的#{变量名} 要与controller层中接收的参数名保持一致
<?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.dao.UsersDao">
<resultMap type="com.entity.Users" id="UsersMap">
<result property="uid" column="uid" jdbcType="INTEGER"/>
<result property="name" column="name" jdbcType="VARCHAR"/>
<result property="pass" column="pass" jdbcType="VARCHAR"/>
<result property="tel" column="tel" jdbcType="VARCHAR"/>
<result property="addr" column="addr" jdbcType="VARCHAR"/>
</resultMap>
<!--根据姓名和密码查询用户-->
<select id="queryByNameAndPass" resultMap="UsersMap">
select
uid, name, pass, tel, addr
from users
where name = #{name} and pass = #{pass}
</select>
</mapper>
Spring-mybatis.xml文件
配置映射扫描,可以扫描dao包下的所有资源,以及配置mapper.xml文件路径
dao层的测试
package com.service.impl;
import com.dao.UsersDao;
import com.entity.Users;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import static org.junit.Assert.*;
@RunWith(SpringJUnit4ClassRunner.class)
//告诉junitspring配置文件的位置
@ContextConfiguration({"classpath:mapper/UsersDao.xml","classpath:/spring-mybatis.xml"})
public class UsersServiceImplTest {
@Autowired
private UsersDao usersDao;
@Test
public void queryByNameAndPass() {
Users fengfeng = usersDao.queryByNameAndPass("fengfeng", "999999");
System.out.println(fengfeng);
}
@Test
public void queryById() {
Users users = usersDao.queryById(1);
System.out.println(users);
}
}
service层
业务层编写接口处理CRUD
public interface UsersService {
Users queryByNameAndPass(String name,String pass);
}
接口实现类
@Service("usersService")
public class UsersServiceImpl implements UsersService {
//可以用@Autowired或者@Resource
@Resource
private UsersDao usersDao;
@Override
public Users queryByNameAndPass(String name, String pass) {
return usersDao.queryByNameAndPass(name,pass);
}
}
spring-mvc.xml文件
对service以及controller进行包扫描,引入spring-mybatis的配置文件:ssm整合的特点是将mybatis交给spring管理
controller层
controller层中接收的参数要与异步传递的参数名保持一致
//@RestController
@Controller
@RequestMapping("users")
public class UsersController {
/**
* 服务对象
*/
@Resource
private UsersService usersService;
//异步请求
@RequestMapping("/login")
public @ResponseBody Object login(String name,String pass){
//如果使用的是map封装参数
Users users = usersService.queryByNameAndPass(name, pass);
ReturnObject returnObject = new ReturnObject();
//根据查询结果生成响应信息
if(users==null){
//登录失败账号或者密码错误
returnObject.setCode("0");
returnObject.setMessage("账号或者密码错误");
}else {
returnObject.setCode("1");
//登录成功
}
return returnObject;
}
}
封装的实体类
package com.commons;
public class ReturnObject {
private String code;//处理成功或者失败的标记
private String message;
private Object retDate;
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public Object getRetDate() {
return retDate;
}
public void setRetDate(Object retDate) {
this.retDate = retDate;
}
}
前端longin.jsp页面
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>login</title>
<script src="http://libs.baidu.com/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript">
$(function () {
//给登录按钮添加单击事件
$("#loginBtn").click(function () {
//收集参数
// 获取输入框中的值利用jquery
var loginname = $("#loginname").val();
var loginpass= $("#loginpass").val();
//表单验证
if(loginname==""){
alert("用户名不能为空");
return;
}
if(loginpass==""){
alert("密码不能为空");
return;
}
//发送请求
$.ajax({
url:'/login',
//data参数名可任意但要与controller层中的形参保持一致
data:{
name:loginname,
pass:loginpass
},
type:'post',
dataType:'json',
success:function (data) {
if(data.code==1){
//成功跳转到成功页面 跳controller 同步:超链接 地址栏 表单
window.location.href="/loginController"
}else {
//提示信息
$("#msg").html(data.message);
}
}
});
});
});
</script>
</head>
<body>
<form method="post" action="/users/login">
<input type="text" name="name" id="loginname"><p/>
<input type="password" name="pass" id="loginpass"><p/>
<span id="msg"></span>
<input type="button" value="登录" id="loginBtn">
</form>
</body>
</html>
异步跳入logincontroller
@Controller
public class LoginContrller {
@RequestMapping("/loginController")
public String success(){
return "success";
}
在Spring-mvc.xml配置文件中配置去后缀(如果没有配置则写页面全地址)
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/" />
</bean>
ller")
public String success(){
return "success";
}
在Spring-mvc.xml配置文件中配置去后缀(如果没有配置则写页面全地址)
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/" />
</bean>