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更加灵活。

 
posted @ 2020-03-17 10:24  BBI丨BBI  阅读(115)  评论(0)    收藏  举报