发表于: 2020-01-11 19:26:56

1 1253


啥也不说就是干!!!

今天完成的事情:

1、SpringBoot 入门学习

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。Spring Boot 其实不是什么新的框架,它默认配置了很多框架的使用方式,就像 Maven 整合了所有的 Jar 包,Spring Boot 整合了所有的框架。

使用 Spring Boot 有什么好处

1)配置 web.xml,加载 Spring 和 Spring mvc

2)配置数据库连接、配置 Spring 事务

3)配置加载配置文件的读取,开启注解

4)配置日志文件

...


SpringBoot 快速入门

Maven 构建项目

1)选择 File -> New —> Project… 弹出新建项目的框

2)选择 Spring Initializr,Next 也会出现上述类似的配置界面,Idea 帮我们做了集成

3)填写相关内容后,点击 Next 选择依赖的包再点击 Next,最后确定信息无误点击 Finish。


Application main 方法就是整个项目的入口,启动 Application 项目就启动了

@SpringBootApplication
@MapperScan(basePackages = "com.gerry.jnshu.dao")
public class Application {
static Logger logger = LoggerFactory.getLogger(Application.class);

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

引入 web 模块

1)添加相关依赖

<!-- 实现对 Spring MVC 的自动化配置 -->
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-web</artifactId>
</dependency>

pom.xml 文件中默认有两个模块

spring-boot-starter:核心模块,包括自动配置支持、日志和 YAML,如果引入了 spring-boot-tarter-web web模块可以去掉此配置,因为 spring-boot-starter-web 自动依赖了 spring-boot-starter

spring-boot-starter-test:测试模块,包括 JUnit、Hamcrest、Mockito

2) 编写 Controller :

@RestController
public class HelloWorldController {
@RequestMapping("/hello")
public String index() {
return "Hello World";
   }
}

@RestController 就是 Controller 默认都以 Json 格式输出,等于之前 @Controller @ResponseBody 的结合

3)启动主程序,打开浏览器访问 http://localost:8080 就可以看到效果了

开发环境的调试:热启动在正常开发项目中很常见,SpringBoot 对调试支持很好,修改以后实时生效,需要添加如下配置

<dependencies>
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-devtools</artifactId>
 <optional>true</optional>
</dependency>
</dependencies>

<build>
<plugins>
 <plugin>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-maven-plugin</artifactId>
   <configuration>
     <fork>true</fork>
   </configuration>
 </plugin>
</plugins>
</build>

该模块在完整的打包环境下运行的时候会被禁用。如果使用 java -jar 启动应用或者用一个特定的 classloader 启动,它会认为这是一个“生产环境”。


SpringBoot 整合 Mybatis,实现基本的登录注册

1)引入相关依赖

<dependency> <!-- 本示例,我们使用 MySQL -->
 <groupId>mysql</groupId>
 <artifactId>mysql-connector-java</artifactId>
 <version>5.1.48</version>
</dependency>

<!-- 实现对 MyBatis 的自动化配置 -->
<dependency>
 <groupId>org.mybatis.spring.boot</groupId>
 <artifactId>mybatis-spring-boot-starter</artifactId>
 <version>2.1.1</version>
</dependency>

Application 类上面需要配置 @mapperScan 注解,扫描对应 Mapper 接口所在的包路径

@SpringBootApplication
@MapperScan(basePackages = "com.gerry.jnshu.dao")
public class Application {
static Logger logger = LoggerFactory.getLogger(Application.class);

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

application.yaml 文件配置如下:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/gerry?useSSL=false&useUnicode=true&characterEncoding=UTF-8
    driver-class-name: com.mysql.jdbc.Driver
    username: root
    password: 123456

mybatis:
   config-location: classpath:mybatis-config.xml #配置 Mybatis 配置文件路径
   mapper-locations: classpath:mapper/*.xml      #配置 Mapper xml 地址
   type-aliases-package: com.gerry.jnshu.pojo    #配置数据库实体类包路径

之前是通过 Mybatis_generator 和 通用 Mapper 的形式来开发 CRUD 相关操作,SpringBoot 中也可以通过该方式的配置来实现

<!-- 实现对 Mapper 的自动化配置-->
<dependency>
 <groupId>tk.mybatis</groupId>
 <artifactId>mapper-spring-boot-starter</artifactId>
 <version>2.1.5</version>
</dependency>

关于 Mybatis-Generator 的配置和之前的一样,这里就不赘述了

数据库中表结构如下:

执行 mvn:mybatis-generator:generate 生成相关的 Mapper 接口及 Mapper xml 文件


2、开发登录注册相关功能

AuthService 定义接口方法

public interface AuthService {

UserInfo login(UserInfo userInfo);
   Integer register(UserInfo userInfo);

}

AuthServiceImpl 实现类

@Service
public class AuthServiceImpl implements AuthService {

@Autowired
   private UserInfoMapper userInfoMapper;
   @Resource
   private AuthenticationManager authenticationManager;
   

   @Override
   public UserInfo login(UserInfo userInfo) {
       String userName = userInfo.getPhoneNum();
       String password = userInfo.getPassword();
       Example example = new Example(UserInfo.class);
       example.createCriteria().andEqualTo("phoneNum", userInfo.getPhoneNum())
             .andEqualTo("password", userInfo.getPassword());
       List<UserInfo> userInfoList = userInfoMapper.selectByExample(example);
       if (userInfoList.size() > 0) {
          return userInfoList.get(0);
       }
       return null;
   }


@Override
   public Integer register(UserInfo userInfo) {
       Example example = new Example(UserInfo.class);
       //判断用户是否存在(手机号码是唯一标识)
       example.createCriteria().andEqualTo("phoneNum", userInfo.getPhoneNum());
       int count = userInfoMapper.selectCountByExample(example);
       if (count > 0) {
           throw new ServiceException(ServiceExceptionEnum.USER_EXIST);
       }
       int rowId = userInfoMapper.insertSelective(userInfo);
       return userInfo.getUserId();
   }
}

AuthController

@RestController
@RequestMapping("/auth")
public class AuthController {

   @Autowired
   private AuthService authService;

   @PostMapping("/register")
   public CommonResult<Integer> register(@Valid UserInfo userInfo){
       Integer userId = authService.register(userInfo);
       return CommonResult.success(userInfo.getUserId(),"注册成功");
   }

   @PostMapping("/login")
   public CommonResult<UserInfo> login(@Valid UserInfo userInfo){
       userInfo = authService.login(userInfo);
       return CommonResult.success(userInfo,"登录");
   }
}


明天计划的事情:

1、整合 SpringSecurity 

2、使用 JWT 实现登录验证

遇到的问题:

收获:

学习了 SpringBoot 与 SpringMVC、Mybatis 的整合



返回列表 返回列表
评论

    分享到