之前一直使用 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 开发的思想还是一致。接下来在业务代码中继续学习了!