您当前的位置: 首页 >  spring

white camel

暂无认证

  • 1浏览

    0关注

    442博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Spring Data JPA——概述、Spring Data JPA的CRUD操作

white camel 发布时间:2020-05-11 09:19:27 ,浏览量:1

目录
  • 一、Spring Data JPA 概述
    • 1、Spring Data JPA 与 JPA和hibernate之间的关系
  • 二、Spring Data JPA入门
  • 三、Spring Data JPA 完成CRUD
一、Spring Data JPA 概述

说明: 在Spring Data系列, 它们的使用都是大同小异的, 比如 SpringDataReids、SpringDataElasticsearch、SpringDataMongoDB的API都是类似的 !!!

Spring Data JPA 是 Spring 基于 ORM 框架、JPA 规范的基础上封装的一套JPA应用框架,可使开发者用极简的代码即可实现对数据库的访问和操作。它提供了包括增删改查等在内的常用功能,且易于扩展!学习并使用 Spring Data JPA 可以极大提高开发效率!

Spring Data JPA 让我们解脱了DAO层的操作,基本上所有CRUD都可以依赖于它来实现,在实际的工作工程中,推荐使用Spring Data JPA + ORM(如:hibernate)完成操作,这样在切换不同的ORM框架时提供了极大的方便,同时也使数据库层操作更加简单,方便解耦!

1、Spring Data JPA 与 JPA和hibernate之间的关系

跳转到目录

  • JPA是一套规范,内部是有接口和抽象类组成的。Hibernate是一套成熟的全自动的ORM框架,而且Hibernate实现了JPA规范,所以也可以称Hibernate为JPA的一种实现方式,我们使用JPA的API编程,意味着站在更高的角度上看待问题(面向接口编程)
  • Spring Data JPA是Spring提供的一套对JPA操作更加高级的封装,是在JPA规范下的专门用来进行数据持久化的解决方案。

在这里插入图片描述

二、Spring Data JPA入门

跳转到目录

  • Spring Data JPA完成客户的基本CRUD操作
1、环境搭建

引入Spring Data JPA的坐标


    4.2.4.RELEASE
    5.0.7.Final
    1.6.6
    1.2.12
    0.9.1.2
    5.1.6



    
    
        junit
        junit
        4.9
        test
    
    
    
    
        org.aspectj
        aspectjweaver
        1.6.8
    

    
        org.springframework
        spring-aop
        ${spring.version}
    

    
        org.springframework
        spring-context
        ${spring.version}
    

    
        org.springframework
        spring-context-support
        ${spring.version}
    

    
        org.springframework
        spring-orm
        ${spring.version}
    

    
        org.springframework
        spring-beans
        ${spring.version}
    

    
        org.springframework
        spring-core
        ${spring.version}
    
    
    

    
    
        org.hibernate
        hibernate-core
        ${hibernate.version}
    
    
        org.hibernate
        hibernate-entitymanager
        ${hibernate.version}
    
    
        org.hibernate
        hibernate-validator
        5.2.1.Final
    
    

    
    
        c3p0
        c3p0
        ${c3p0.version}
    
    

    
    
        log4j
        log4j
        ${log4j.version}
    

    
        org.slf4j
        slf4j-api
        ${slf4j.version}
    

    
        org.slf4j
        slf4j-log4j12
        ${slf4j.version}
    
    

    
    
        mysql
        mysql-connector-java
        ${mysql.version}
    

    
        org.springframework.data
        spring-data-jpa
        1.9.0.RELEASE
    

    
        org.springframework
        spring-test
        4.2.4.RELEASE
    
    
    
      
        javax.el  
        javax.el-api  
        2.2.4  
      
      
      
        org.glassfish.web  
        javax.el  
        2.2.4  
     
    

3、Spring整合Spring Data JPA


	
    

    
    
        
        
        
        
        
            
        

        
        
            
                
                
                
                
                
                
                
                
            
        

        
        
            
        

    

    
    
        
        
        
        
    

    
    
    

    
    
        
    

    
    
		
			
			
			
			
			
			
			
		
	

    
    
    
	
	
		
		
	
	

