登录
entity
首先我们看一看数据库login_ticket表,id主键,user_id,ticket也就是登录口令,还有status状态,0有效1无效,expired失效日期。根据数据库写实体类,并生成get/set方法。
private int id;
private int userId;
private String ticket;
private int status;
private Date expired;
dao
然后写dao层接口,新建LoginTicketMapper。之前我们写sql是在resources下mapper目录写xml,这里来演示另一种方法——注解。
- 首先还是@Mapper注解定义接口
- 按照之前的方法写好抽象方法,插入登录口令
- 在方法上加@Insert注解,对应insert方法,可以将sql语句拆分成多个字符串,同样#{}从变量中取值
- @Options使用主键自增
- Select方法也类似
@Mapper
public interface LoginTicketMapper {
@Insert({
"insert into login_ticket(user_id,ticket,status,expired) ",
"values(#{userId},#{ticket},#{status},#{expired})"
})
@Options(useGeneratedKeys = true,keyProperty = "id")
int insertLoginTicket(LoginTicket ticket);
@Select({
"select id,user_id,ticket,status,expired ",
"from login_ticket where ticket=#{ticket}"
})
LoginTicket selectByTicket(String ticket);
}
第三个@Update演示动态拼接sql语句,首先用标签包裹sql语句,使用判断和拼接,这里直接拼了一个1=1。
@Update({
"<script>",
"update login_ticket set status=#{status} where ticket=#{ticket} ",
"<if test=\"ticket!=null\" >",
"and 1=1",
"</if>",
"</script>"
})
int updateStatus(String ticket,int status);
Service
然后写登录服务,这个也算是user相关的,直接写在UserService。
- 返回值使用map返回多种情况的消息,需要浏览器传用户名,密码,过期时间。
- 首先对空值处理,以防浏览器错误传入空值
- 通过用户名查出user,依次验证账号,账号状态,密码
- 验证通过后生成登录凭证,存到数据库,并返回ticket
<