Spring Data JPA入门(一)

学习大纲:

回顾JPA和Spring对JPA的支持

在学习Spring Data JPA之前,我们先来回顾一下JPA的基本使用

  1. 首先在项目Resources中创建文件夹META-INF,编写persistence.xml配置文件
    其中主要配置需要持久化的类/JPA实现的提供方/hibernate相关的属性配置

    
    
     
     
         
         
     
             
             
             
             
             
             
         
             
             
             
         
     
    
    
    
  2. 编写实体类:Person

    @Entity
    @Getter@Setter@ToString
    public class Person {
    
     @Id
     //使用默认的主键自增长策略
     @GeneratedValue
     private Long id;
     private String name;
     private Integer age;
    }
    
    
  3. 编写DAO接口和实现类
    这里我们仅仅使用一个保存操作来测试JPA的基本使用

    public interface IPersonDao {
     void save(Person person);
    }
    
    
    public class PersonDaoImpl implements IPersonDao {
    
     @PersistenceContext
     private EntityManager em;
     public void save(Person person) {
         EntityManager manager = Persistence.createEntityManagerFactory("myPersistence").createEntityManager();
         manager.getTransaction().begin();
         manager.persist(person);
         manager.getTransaction().commit();
         manager.close();
     }
    }
    
    
  4. 编写Service接口和实现类

    public interface IPersonService {
     void save(Person person);
    }
    
    
    public class PersonServiceImpl implements IPersonService {
    
     private IPersonDao dao= new PersonDaoImpl();
    
     public void save(Person person) {
         dao.save(person);
     }
    }
    
    
  5. 编写测试类,对Service中得所有方法进行测试

    public class PersonServiceImplTest {
     private IPersonService service= new PersonServiceImpl();
     @Test
     public void testSave(){
         Person person = new Person();
         person.setName("Neld");
         person.setAge(10);
         service.save(person);
     }
    }
    
    
    测试执行结果:

    Hibernate: drop table if exists Person
    Hibernate: create table Person (id bigint not null auto_increment, age integer, name varchar(255), primary key (id))
    Hibernate: insert into Person (age, name) values (?, ?)

以上是使用JPA实现基本的CRUD的流程,在完成一些基本配置(persistence.xml文件中的配置)之后,只需要在dao的实现类中,获取到EntityManager,然后执行对应的CRUD即可,SQL是有JPA的实现者Hibernate自动生成

问题:这里存在一个问题,就是dao实现类中实现CRUD还是存在较多的相同代码,每个CRUD方法中都需要执行相同的业务模块

EntityManager manager = Persistence.createEntityManagerFactory("myPersistence").createEntityManager();
manager.getTransaction().begin();

manager.getTransaction().commit();
manager.close();

既然存在这样的相同代码,我们就有理由使用更好的方式来解决这些代码
解决方案是使用Spring对JPA进行整合

Spring对JPA进行整合

接下来我们要做的是,将Service/DAO/EntityManager的生命周期都交给Spring来管理,实现起来很简单,只需要在applicationContext.xml文件中做如下配置即可:




    
    
    
    
    
    
    
    
        
        
        
        
    
    
    
        
        
        

        
        
            
                cn.wolfcode
            
        
        
        
            
                
                
            
        
        
        
            
                
                
                
            
        
    
    
    

    
    
        
    
    
        
            
            
        
    
    
        
        
    


整合之后,DAO中的代码实现:

@Repository
public class PersonDaoImpl implements IPersonDao {

    @PersistenceContext
    private EntityManager em;

    public void save(Person person) {
        em.persist(person);
    }
}

这里,我们使用PersistenceContext注解,让Spring自动从容器中根据EntityManagerFactory获取到EntityManager对象,并且我们也将事务管理交给了Spring来统一管理,

所以,现在需要我们程序员做的就是调用对应的CRUD方法完成数据的增删改查

以上是对在Spring环境中使用JPA的回顾,使用这种方式实现持久层的CRUD可以说已经相当简单了,作为Java工程师,我们可以不用手动编写复杂的SQL,就能很便捷快速的的完成数据的增删改查

但是,在Spring Data项目小组的大神眼里,这还不够,还是存在一点点瑕疵!

什么?我们现在在dao的实现方法中可是只需要编写一行代码就能完成对应的功能了,哪来的瑕疵?难道能简单到不写代码?

嗯,是的,这就是Spring Data JPA要实现的宏伟目标,只写dao接口,不写dao实现即可完成数据的CRUD

来吧,我们这就来感受一下Spring Data JPA的魅力!


Spring Data JPA入门(一)_第1张图片
底标 (2).jpg

你可能感兴趣的:(Spring Data JPA入门(一))