一、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注解。