发表于: 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 的整合
评论