Spring Data Jpa入门
原文链接:https://www.jianshu.com/p/d6e87963d39e。
最近做新项目,使用的是SpringBoot+jpa,发现这个组合应用起来十分简单和方便。SpringBoot极大简化了Spring的配置,而Spring Data Jpa也提供了最基本的增删改查功能,不需要写SQL就能实现。SpringData JPA是spring基于ORM框架、JPA规范的基础上封装的一套JPA应用框架,可以使开发者使用极简的代码实现对数据库的访问和操作。它提供了包括增删改查等在内的基本功能,且易于扩展。
springdata jpa、jpa和hibernate三者关系
通俗来讲springdata jpa是对jpa规范的一层封装,hibernate实现了jpa规范。
java代码----->springdata jpa ------>jpa规范------>hibernate------>jdbc ----->mysql数据库
我们使用java代码调用springdata jpa的api,springdata jpa封装了jpa规范,并且内部使用的是hibernate实现,hibernate封装了jdbc进行数据库操作。
配置
我们可以看到jpa底层就是hibernate的实现。


应用
实体类:
//@Entity注解表示该类是实体类,@Table对应的是数据表的名字
@Entity
@Table(name = "sie_user_t")
public class UserEntity implements Serializable {
private static final long serialVersionUID = 1L;
//自增长主键策略
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
//对应数据表字段名
@Column(name = "user_name", length = 20)
private String userName;
仓库类:
//该注释表示该类是仓库类
@Repository
public interface UserEntityRepository extends JpaRepository<UserEntity,Long> {
//使用jpa的findBy特性,不需要编写sql便能实现
UserEntity findByUserName(String userName);
//手动编写SQL,表名和字段名都使用java字段名
@Modifying
@Query("update UserEntity set userName = ?1 where id = ?2")
void updateUserName(String userName,Long id);
List<UserEntity> findByUserNameAndSex(String userName, String sex);
接口:
//路径
@PostMapping("/update/updateUserName/{userName}/{id}")
public String updateUserName(@PathVariable String userName,@PathVariable Long id) {
userEntityRepository.updateUserName(userName,id);
UserEntity user = userEntityRepository.findById(id).get();
return user.toString();
}
需要注意的是,使用@Query的时候,表名和字段名都是使用java映射的名称,当方法名不是约定规则的名称,需要使用@Query自定义SQL。
优缺点
优点是业务场景和查询语句比较简单的话,不需要写SQL十分方便,而且与数据库无关,不用考虑语法的问题。缺点是当有复杂的逻辑,需要写sql时,使用MyBatis更加灵活。
浙公网安备 33010602011771号