Springboot练手----数据库简单应用,和拦截器

Springboot练手----数据库简单应用,和拦截器

Scroll Down

开始

由于登陆注册界面需要一个数据库的简单应用,所以本次博客用到了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");
    }
}

自此。一个简单的登陆页面就完成了