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

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);
    }
}
  • 注意
    • 批量删除的时候注释的四个不同位置有不同效果
发布了109 篇原创文章 · 获赞 47 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43934607/article/details/103248027