个人理解:spring-boot作为spring的一个分支,主要用来提供面向微型服务的轻量框架。spring-boot把spring的一些通用的,默认的,繁琐的配置默认为已经配置,不用自己去进行重复的配置,但是可以增加,或者修改。
1、框架中有一个默认的配置文application.properties用来指定数据库等配置。
mybatis.config-locations=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis.type-aliases-package=com.qyer.entity
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
spring.datasource.username = root
spring.datasource.password = 123456
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
写入数据库的基本的配置,这里用了Hikari的数据库连接池,同时指定mybatis的一些配置,包括xml的位置和映射的model的位置。
2、关于mybatis
当时学习搭建的时候,网上有很多的方式,看着有些糊涂,后来看了一篇博客,总结起来就有两种配置方式。
一种就是我应用的方式,指定xml的方式编写sql语句,然后通过dao层引用。
package com.qyer.mapper;
import com.qyer.entity.UserEntity;
import java.util.List;
public interface UserMapper {
List<UserEntity> getAll();
UserEntity getOne(Long id);
void insert(UserEntity user);
void update(UserEntity user);
void delete(Long id);
}
这里面的mapper就是DAO层,这里写的比较简单,本应该实现一个更加基本的mapper接口,这里先不考虑。这里与spring-mvc不同的是这里没有任何托管的标签来告诉spring这里是托管的数据库接口层,而是在启动入口处指明。
另一种方式就是直接在数据库接口层用@select等标签直接编写sql语句,我没有采用这种方式。
3、service层与spring-mvc没有什么区别
@Service
public class UserService {
@SuppressWarnings("SpringJavaAutowiringInspection")
@Autowired
private UserMapper userMapper;
public List<UserEntity> getList(){
List<UserEntity> users=userMapper.getAll();
return users;
}
有一点是在注入数据库接口层的时候,userMapper处会标红,但是没有任何问题,也不会对运行造成影响,由于没有搞清楚是什么原因,就用了@SuppressWarnings(“SpringJavaAutowiringInspection”)这个标签,用来告诉系统这里的异常不用理会,他的作用域只是注入的片段。
4、controller层相对于mvc来说也没有多大差别
@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/getUsers")
public List<UserEntity> getUsers() {
return userService.getList();
}
这里的@RestController是@Controller与@@RequestBody的合体,代表这个controller的所有请求返回json形式的数据。由于目前前后端高度分离,没有引用jsp的返回形式,引入也比较简单。
5、程序入口
@SpringBootApplication
@MapperScan("com.qyer.mapper")
public class SpringBootDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBootDemoApplication.class, args);
}
}
spring-boot的启动方式很便捷,由于它自己内嵌了端口为8080的tomcat,只要我们启动这个main函数,一切就交给它去执行,@MapperScan(“com.qyer.mapper”)就是要指定的数据库接口层的位置。这样一个简单的spring-boot项目就搭建完成。
6、由于公司业务需要,简单的了解了一下预先加载数据的功能。
@Component
@Order(value = 1)
public class Loading implements CommandLineRunner {
@Override
public void run(String... args){
System.out.println("2222");
}
}
在一个类里面加入@Component标签,然后实现CommandLineRunner接口,实现它的run方法,就可以实现在程序启动前加载一些依赖的数据。
@Order(value = 1)是指明数据加载顺序的标签,数字越小,优先级越大。
7、pom依赖
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<!-- 版本号可以不用指定,Spring Boot会选用合适的版本 -->
</dependency>
</dependencies>
项目的结构图