暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【玩转Spring】Spring与JPA

程序员的日记本 2018-07-23
893


图片来自于百度图片

内容提前知

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<UserInteger>{

    @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后端、分布式系统感兴趣,扫描上方二维码,欢迎加入我们的知识星球。


文章转载自程序员的日记本,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论