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
仅允许有一个返回值,若数据库有两个相同的,则会报错