这是我参与11月更文挑战的第6天,活动详情查看:2021最后一次更文挑战
SpringData的介绍
Spring Data 是为了简化构建基于Spring框架应用的数据访问技术,包括对关系数据库、非关系数据库、Map-Reduce框架、云数据服务等访问支持。它为我们提供使用统一的API标准来对数据访问层进行操作,这套标准包含了CRUD(创建、获取、更新、删除)、查询、排序和分页的相关操作。
特点
- 支持对象关系映射
具备ORM框架的对象关系映射功能
- 统一的Repository接口
Repository<T,ID extends Serializable>: 统一接口
CrudRepository<T,ID extends Serializable>: 基本CRUD操作
PagingAndSortingRepository<T,ID extends Serializable>: 基本CRUD及分页
- 统一的数据访问模板类xxxtemplate
如MongoTemplate、RedisTemplate等
JPA的介绍
- JPA(Java Persistence API) 是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据。它的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate、Toplink、JDO等ORM框架各自为营的局面。
- 值得注意的是,JPA是在充分吸收了现有的Hibernate、Toplink、JDO等ORM框架的基础上发展而来的,具有易于使用、伸缩性强等优点。
- JPA是一套规范,不是一套产品,那么像Hibernate、Toplink、JDO它们是一套产品,如果说这些产品实现了这个JPA规范,那么我们就可以称他们为JPA的实现产品
SpringData和JPA的关系
SpringData 和JPA的快速入门
pom
<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>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
</dependencies>
application.properties
#mysql数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/nicole?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=true
spring.datasource.username=nicole
spring.datasource.password=Nicole
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
##自动生成开启,让表数据都会自动跟随entity的变化而变化
spring.jpa.properties.hibernate.hbm2ddl.auto=update
#方言选择mysql
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
#开启sql打印
spring.jpa.show-sql=true
#开启sql格式化
spring.jpa.properties.hibernat.format_sql=true
entity
@Data
@Entity
@Table(name = "t_user")
public class TUser {
@Id //证明该字段是主键
@GeneratedValue(strategy= GenerationType.IDENTITY) //自增
//@GenericGenerator(name="myuuid",strategy="uuid")
//使用uuid策略这个时候主键的类型不能用Integer了
private Integer id ;
@Column(name = "t_username",nullable = false ,unique = true,length=20)
private String username;
@Column
private String password;
}
repository
public interface UserRepository extends JpaRepository<TUser, Integer> {
TUser findTuserByUsernameLike(String username);
}
controller
@RestController
public class UserConntroller {
@Resource
private UserRepository userRepository ;
@GetMapping("/user/id/{id}")
public Object findById(@PathVariable Integer id){
return userRepository.findById(id);
}
@GetMapping("/user")
public TUser saveUser(TUser user){
return userRepository.save(user);
}
@GetMapping("/user/username/{username}")
public TUser findByUsername(@PathVariable String username){
return userRepository.findTuserByUsernameLike("%"+username+"%");
}
}
实现效果,在mysql数据库中自动创建了 t_user 表,主键自增,查询和新增成功。