您的位置:首页 > 编程语言 > Java开发

SpringData Jpa(一):SpringBoot整合实现基本增删改查

2020-01-11 14:55 549 查看

SpringBoot整合

1.依赖

<!--导入jpa依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<!--MySQL驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>

2.配置文件

#Mysql数据源配置
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/(数据库名字)?useUnicode=true&characterEncoding=utf-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=admin

#JPA相关配置(默认的orm框架是hibernate)
#项目启动生成数据库
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true

3.创建实体类

  • 如果不存在该实体类的表 因为在配置文件开启了自动生成对应的表 所以就会自动该实体类的表
@Data
//告诉jpa这是一个实体类,需要把它跟数据库中的表做映射
@Entity
//使用注解建立实体类和数据表之间的对应关系
@Table(name = "article")//@Table建立了实体类和数据表的关系  name指向表名
public class Article {

@Id//标识这是主键字段
//指定主键生成策略,GenerationType.IDENTITY就是对应到mysql中的数据自增策略
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer aid;

//使用@Column映射类的属性和数据表的字段关系  name指定表中的字段名
//当类的属性名和数据表的字段名一致时,此注解可省略
@Column(name = "author")
private String author;

private Date createTime;

private String title;

}

4.创建dao层

/**
* 自定义接口需要继承
* 		JpaRepository<实体类的类型,实体类中的主键的类型>:基本的 增删改查、分页、排序操作
* 		JpaSpecificationExecutor<实体类的类型>:动态sql
*/
public interface ArticleDao extends JpaRepository<Article, Integer>, JpaSpecificationExecutor<Article> {

}

基本使用

  • 增删改查
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataJpaTest {

@Autowired
private ArticleDao articleDao;

/**
* 保存
*/
@Test
public void testSave() {
Article article = new Article();
article.setTitle("t_1");
article.setAuthor("a_1");
article.setCreateTime(new Date());

articleDao.save(article);
}

/**
* 删除
*/
@Test
public void testDelete() {
articleDao.deleteById(2);
}

/**
* 修改
*/
@Test
public void testUpdate() {
Article article = new Article();
article.setAuthor("a_1");
article.setAid(1);

//Spingdata Jpa的保存和修改使用的都是save方法
//关键来看传入的实体是否有主键
//---如果有主键,代表要修改
//---如果没有主键,代表要保存
articleDao.save(article);
}

/**
* 查询主键
*/
@Test
public void testFindByAid() {
Optional<Article> optional = articleDao.findById(1);
System.out.println(optional.get());
}

/**
* 查询所有
*/
@Test
public void testFindAll() {
List<Article> articles = articleDao.findAll();
for (Article article : articles) {
System.out.println(article);
}
}
}
  • 批量操作
@SpringBootTest
@RunWith(SpringRunner.class)
public class SpringDataJpaCUDTest {

@Autowired
private ArticleDao articleDao;

/**
* 保存
*/
@Test
public void testSave() {
Article article = new Article();
article.setTitle("t_1");
article.setAuthor("a_1");
article.setCreateTime(new Date());

//保存一个实体
articleDao.save(article);

//保存一个实体,并且立即刷新缓存
//articleDao.saveAndFlush(article);
}

/**
* 保存多个
*/
@Test
public void testSaveAll() {
Article article1 = new Article();
article1.setTitle("t_1");
article1.setAuthor("a_1");
article1.setCreateTime(new Date());

Article article2 = new Article();
article2.setTitle("t_2");
article2.setAuthor("t_2");
article2.setCreateTime(new Date());

Article article3 = new Article();
article3.setTitle("t_3");
article3.setAuthor("a_3");
article3.setCreateTime(new Date());

List list = new ArrayList();
list.add(article1);
list.add(article2);
list.add(article3);

//保存多个实体
articleDao.saveAll(list);
}

/**
* 删除
*/
@Test
public void testDeleteOne(){

//1  根据主键删除
//articleDao.deleteById(13);

//2 根据实体删除,但是这个实体必须要有主键
Article article = new Article();
article.setAid(13);

articleDao.delete(article);
}

/**
* 删除多个
*/
@Test
public void testDeleteAll(){
//1 删除所有  先查询--再一条条的删除
//articleDao.deleteAll();

//2 删除所有  一下子删除所有记录
//articleDao.deleteAllInBatch();

Article article1 = new Article();
article1.setAid(24);

Article article2 = new Article();
article2.setAid(22);

List list = new ArrayList();
list.add(article1);
list.add(article2);

//3 批量删除指定数据  一条语句搞定
//articleDao.deleteInBatch(list);

//4 先一条条的查,然后再一条条的删除
articleDao.deleteAll(list);
}
}
  • 注意 批量删除的时候注释的四个不同位置有不同效果
  • 点赞
  • 收藏
  • 分享
  • 文章举报
槑! 发布了91 篇原创文章 · 获赞 46 · 访问量 2万+ 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