- 表单提交位置:logic/baseInfo/sysUser/login
- 业务逻辑处理要求:
- 根据用户名密码判断该用户是否为合法用户;
- 登陆合法则跳转至/index页面;
2.uid 用户名,pwd 密码 error 错误 msg 需要跳转的结果页面
3.
- Java部分:
- controller(SysUsercontroller.java)
- entity(Sysuser.java)
- service(SysUserService.java)
- mapper(interface,SysuserMapper.java)
- mapper(xml,SysuserMapper.xml)
2.
实体类——>数据库访问层——>业务层——>控制层
首先,写Sysuser中的实体类,在com.iss.okair.db.entity中的Sysuser,并写好get,set函数(Alt+shift+s+r)
然后再创建com.iss.okair.db.mapper.SysuserMapper
public interface SysuserMapper {
List<Sysuser> loginCheck(Sysuser loginUser);}
在SysuserMapper.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.iss.okair.db.mapper.SysuserMapper">
在mybatis中,映射文件中的namespace是用于绑定Dao接口的,即面向接口编程。
当你的namespace绑定接口后,你可以不用写接口实现类,mybatis会通过该绑定自动帮你找到对应要执行的SQL语句,如下:
<resultMap id="BaseResultMap" type="com.iss.okair.db.entity.Sysuser">
<id column="id" jdbcType="INTEGER" property="id" />
<result column="uid" jdbcType="VARCHAR" property="uid" />
<result column="pwd" jdbcType="VARCHAR" property="pwd" />
<result column="nickName" jdbcType="VARCHAR" property="nickname" />
<result column="role" jdbcType="VARCHAR" property="role" />
<result column="createTime" jdbcType="TIMESTAMP" property="createtime" />
</resultMap>
<sql id="Base_Column_List">
id, uid, pwd, nickName, role, createTime
</sql>
//jdbcType与javaType的区别:
JdbcType是在数据库中,javaType是java环境下
Resultmap与resulttype的区别:resulttype是映射的是类型,应为在bean里面的类型,map是字段
parameterType:输入的类型。
<select id="selectByExample" parameterType="com.iss.okair.db.entity.Sysuser" resultMap="BaseResultMap">
//parameterType是输入,resultMap是输出
select
<include refid="Base_Column_List" />
from sysuser
<where>
<if test="role!=null and role != '-1'">
and role = #{role, jdbcType=VARCHAR}
</if>
<if test="uid !=null and uid != ''">
<bind name="uid" value="'%' + uid + '%'" />
and uid like '${uid}'
</if>
</where>
</select>
<select id="loginCheck" parameterType="com.iss.okair.db.entity.Sysuser" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from sysuser
where uid = #{uid, jdbcType=VARCHAR} and pwd = #{pwd, jdbcType=VARCHAR}
</select>
$与#的区别:$OGML表达式,传值。#赋值。
</mapper>
业务层:
@Service用于标注业务层组件
@Autowired//引入,变成bean类型
private SysuserMapper mapper;
public Sysuser login(Sysuser loginUser) {
loginUser.setPwd(MD5Tools.buildMD5String(loginUser.getPwd()));
List<Sysuser> result = mapper.loginCheck(loginUser);
return result.size()==1?result.get(0):null;
}
控制层:
@RestController
@RestController注解相当于@ResponseBody + @Controller合在一起的作用。
@RequestMapping
RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
当我们需要把某个值从一个请求redirect到另一个请求,那可能就取不到值,这个时候就可以用@SesstionAttributes这个注解了
@SesstionAttributes是作用在类上的
@RequestMapping("/logic/baseInfo/sysUser")
@SessionAttributes("currentUser")
public class SysUserController {
@Autowired
private SysUserService service;
@RequestMapping("/login")
@ResponseStatus(code=HttpStatus.OK)
public Message login(Sysuser user, ModelMap model) {
ModelMap对象主要用于传递控制方法处理数据到结果页面,也就是说我们把结果页面上需要的数据放到ModelMap对象中即可,他的作用类似于request对象的setAttribute方法的作用,用来在一个请求过程中传递处理的数据。通过以下方法向页面传递参数:
addAttribute(String key,Object value);
Message message = new Message();
user = service.login(user);
if(user!=null) {
message.setError(false);
message.setMsg("/index");
model.addAttribute("currentUser", user);
} else {
message.setError(true);
message.setMsg("/login");
}
return message;
}