

图片来自于百度图片
内容提前知
1、了解什么是JPA
2、Spring中怎么使用JPA
JPA
JPA是Java Persistence API的简称,中文名Java持久层API,是JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。
JPA框架中支持大数据集、事务、并发等容器级事务,这使得 JPA 超越了简单持久化框架的局限,在企业应用发挥更大的作用。
JPA是一种ORM规范,而JPA需要provider的支持,因此我们实际使用的还是第三方厂家对JPA的支持。
Spring + JPA
通过JavaConfig配置Spring对JPA的支持
Spring提供了两种方式对JPA进行支持,一种为LocalEntityManagerFactoryBean,使用于应用程序管理器上下文;一种为LocalContainerEntityManagerFactoryBean,使用于容器管理器上下文。下面以LocalContainerEntityManagerFactoryBean为例进行说明。
加入Spring Data JPA支持
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>2.0.8.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.3.3.Final</version>
</dependency>
自定义JPAConfig文件
@Configuration
@EnableJpaRepositories(basePackages= {"spring.jpa.dao"})
public class JPAConfig {
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource , JpaVendorAdapter jpaVendorAdapter) {
LocalContainerEntityManagerFactoryBean l = new LocalContainerEntityManagerFactoryBean();
l.setDataSource(dataSource);
l.setJpaVendorAdapter(jpaVendorAdapter);
l.setPackagesToScan("spring.jpa.vo");
return l;
}
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
hibernateJpaVendorAdapter.setDatabase(Database.MYSQL);
hibernateJpaVendorAdapter.setShowSql(true);
hibernateJpaVendorAdapter.setDatabasePlatform("org.hibernate.dialect.MySQL5InnoDBDialect");
return hibernateJpaVendorAdapter;
}
}
在webconfig文件中要将此文件进行加载,由于使用的是hiberanteJpaVendorAdapter,因此我们需要讲表单数据映射为Java对象。
@Repository文件和@Entity
@Repository
public interface UserDao extends JpaRepository<User, Integer>{
@Query("from User where loginName=:loginName and loginPass=:loginPass")
User login(@Param("loginName") String loginName,@Param("loginPass") String loginPass);
}
@Entity
@Table(name="springjdbc_user")
public class User {
@GeneratedValue
@Id
private int id;
@Column(name="login_name")
private String loginName;
@Column(name="login_pass")
private String loginPass;
@Column(name="user_name")
private String userName;
@Column
private int sex;
set....
get....
}
1、上述中的SQL语句可以使用“?”来表示参数,不过个人更喜欢上述方式,因为更加明了,直接。
2、JpaRepository为我们提供了很多默认的方法,如findById此类方法,不过在使用此方式之前需要先配置了事务才可以使用。
////在RootConfig.java中配置hibernate事务
@Bean
public HibernateTransactionManager transactionManager(SessionFactory sessionFactory) {
return new HibernateTransactionManager(sessionFactory);
}
@Bean
public SessionFactory sessionFactory(DataSource dataSource) {
return new LocalSessionFactoryBuilder(dataSource).buildSessionFactory();
}
文中项目下载路径为:https://pan.baidu.com/s/1F2xezRZ6FVmuc1UHl_e0-w
下期预告
下期将主要分享Spring与Hiberante,希望大家不要错过哦!!!

如果你对Linux、Java后端、分布式系统感兴趣,扫描上方二维码,欢迎加入我们的知识星球。




