1、jpa(Java Persistence API)是一个Java 持久化 规范,所以它不是具体的实现
2、jpa典型的实现是hibernate。利用jpa写的代码,如果需要更换底层实现比如换掉hibernate,原则上不用改动代码,这就是规范的好处。
实现步骤:
1、新建maven项目
2、pom.xml引入依赖
<!-- jpa规范 -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
<!-- jpa的hibernate实现,当前版本已经被移动到hibernate-core,这里是个空包 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
</dependency>
3、配置好web.xml和springmvc.xml
4、在applicationContext.xml中配置:
<!-- 1、生成jpa-bean工厂 -->
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<!-- 数据源 -->
<property name="dataSource" ref="dataSource" />
<!-- jpa适配器,这里使用hibernate的实现 -->
<property name="jpaVendorAdapter">
<bean
class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<!-- 支持的数据库类型 -->
<property name="Database" value="MYSQL" />
<!-- 正向工程 -->
<!-- <property name="generateDdl" value="false" /> -->
<!-- 控制台输出sql -->
<property name="showSql" value="true" />
</bean>
</property>
<!-- 实体类的包路径扫描 -->
<property name="packagesToScan">
<list>
<value>com.lwr.entity</value>
</list>
</property>
</bean>
<!-- 2、jpa的dao类的扫描路径,扫描自动生成bean交由spring管理 -->
<jpa:repositories base-package="com.lwr.dao"
entity-manager-factory-ref="entityManagerFactory"
transaction-manager-ref="transactionManager"/>
<!-- 3、配置jpa的事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory"
ref="entityManagerFactory"></property>
</bean>
根据以上配置,一个是扫描实体类,一个是扫描dao类,而实体类通过@Entity注解配置后不用在写映射xml文件,而dao类继承某个接口后自动被jpa识别
5、写一个实体类User :
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="user1")
public class User {
@Id
String id;
@Column
String name;
}
6、写一个jpa的dao类UserDao:
import org.springframework.data.repository.Repository;
import com.lwr.entity.User;
public interface UserDao extends Repository<User, String> {
//根据jpa-api规范,get[]By[字段名]
public User getUserById(String id);
}
7、注入这个dao查询