SpringJpa学习教程-01之Hello,World

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进行验证了.

猜你喜欢

转载自blog.csdn.net/qq_32409957/article/details/86558282