Hibernate中使用Spring Data JPA


一、配置文件的方式

1、pom.xml中引入相關依賴

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
  
    <!-- Spring data jpa依賴 -->
    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jpa</artifactId>
        <version>1.11.4.RELEASE</version>
    </dependency>

    <!-- hibernate依賴 -->
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.1.7.Final</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-entitymanager</artifactId>
        <version>5.1.7.Final</version>
    </dependency>
    
    <!-- mysql依賴 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.42</version>
    </dependency>
    
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

2、JPA配置MATE-INF/persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
    <persistence-unit name="myjpa" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
        <class>com.wyl.bean.User</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:mysql://127.0.0.1:3306/test"/>
            <property name="javax.persistence.jdbc.user" value="root"/>
            <property name="javax.persistence.jdbc.password" value="root"/>
            
            <property name=" hibernate.show_sql" value="true"/>
            <property name="hibernate.hbm2ddl.auto" value="update"/>
        </properties>
    </persistence-unit>
</persistence>

3、創建實體對象User.class

package com.wyl.bean;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name="users")
public class User {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;
    
    @Column
    private String userName;
    
    @Column
    private String phone;
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
    @Override
    public String toString() {
        // TODO Auto-generated method stub
        return super.toString();
    }
}

4、創建測試類

package com.wyl; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; import org.junit.Test; import com.wyl.bean.User; public class JpaTest { private EntityManagerFactory factory = Persistence.createEntityManagerFactory("myjpa"); @Test public void testAdd(){ EntityManager em = factory.createEntityManager(); User user = new User(); user.setUserName("wang"); user.setPhone("123422222222"); em.getTransaction().begin(); //事務開啟 try { em.persist(user); //持久化數據 em.getTransaction().commit(); //事務提交 } catch (Exception e) { // TODO Auto-generated catch block  e.printStackTrace(); em.getTransaction().rollback(); //事務回滾 } finally { em.close(); //關閉em  } } @Test public void testFind(){ EntityManager em = factory.createEntityManager(); User user = em.find(User.class, 1); System.out.println(user.getUserName()); em.getTransaction().begin(); //事務開啟 try { em.merge(user); em.getTransaction().commit(); //事務提交 } catch (Exception e) { // TODO Auto-generated catch block  e.printStackTrace(); em.getTransaction().rollback(); //事務回滾 } finally { em.close(); //關閉em  } } @Test public void testDelete(){ EntityManager em = factory.createEntityManager(); User user = em.find(User.class, 1); //查詢到實體  em.getTransaction().begin(); //事務開啟 try { em.remove(user); //刪除實體 em.getTransaction().commit(); //事務提交 } catch (Exception e) { // TODO Auto-generated catch block  e.printStackTrace(); em.getTransaction().rollback(); //事務回滾 } finally { em.close(); //關閉em  } } }

二、配置類的方式

實現步驟:

  1、加入Spring data jpa的依賴
  2、加入數據庫驅動依賴
  3、加入jpa實現的依賴(hibernate)
   4、定義Entity
  5、在spring容器中,定義三個Bean( DataSource、EntityManagerFactory、PlatformTransactionManager)
  6、定義Repository
  7、操作

1、引入相關依賴

    <!-- spring-data-jpa依賴 -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.11.4.RELEASE</version>
        </dependency>

        <!-- mysql依賴 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.42</version>
        </dependency>

        <!-- hibernate依賴 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.1.7.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.1.7.Final</version>
        </dependency>

2、創建實體類

  同上面一樣

3、jpa配置類

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

/*
 * 配置類,相當於spring中的xml文件
 * */
@Configuration
public class JPAConfiguration {

    /*
     *配置數據源 
     */
    @Bean
    public DataSource createDataSource(){
        MysqlDataSource dataSource = new MysqlDataSource();
        dataSource.setURL("jdbc:mysql://127.0.0.1:3306/test");
        dataSource.setUser("root");
        dataSource.setPassword("root");
        return dataSource;
    }
    
    /*
     * 配置EntityManager
     */ 
    @Bean("entityManagerFactory")
    public EntityManagerFactory createEntityManager(DataSource dataSource){
        LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource); //配置數據源
        
        HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
        jpaVendorAdapter.setGenerateDdl(true);
        jpaVendorAdapter.setShowSql(true);
        
        em.setPackagesToScan("com.wyl.bean");//設置實體類的掃描路徑
        em.setJpaVendorAdapter(jpaVendorAdapter); //配置jpa的適配器
        em.afterPropertiesSet();
        return em.getObject();
    }
    
    /* * 定義一個事務  */
    @Bean("transactionManager")
    public PlatformTransactionManager createPlatformTransactionManager(EntityManagerFactory emf){
        JpaTransactionManager tm = new JpaTransactionManager();
        tm.setEntityManagerFactory(emf);
        return tm;
    }
}

4、創建數據庫操作接口

import org.springframework.data.repository.CrudRepository;

import com.wyl.bean.User;

public interface UserRepository extends CrudRepository<User, Integer> {
    
}

定義Repository的方法:

  方法一:繼承接口:Repository、CrudRepository、PagingAndSortingRepository、         JpaRepository

  方法二:使用@RepositoryDefinition注解

不生成Repository的實現類,使用@NoRepositoryBean注解。

 

5、測試

import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

import com.wyl.bean.User;
import com.wyl.jpa.UserRepository;

@ComponentScan
@EnableJpaRepositories
public class App 
{
    public static void main( String[] args )
    {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(App.class);
        UserRepository repository = context.getBean(UserRepository.class);
        
     User user
= new User(); user.setPhone("10086"); user.setUserName("shaya");
     repository.save(user);

     context.close();
} }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM