之前一直使用 Python ,学习 Java 基本语法后也一直没能实践,正好部门的测试平台是使用的 Spring Boot 框架开发,借此机会学习一下,未来也能体会一下与 Python 的差异。
首先明确我们在本次体验 Spring Boot 中想要实现的功能:
之所以是这两者,是因为我们在 Web 开发中最遇到的操作就是它们。
而能够实现写入数据库后,其他查、改、删的操作都是类似的。
工具 | 版本 |
---|---|
IDEA | 2019.2 |
JDK | 11 |
MySQL | 5.7 |
此处只是个人环境,非推荐环境,环境不一致没太大问题
专业版自带插件,无需安装。
社区版需要在 IDEA 插件中心中搜索 "Spring Assistant" 安装。
com.example.demo
),我选择 Maven 作为构建工具 以上即创建成功一个新项目。
因为使用的 Spring Initializr
创建项目, pom.xml
中的依赖坐标都已经配置好,无需修改。
修改 src/main/resouces/application.properties
文件,添加下面内容:
# 数据库配置 # 数据库连接地址,jpa库需要提前创建好 spring.datasource.url=jdbc:mysql://localhost:3306/jpa?useSSL=false # 数据库账号 spring.datasource.username=root # 数据库密码 spring.datasource.password=123456 # 数据库驱动 spring.datasource.driver-class-name=com.mysql.jdbc.Driver # JPA 配置 # 自动处理对象关系映射,允许自动建表等操作 spring.jpa.hibernate.ddl-auto=update # 是否在控制台显示数据库语句 spring.jpa.show-sql=true 复制代码
关于 spring.jpa.hibernate.ddl-auto
的配置,有如下几个选项:
实体类是对一个实体对象的代码描述。
在实体类中建立与数据库表和字段的关系映射(ORM),使得通过操作实体类就完成对数据库的增删改查操作。
以创建一个 "Book" 实体类为例,假设我们期望操作的表名为 "t_book":
// 标记此类为实体类 @Entity // 设置操作的数据库表 @Table(name="t_book") public class Book{ // 设置主键 @Id // 字段值的生成策略,暂不展开说明,可以私下查一下 @GeneratedValue(strategy = GenerationType.AUTO) private Integer id; // 配置字段属性,可以不需要 @Column(length = 32) private String name; // 添加字段的 getter/setter 方法 public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Book{" + "id=" + id + ", name='" + name + '/'' + '}'; } } 复制代码
代码有些长,可以使用 Lombok
进行简化。
Lombok 是一个 Java 实用工具,可以通过注解来帮助开发人员消除冗长的 Java 代码,应用在我们的实体类上的效果如下:
@Entity @Table(name="t_book") @Data public class Book{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String name; } 复制代码
可以看到,在使用 lombok
的 Data
注解后,我们的代码简化了很多,不需要再编写字段的 Getter/Setter
和 toString
方法,并且不需要为字段注明数据库Column,只需要保留主键的 @Id
注解即可。
实体类 Book
只是建立了对象关系映射,还需要创建一个 DAO 类简化持久化过程( save
/ delete
等)。
import org.springframework.data.jpa.repository.JpaRepository; public interface BookDao extends JpaRepository<Book, Integer> { } 复制代码
方法在 JpaRepository
中已经实现,不需要额外编写。
创建一个测试用例,用来测试数据的写入:
@RunWith(SpringRunner.class) @SpringBootTest public class BookTests { @Autowired public BookDao bookDao; @Test public void testBook() { Book book = new Book(); book.setName("book1"); bookDao.save(book); } } 复制代码
测试用例通过,查询数据库的 t_book
表可以看到已经插入一条数据。
还是从最简单的开始实现,先写一个接收 GET
请求的接口,返回 "Hello, Spring Boog!" 响应内容:
@RestController @RequestMapping("/") public class HelloController { @RequestMapping("/hello") public String index(){ return "Hello, Spring Boot!"; } } 复制代码
右键运行项目的 DemoApplication
,启动后,访问 0.0.0.0:8080/hello
看到浏览器输出 "Hello, Spring Boot!" ,一个最简单的接口就创建成功了。
之前对 Java 的印象是繁琐,声明多、配置多。但是在体验了 Spring Boot 后,特别是使用了一些初始化插件进行创建项目后可以发现,其实最基础的代码框架 Spring Boot 已经为我们生成好,不过是需要理解一些框架或者库的用法,大体 Web 开发的思想还是一致。接下来在业务代码中继续学习了!