1.环境准备
在你的application.properties进行如下设置
其中datasource.sul,username和password写自己的数据库配置
spring.datasource.url=jdbc:mysql://localhost:3306/db_example?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
spring.jpa.show-sql=true
你可以发现,url设置中多了下面这句
?useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
此句的用途是可以对timezone进行设置,也可以直接在数据库中直接设置timezone为UTC
2.创建Entity
我们新建一个class文件User,并写上以下代码
@Table(name = "user")
@Data
@Entity
public class UserEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Integer id;
@Column
private String name;
@Column(name = "email")
private String email;
}
@Entity:实体类,当有此注解是,表示类与数据库的某个表、视图对应。@Table:name属性对应此表在数据库中的名字。若没有@Table,则默认与类名相关,即我们此处的类名为User,它将默认@Table为user(不推荐这样使用)@Data:Lombok注解,将会帮助你自动生成getter、setter、equal等,且不会作为代码填充到class文件内,使得更加美观@Id:用于标注主键@GeneratedValue(strategy = GenerationType.IDENTITY):标注主键的生成策略,多为此配置,若需要可自行查阅相关文档@column:此为标记列,上述代码中,可发现,有的@Column标志并没有写name,这是因为,若没有使用name进行标志,则会自动使用变量名,会对变量名自动进行小驼峰处理,如你的变量名为Email,它对应数据库的表名则会变为email
3.创建Dao层接口
Entity属于Dao层,我们有了表之后,自然需要去操作他,此时我们新建一个接口文件UserRepository,继承JpaRepository(或CrudRepository)和JpaSpecificationExecutor
代码如下
public interface UserEntityRepository extends CrudRepository<UserEntity,Integer>, JpaSpecificationExecutor<UserEntity> {
}
JpaRepository、CrudRepository:可在代码中看出,需要填写两个泛型参数,前者为你想操作的类(需要@Entity进行标注),后者为主键的类型。此处由于我们想操作User类,且他的主键为Integer类型,所以此处填写User,Integer
JpaSpecificationExecutor:此为高级的查询功能,要填写想操作的类(需要@Entity进行标注)
最终目录如下所示:

4.在单元测试中,实现简单的增删改查
4.1 增、改
进入我们SpringBoot 自动生成的Test文件

在其中写入以下代码:
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
class DemoApplicationTests {
@Autowired
UserRepository userRepository;
@Test
public void testAddUserEntity() {
UserEntity userEntity = new UserEntity();
userEntity.setName("加入的名称");
userEntity.setEmail("这个是email@qq.com");
userEntityRepository.save(userEntity);
}
}
@SpringBootTest:顾名思义,用于注解SpringBoot的Test@@RunWith(SpringJUnit4ClassRunner.class):选择测试工具版本,此处选择JUnit4@Autowired:会从Spring容器中查到对应的名字,之前的@Entity等注解均为将对应的类添加到Spring容器中。userRepository之所以可以没有注解就加入Spring容器中是因为他继承了接口。
userRepository.save(user)是在我们继承的接口中已经实现的,此处的user若设置与数据库对应的主键,则为更新,不设置主键,即为新增。
此时我们右键testAddUser,选择 run,即可运行

此时查看数据库,可发现已经成功添加

4.2 查、删
@Test
public void testFindUserEntity() {
UserEntity userEntity = userEntityRepository.findById(9).get();
// userEntityRepository.deleteById(9);//此为删除代码
System.out.println(userEntity);
}
findById、deleteById:这个是jpa的命名规范,在Spring Boot学习笔记(三)中将会具体介绍。findById(9).get():因为此时是一个Optional对象,想要转换为UserEntity,则需要使用get()
这样增删就完成了,需要注意的是findBy仅允许有一个返回值,若数据库有两个相同的,则会报错

本文介绍了如何在Spring Boot应用中使用Spring Data JPA进行增删改查操作。首先,配置了数据库连接,然后创建了Entity类并用Lombok简化代码。接着,定义了Dao层接口,继承了JpaRepository以实现基本操作。最后,通过单元测试展示了如何添加、修改、查询和删除数据。测试中,新增数据并检查数据库确认操作成功。
810

被折叠的 条评论
为什么被折叠?



