开始
由于登陆注册界面需要一个数据库的简单应用,所以本次博客用到了MyBatis框架的基础应用
登陆和注册的控制组件和user的代码可以看下上一篇: 验证码登陆注册组件
数据库环境设置
导入依赖
由于我用的数据库是MySQL数据库,所以需要在pom.xml中导入三个依赖,依赖代码如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
设置配置文件
创建一个application.yml配置文件,在配置文件中设置数据库代码信息:
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/sqls #数据库地址
username: root #用户名
password: 123456 #数据库密码
建立用户表
在数据库中建立一个user表,用于存放用户名信息,SQL代码如下
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user` (
`ID` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`username` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`password` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
`birthday` date NULL DEFAULT NULL,
`Creation_time` timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0),
PRIMARY KEY (`ID`) USING BTREE,
UNIQUE INDEX `name`(`username`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 20 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
数据库代码实现
创建用户的数据库接口
在dao文件夹下创建一个UserDao类,代码如下
public interface UserDao {
//通过ID获取用户信息
public user getUser(Integer id);
//通过用户名获取用户密码
public String getPassword(String username);
//通过ID删除用户
public void deleuser(Integer id);
//在数据库中添加用户不含生日
public void insertUserNodate(user user);
//在数据库中添加用户含生日
public void insertUser(user user);
}
user是一个用户内容结构体,在上一篇中有提供,这里就不贴代码了
创建数据库实现类
创建一个mapper接口,继承用户数据库操作接口,并使用MyBatis提供的注解进行实现代码如下
@Mapper
public interface UserMapper extends UserDao {
@Override
@Select("select * from user where id=#{id}")
public user getUser(Integer id);
@Override
@Select("select password from user where username=#{username}")
public String getPassword(String username);
@Override
@Delete("delete from user where id=#{id}")
public void deleuser(Integer id);
@Override
@Insert("insert into user(username,password) values (#{username},#{password})")
public void insertUserNodate(user user);
@Override
@Insert("insert into user(username,password,birthday) values (#{username},#{password},#{birthday})")
public void insertUser(user user);
}
这些都是对UserDao进行简单实现,具体功能可以看看上面的UserDao的注释
创建一个用户业务代码类
操作数据库的时候,还需要添加业务代码类用于封装数据库,使后期增加新功能更好维护,所以我们添加一个UserService类进行封装。代码如下
@Service
public class UserService {
//自动获取Spring容器中userDao的实现类
@Autowired
public UserDao userDao;
/**
* 通过用户名获取一个数据库对应的密码
* @param username 用户名
* @return 该用户名密码
*/
public String getPassword(String username){
return userDao.getPassword(username);
}
/**
* 注册一个用户当用户生日为空时,不填生日
* @param user
*/
public void insertUser(user user){
if (user.getBirthday()==null||user.getBirthday().equals("")){
userDao.insertUserNodate(user);
}else {
userDao.insertUser(user);
}
}
}
拦截器
创建拦截器
既然登陆页面有了,那就应该拦截非登陆用户,Springboot可以通过重写HandlerInterceptor来进行拦截器设置,于是我们创建一个LoginInterceptor类来重写prHandle方法,使其拦截请求之前的内容,代码如下
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Object loginuser = request.getSession().getAttribute("loginuser");
if (loginuser==null){
request.setAttribute("msg","未登录,请登陆");
request.getRequestDispatcher("/").forward(request,response);
return false;
}else {
return true;
}
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
创建配置类
创建一个Config配置类:LoginMvcConfig继承WebMvcConfigurer来配置拦截器和地址映射
代码如下
@Configuration
public class LoginMvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("user/login");
registry.addViewController("/register").setViewName("user/register");
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/","/user/login","/register","/user/register","/css/**","/img/**","/code");
}
}