4、使用JPA注解配置映射关系
@Entity
@Table(name = "cst_customer")
public class Customer {
    
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="cust_id")
    private Long custId;
    
    @Column(name="cust_address")
    private String custAddress;
    
    @Column(name="cust_industry")
    private String custIndustry;
    
    @Column(name="cust_level")
    private String custLevel;
    
    @Column(name="cust_name")
    private String custName;
    
    @Column(name="cust_phone")
    private String custPhone;
    
    @Column(name="cust_source")
    private String custSource;
    
	// 省略 getter/setter 方法
}
三、Spring Data JPA 完成CRUD

跳转到目录

1、编写符合Spring Data JPA规范的Dao层接口
  • Spring Data JPA是spring提供的一款对于数据访问层(Dao层)的框架,使用Spring Data JPA,只需要按照框架的规范提供dao接口,不需要实现类就可以完成数据库的增删改查、分页查询等方法的定义,极大的简化了我们的开发过程。
  • 在Spring Data JPA中,对于定义符合规范的Dao层接口,我们只需要遵循以下几点就可以了: 1.创建一个Dao层接口,并实现JpaRepositoryJpaSpecificationExecutor 2.提供相应的泛型
/**
 * Description: 客户dao
 *
 * @author zygui
 * @date 2020/5/5 13:45
 */

/**
 * 符合SpringDataJpa的dao层接口规范
 *      JpaRepository
 *          * 封装了基本CRUD操作
 *      JpaSpecificationExecutor
 *          * 封装了复杂查询(分页)
 */
public interface CustomerDao extends JpaRepository, JpaSpecificationExecutor 
{
}

这样我们就定义好了一个符合Spring Data JPA规范的Dao层接口

2、完成CRUD操作
/**
 * Description:
 *
 * @author zygui
 * @date 2020/5/5 13:50
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class CustomerDaoTest {

    @Autowired
    private CustomerDao customerDao;

    /**
     * 根据id来查询
     */
    @Test
    public void testFindOne() {
        Customer customer = customerDao.findOne(1L);
        System.out.println(customer);
    }

    /**
     * save : 保存或者更新
     *      根据传递的对象是否存在主键id,
     *      如果没有id主键属性:保存
     *      存在id主键属性,根据id查询数据,更新数据
     */
    @Test
    public void testSave() {
        Customer customer = new Customer();
        customer.setCustName("栗子");
        customer.setCustLevel("vip");
        customer.setCustIndustry("foot");
        customerDao.save(customer);
    }

    @Test
    public void testUpdate() {
        Customer customer = new Customer();
        customer.setCustId(4L);
        customer.setCustName("鸽子1");
        customer.setCustLevel("svip");
        customerDao.save(customer);
    }

    @Test
    public void testDelete() {
        customerDao.delete(3L);
    }

    @Test
    public void testFindAll() {
        List list = customerDao.findAll();
        for (Customer customer : list) {
            System.out.println(customer);
        }
    }

    // 查询客户数量
    @Test
    public void testCount() {
        long count = customerDao.count();
        System.out.println(count);
    }

    /**
     * 测试:判断id为4的客户是否存在
     *      1. 可以查询以下id为4的客户
     *          如果值为空,代表不存在,如果不为空,代表存在
     *      2. 判断数据库中id为4的客户的数量
     *          如果数量为0,代表不存在,如果大于0,代表存在
     */
    @Test
    public void testExists() {
        boolean exists = customerDao.exists(4L);
        System.out.println("id为4的客户 是否存在:"+exists);
    }

    /**
     * 根据id从数据库查询
     *      @Transactional : 保证getOne正常运行
     *
     *  findOne:
     *      em.find()           :立即加载
     *  getOne:
     *      em.getReference     :延迟加载
     *      * 返回的是一个客户的动态代理对象
     *      * 什么时候用,什么时候查询
     */
    @Test
    @Transactional
    public void testGetOne() {
        Customer customer = customerDao.getOne(4L);
        System.out.println(customer);
    }

}
关注
打赏
1661428283
查看更多评论
立即登录/注册

微信扫码登录

0.0407s