Spring Boot整合JPA
使用Spring Boot整合JPA
- 编写ORM实体类:实体类与数据表进行映射,并且配置好映射关系。
首先先创建一个实体类,命名为Discuss
package com.itheima.chapter03.domain;
public class Discuss {
}
在编写属性之前,这个实体类要对应的表有多少个字段,如下图可知有四个字段。
所以对应的,在这个实体类中,也应该有四个字段。
package com.itheima.chapter03.domain;
public class Discuss {
private Integer id;
private String content;
private String author;
private Integer aId;
//省略get/set/tostring
}
添加注解,建立实体类与表的映射关系
@Entity(name = "t_comment") //该注解表示当前实体类是与表有映射关系的实体类
@Id //该注解表示配置该属性对应的字段为主键
@GeneratedValue(strategy = GenerationType.IDENTITY) //表示当前主键生成策略为自增长
@Column(name = "") //配置当前属性与字段的映射关系
完整代码如下:
import javax.persistence.*;
@Entity(name = "t_comment") //该注解表示当前实体类是与表有映射关系的实体类
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/tostring
}
- 编写Repository接口:针对不同的表数据操作编写各自对应的Repository接口,并根据需要编写对应的数据操作方法。
在项目包下创建一个respoitory包,在该包下创建一个DiscussRepository接口,编写如下代码:
public interface DiscussRepository extends JpaRepository<Discuss,Integer> {
//1.查询author非空的Discuss评论集合
public List<Discuss> findByAuthorNotNull();
//2.根据文章id分页查询Discuss评论集合
@Query("SELECT c from t_comment c where aId = ?1")
public List<Discuss> getDiscussPaged(Integer aId, Pageable pageable);
//3.使用元素SQL语句,根据文章id分页查询Discuss评论集合
@Query(value = "SELECT * from t_comment where a_Id =?1",nativeQuery = true)
public List<Discuss> getDiscussPaged2(Integer aid,Pageable pageable);
//4.根据评论id修改评论作者author
@Transactional
@Modifying
@Query("UPDATE t_comment c set c.author = ?1 where id=?2")
public int updateDiscuss(String author,Integer id);
//5.根据评论id删除评论
@Transactional
@Modifying
@Query("delete from t_comment where id=?1")
public int deleteDiscuss(Integer id);
}
在项目测试包下新建一个测试方法JpaTests,编写如下代码:
@SpringBootTest
public class JpaTests {
@Autowired
private DiscussRepository discussRepository;
@Test
public void test1(){
Optional<Discuss> byId = discussRepository.findById(1);
System.out.println(byId.get());
}
}
运行得到输出结果: