SpringJpa学习教程-01之Hello,World
什么是SpringJpa
SpringJpa全称Spring Java Persistence API,中文名叫做Java持久层API.
是一种基于JDK 5.0的注解或者XML来实现对象-关系的一种实现.
厂商通过实现此接口,可以实现运行期间的对象直接保存到数据库.
常见的ORM框架
MyBatis
国内使用占比率最高,国外来说相对低一点.
MyBatis着力解决的是POJO到SQL之间的映射,同时可以使用XML进行很方便的定制需要的SQL,上手简单,所以受到很多开发者的喜爱.
Hibernate
Hibernate是一个上手较难的框架,程序员可以使用对象与对象之间的关系来操纵数据库,而且对象都有着各自的生命周期.
同时Hibernate有自己HQL(Hibernate Query Language)查询语言,比较适合于企业级的项目开发.
SpringJPA
底层使用了Hibernate进行封装,引用JPQL(Java Persistence Query Language)查询语言.
随着Spring产品系列在市场上的流行,Spring Data JPA也被大家所接受,它相比于Hibernate,使用更方便,让开发者不需要关心和配置更多的东西.
JPA上手简单,开发效率高,对对象的支持比较好,又有很大的灵活性,因此市场对它的认可度越来越高.
上手案例
环境搭建
本文环境均使用SpringBoot进行开发.
Maven
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
其他配置
spring.datasource.url=jdbc:mysql://localhost:3306/java?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=xxx
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
POJO对象
@Data
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "user")
@Entity
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private long id;
@Column(name = "name", nullable = false, length = 20)
private String name;
@Column(name = "email", nullable = false, length = 50)
private String email;
}
解释:
@table
:表明存在数据库中的一张表与对象进行对应,如果不写,默认为对象名的小写
@Entity
:表明这是一个实体对象
@Id
:表明数据库中的主键
@GeneratedValue
:生成一个唯一的id
@Column
:可不写,默认为驼峰法转数据库表名的方式.如myName
字段可对应数据库中表字段my_name
新建数据库操控对象
public interface UserRepository extends CrudRepository<User, Long> {
}
解释:
CrudRepository
:这是JPA默认提供的一个支持增删改查的接口,通过继承该接口,便可简单的实现对数据的增删改查,以下是它的源码
<S extends T> S save(S entity);
<S extends T> Iterable<S> saveAll(Iterable<S> entities);
Optional<T> findById(ID id);
boolean existsById(ID id);
Iterable<T> findAll();
Iterable<T> findAllById(Iterable<ID> ids);
long count();
void deleteById(ID id);
void delete(T entity);
void deleteAll(Iterable<? extends T> entities);
void deleteAll();
User
:表示需要和数据库进行连接的对象
Long
:主键名,当需要根据主键查询时,便可知道主键的类型,从而根据主键类型正确查出值
新建控制器对象
@Controller
@RequestMapping(path = "/user")
public class UserController {
private final UserRepository userRepository;
@Autowired
public UserController(UserRepository userRepository) {this.userRepository = userRepository;}
@GetMapping(path = "/add")
@ResponseBody
public User addNewUser(@RequestParam String name, @RequestParam String email) {
User user = new User();
user.setName(name);
user.setEmail(email);
userRepository.save(user);
return user;
}
@GetMapping(path = "/all")
@ResponseBody
public Iterable<User> getAllUsers() {
return userRepository.findAll();
}
}
这时候便可以启动SpringBoot进行验证了.