Spring Boot学习笔记(二)Spring Data Jpa 快速上手(一)使用spring data jpa 实现增删改查,Spring boot进行单元测试

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,它将默认@Tableuser(不推荐这样使用)
  • @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类型,所以此处填写UserInteger
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 protected]");

		userEntityRepository.save(userEntity);
	}
}
  • @SpringBootTest:顾名思义,用于注解SpringBoot的Test
  • @@RunWith(SpringJUnit4ClassRunner.class):选择测试工具版本,此处选择JUnit4
  • @Autowired:会从Spring容器中查到对应的名字,之前的@Entity等注解均为将对应的类添加到Spring容器中。userRepository之所以可以没有注解就加入Spring容器中是因为他继承了接口。

userRepository.save(user)是在我们继承的接口中已经实现的,此处的user若设置与数据库对应的主键,则为更新,不设置主键,即为新增。

此时我们右键testAddUser,选择 run,即可运行
Spring Boot学习笔记(二)Spring Data Jpa 快速上手(一)使用spring data jpa 实现增删改查,Spring boot进行单元测试_第1张图片
此时查看数据库,可发现已经成功添加
Spring Boot学习笔记(二)Spring Data Jpa 快速上手(一)使用spring data jpa 实现增删改查,Spring boot进行单元测试_第2张图片

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,spring,boot,spring,增删改查,单元测试,spring,boot,入门,jpa)