【总结Demo】使用springBoot+mybatis完成简单注册登录--[简版]

使用工具: idea

项目类型: maven (jar)

1. 建立表结构, 这里数据表和实体类对应字段简单设置为 id, username, password (代码略)

2. 创建maven工程, 并添加spring-boot及相关依赖

        1. 创建maven项目(最简单的即可, 图略)

        2. 添加spring-boot及相关依赖

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.0.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--热部署  idea默认运行期间不自动编译 需要提前配置一下-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>
        <!--整合mysql-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.32</version>
            <scope>runtime</scope>
        </dependency>
        <!-- alibaba的druid数据库连接池 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid-spring-boot-starter</artifactId>
            <version>1.1.4</version>
        </dependency>
        <!--mybatis-->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.1</version>
        </dependency>
        <!--json @responseBody/@requestBody-->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.28</version>
        </dependency>
    </dependencies>

        其中, springBoot热部署在idea中需要配置一下. 因为idea只在程序未运行期间才能自动编译, 而在程序启动期间, 默认是不编译的.  所以, 这与springBoot热部署的作用冲突了, 需要配置两点

解决springBoot热部署失效的问题:

        1. setting-->compiler-->Build project automatically前面的对勾

                2. Ctrl+shift+A 搜索Registry, 找到 compiler.automake.allow.when.app.running ,打上对勾

        设置完运行期间自动编译, spring-boot才能在idea上进行热部署

3. 配置文件

在resource下创建application.properties, 内容:

#端口号
server.port=8998
#数据库
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/user?characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=123
#前缀和后缀  这里把页面放在webapp下, 不再配置前缀
#spring.mvc.view.suffix=.html

4. 页面

        注册页面: regist.html

<head>
    <meta charset="UTF-8">
    <title>用户注册</title>
</head>
<body>
    <form action="/user/regist.do" method="post">
        用户名:<input name="username" type="text"/><br>
        密码:<input name="password" type="password"> <br>
        <input type="submit" value="注册">
    </form>
</body>

        登录页面 login.html

<head>
    <meta charset="UTF-8">
    <title>用户登录</title>
</head>
<body>
    <form action="/user/login.do" method="post">
        用户名:<input name="username" type="text"/><br>
        密码:<input name="password" type="password"> <br>
        <input type="submit" value="登录">
    </form>
</body>

        登录和注册成功页面:

<head>
    <meta charset="UTF-8">
    <title>成功</title>
</head>
<body>
    <h1>登陆/注册成功</h1>
</body>

        登录和注册失败页面:

<head>
    <meta charset="UTF-8">
    <title>失败</title>
</head>
<body>
    <h1>登录/注册失败</h1>
</body>

5. 后端

    (1). 在外层包(所有类和接口所在包的外面)创建springBoot启动入口

/**
 * @SpringBootApplication相当于3个注解
 * 1. @Configuration  定义一个配置类
 * 2. @EnableAutoConfiguration spring boot自动根据jar包的依赖来自动配置项目
 * 3. @ComponentScan  spring自动扫描类上的注解, 并注入spring容器
 */
@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }

}

    (2). controller

@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = "/login")
    public String login(User user){
        User userExist = userService.login(user);
        if(userExist != null){
            return "redirect:/success.html";
        }
        return "redirect:/fail.html";
    }
    @RequestMapping("/regist")
    public String regist(User user){

        userService.regist(user);
        return "redirect:/success.html";
    }
}

    (3). service

public interface UserService {
    User login(User user);
    void regist(User user);
}
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    public User login(User user) {
        return userMapper.login(user);
    }

    @Override
    public void regist(User user) {
        userMapper.regist(user);
    }
}

    (4). dao

@Mapper
public interface UserMapper {

    @Select("select id,username,password from user where username=#{username} and password = #{password}")
    User login(User user);

    @Insert("insert into user (id,username,password) values(#{id},#{username},#{password})")
    void regist(User user);
}

问题:

1. 若入口类不放在所有包的外层, 它的注解会扫描不到这些包和类, 无法注入到spring容器

报错信息: There was an unexpected error (type=Not Found, status=404)

2. 关于springMVC返回视图的问题.

        表单中若设置提交方式为post, 那么controller层, 数据返回时, 若返回  return"xxx.html", 直接返回静态视图, 会造成html无法解析post请求, 会造成  (type=Method Not Allowed, status=405). Request method 'POST' not support的错误

        因此, 只能重定向, 或者将页面表单提交方式改为get

猜你喜欢

转载自blog.csdn.net/byteArr/article/details/80955703