SpringBoot之SpringData JPA的基本使用

一、Spring Data JPA的基本使用

1、编写ORM实体类

 实体类与数据表进行映射,并且配置好映射关系。

1.1 创建实体类

举个例子


@Entity(name=" <mysql数据库里对应的表名> ")  //该注解表示当前实体类是与表有映射关系的实体类
public class discuss{

    @Id  //该注解表示配置该属性对应的字段为主键
    @GeneratedValue(strategy=GenerationType.IDENTITY) //表示当前主键生成策略为自增长
    private Integer id;

    @Column(name="content")
    private String content;

    @Column(name="Author")
    private String Author;

    @Column(name="aId")
    private Integer aId;
    
    
    .....//等等一些get/set方法啥的
}

1.2 编写Repository接口

针对不同的表数据操作编写各自对应的Repositor接口,并根据需要编写对应的数据操作方法。
public interface DiscussRepository extends JpaRepository<Discuss, Integer>
{
    //查询author非空的Discuss评论集合
    public List<Discuss> FindByAuthorNotNull();

    //根据文章id分页查询Discuss评论集合
    //通过“@Query”注解来执行这条SQL语句,"?"代表将第一个参数赋值给占位符“1”
    @Query("SELECT c FROM t_comment c WHERE c.aId = ?1") 
    public List<Discuss> getDiscussPaged(Integer aid, Pageable pageable);

    //使用元素SQL语句,根据文章id分页查询Discuss评论集合
    //nativeQuery = true表示写的是SQL语句
    @Query(value="SELECT * FROM t_comment WHERE n_Id = ?1", nativeQuery = true)
    public List<Discuss> getDiscussPaged(Integer aid, Pageable pageable);

    //根据评论id修改评论作者author
    @Transactional  //进行事务控制
    @Modifying  //如果对数据库做出了一些操作,就要添加这个注解
    @Query("UPDATE t_comment c SET c.author = ?1 WHERE c.id = ?2")
    public int updateDiscuss(String author,Integer id);

    //根据评论id删除评论
    @Transactional
    @Modifying
    @Query("DELETE FROM t_comment c WHERE c.id = ?1")
    public int deleteDiscuss(Integer id);
       
}

1.3 编写测试类

@Test
public void test1()
{
    Optional<Discuss> byId = discussRepository.findById(1);
    System.out.println(byId.get());
}
@Test
public void test2()
{
    List<Discuss> byAuthorNotNull = discussRepository.findByAuthorNotNull();
    for(Discuss discuss : byAuthorNotNull)
    {
        System.out.println(discuss);
    }
}
  
@Test
public void test3()
{
   int i = discussRepository.deleteDiscuss(4);
   System.out.println(i);
}

2、Repository部分简略继承关系

(1)顶层接口:Repository //没有包含任何方法
(2)次级接口:CrudRepository //继承了Repository,包含了增删改查方法
(3)下级接口:PagingAndSortingRepository //继承了CrudRepository, 包含了分页和排序方法
(4)下级接口:QueryByExampleExecutor //额外提供数据操作方法
(5)底层接口:JpaRepository //继承了PagingAndSortingRepository 和 QueryByExampleExecutor 。引用时,直接继承JpaRepository, 那么基本上相关方法都继承了

3、使用Spring Data JPA进行数据操作的多种实现方式

(1)如果自定义接口继承了JpaRepository接口,则默认包含了一些常用的CRUD方法。
(2)自定义Repository接口中,可以使用@Query注解配合SQL语句进行数据的查、改、删操作。
(3)自定义Repository接口中,可以直接使用方法名关键字进行查询操作。

4、自定义Repository接口中的@Transactional注解

(1) 在自定义的Repository接口中,针对数据的变更操作(修改、删除),无论是否使用了@Query注解,都必须在方法上方添加@Transactional注解进行事务管理,否则程序执行就会出现InvalidDataAccessApiUsageException异常。
(2)如果在调用Repository接口方法的业务层Service类上已经添加了@Transactional注解进行事务管理,那么Repository接口文件中就可以省略@Transactional注解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

熊凯瑞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值