今天快速搭建一个springboot基础应用,一起来学习吧。
0、基础环境
- jdk: 1.8
- ide: idea 2021
- maven: 3.8.1
- springboot:2.4.2
- mysql:8.x
1、创建新项目
利用idea创建基于maven的java项目,这个不用介绍了吧。输入groupId和项目名称完成即可。
2、引入springboot依赖
项目创建完成后,打开pom.xml,加入如下依赖。
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
3、创建启动类
在新建的包下,创建一个类,名字随便。我就用Application这个名字了。这是个固定写法,复制就行。
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4、创建application.yml配置文件
在resource文件夹下,创建application.yml文件,内容如下:
server:
port: 8080
error:
include-message: always
spring:
application:
name: springboot-test
ok!, 启动试试,是不是很简单。别着急,还没完。不过这个时候已经是可以运行的应用了,虽然它很简单,但任何复杂的项目不都是一步步构建起来的吗?咱们继续。
5、加入JPA支持
5.1、引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<!--数据库用mysql,因为springboot已经依赖了,就不用写version标签了-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
5.2、写实体类
首先创建包,当然随便写也行,但最好符合常规。代码如下:
@Entity
@Table(name = "t_user")
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", nullable = false)
private Integer id;
@Column(name = "name")
private String name;
@Column(name = "sex")
private Boolean sex;
}
5.3、写jpa操作的接口类
public interface UserRepository extends JpaRepository<User, Integer> {
}
不用多写,常用的crud方法已经定义在接口里了,有个性需求在这个接口里自定义。不多说了,关于详细的JPA的用法请查看相关文档。另外,每次说到这里,总有人跳出来和我争论,mybatis多好多好,为什么要用jpa,这里不做讨论,有兴趣的同学去搜索。
5.4、启动类上加注解
@SpringBootApplication
@EntityScan(basePackages = "org.example.jackie.sbt.entity")
@EnableJpaRepositories(basePackages = "org.example.jackie.sbt.repository")
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
仔细看,我加了两个注解,@EntityScan和@EnableJpaReposotories,里面的basePackages都指向了他们对应的包。你按自己的包修改。
5.5、修改配置文件
这里的配置文件,在上面的基础上,添加数据库的配置和jpa的配置。这里贴上所有的配置。
server:
port: 8080
error:
include-message: always
spring:
application:
name: springboot-test
datasource:
username: root
password: 123456
url: jdbc:mysql://127.0.0.1:3306/my_coupon?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
pool-name: StrasCouponHikari
connection-timeout: 5000
idle-timeout: 30000
maximum-pool-size: 10
minimum-idle: 5
max-lifetime: 60000
auto-commit: true
jpa:
show-sql: true
hibernate:
ddl-auto: none
properties:
hibernate.format_sql: true
hibernate.show_sql: true
open-in-view: false
完了,再启动试试,要是没保存,至少说明你没有错误。
6、单元测试
6.1、写jpa的测试类
@ExtendWith(SpringExtension.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@TestPropertySource("classpath:test.properties")
public class UserRepositoryTest {
@Test
public void testUserAdd() {
System.out.println("-----");
User user = new User();
user.setName("张三");
user.setSex(Boolean.FALSE);
user = userRepository.save(user);
Optional<User> user2 = userRepository.findById(user.getId());
assertThat(user2.get().getName().equals("张三"));
}
@Autowired
private UserRepository userRepository;
}
注意,测试类写到测试的文件夹中,并且和被测试类在同样的包中。
6.2、test.properties内容
pring.datasource.url=jdbc:mysql://localhost:3306/my_coupon?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true&zeroDateTimeBehavior=convertToNull&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
其实就是配置了mysql的连接参数。
6.3、添加测试依赖
<!--test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<scope>test</scope>
</dependency>
7、总结
以上从头到尾搭建了一个最简单的springboot应用,虽然很小,但是从连接数据库,到repository层的测试,内容也不少,希望大家有自己的收获。