疯狂java


您现在的位置: 疯狂软件 >> 新闻资讯 >> 正文

基于Spring Data JPA的HelloWorld


 

基于Spring Data JPA的HelloWorld
 
基于Spring Data JPA的HelloWorld
这里讲的,并不是结合Spring Boot来实现的项目,而是经典的Spring应用集成Spring Boot来进行数据库操作的入门示例。
Spring Data虽然支持很多的持久层技术,但是这里只考虑JPA的集成、整合、应用。
使用的时候,我们分两部分来做:一是先完成基础初始化配置;二是针对某个实体对象进行操作。
基础初始化配置
配置Spring和JPA的集成。此时不再需要Spring和Hibernate的整合。
以下第二步之后的配置,都是放在Spring标准的配置文件里面进行配置,通常建议放到applicationContext-jpa.xml文件里面,表示专门配置JPA的。
1.依赖关系
在pom.xml文件中,增加下面的依赖(如果不使用Maven,则看第一步的最后):
<!-- Hibernate -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-core</artifactId>
    <version>5.2.9.Final</version>
</dependency>
<!-- 可以自动生成DAO的实现,不需要自己写实现! -->
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
    <version>2.0.2.RELEASE</version>
</dependency>
<!-- MySQL驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.44</version>
</dependency>
 
 
如果没有使用Maven,则自行复制一下jar文件到项目中:
hibernate-core-5.2.9.Final.jar
jboss-logging-3.3.0.Final.jar
hibernate-jpa-2.1-api-1.0.0.Final.jar
javassist-3.20.0-GA.jar
antlr-2.7.7.jar
jboss-transaction-api_1.2_spec-1.0.1.Final.jar
jandex-2.0.3.Final.jar
classmate-1.3.0.jar
dom4j-1.6.1.jar
hibernate-commons-annotations-5.0.1.Final.jar
spring-data-jpa-2.0.2.RELEASE.jar
spring-data-commons-2.0.2.RELEASE.jar
spring-orm-5.0.2.RELEASE.jar
spring-jdbc-5.0.2.RELEASE.jar
spring-context-5.0.2.RELEASE.jar
spring-expression-5.0.2.RELEASE.jar
spring-aop-5.0.2.RELEASE.jar
spring-tx-5.0.2.RELEASE.jar
spring-beans-5.0.2.RELEASE.jar
spring-core-5.0.2.RELEASE.jar
spring-jcl-5.0.2.RELEASE.jar
aspectjrt-1.8.12.jar
slf4j-api-1.7.25.jar
 
2.DataSource
这里是随便找一个连接池来实现DataSource的配置了。
<bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="url"
                value="jdbc:mysql://127.0.0.1:3306/j1706_cloud?useSSL=false" />
        <property name="username" value="root" />
        <property name="password" value="1234" />
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
</bean>
 
 
3.JPA集成配置
 
<!-- 实体管理器工厂配置 -->
<!-- entityManagerFactory就是Hibernate里面的SessionFactory -->
<bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="packagesToScan">
                <!-- 指定扫描的domain包,每个domain包用一个value元素 -->
                <array>
                        <value>org.fkjava</value>
                </array>
        </property>
        <property name="jpaVendorAdapter">
                <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                        <!-- 指定数据库方言 -->
                        <property name="database" value="MYSQL" />
                        <!-- 是否自动生成表结构 -->
                        <property name="generateDdl" value="true" />
                        <!-- 是否显示SQL语句,这里不需要显示,在log4j2.xml里面配置日志更好,能够看到参数 -->
                        <property name="showSql" value="false" />
                </bean>
        </property>
        <property name="jpaProperties">
                <props>
                        <prop key="hibernate.dialect">
                                org.hibernate.dialect.MySQL55Dialect
                        </prop>
                </props>
        </property>
</bean>
 
 
4.TransactionManager
<!-- 激活注解驱动事务 -->
<tx:annotation-driven />
<!-- 事务管理器 -->
<bean id="transactionManager" 
        class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
 
 
实现数据保存
1.增加一个实体对象,并完成注解配置
 
@Entity
public class FileInfo {
 
        @Id
        @GeneratedValue(generator = "uuid2")
        @GenericGenerator(name = "uuid2", strategy = "uuid2")
        @Column(length = 36)
        private String id;
        // 文件名
        private String name;
        // 文件大小
        private long length;
        // 文件的内容类型
        private String contentType;
        // 实际存储路径
        private String path;
 
    // 省略getter/setter方法
}
 
 
2.增加一个对应的DAO
@Repository
public interface FileInfoDao 
        extends JpaRepository<FileInfo, String> {
 
}
 
 
 
3.使用<jpa:repositories>元素在XML里面扫描DAO接口
a) 命名空间
 
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:jpa="http://www.springframework.org/schema/data/jpa"
        xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
                http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/data/jpa
        http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
 
</beans>
 
 
b) 在beans元素里面增加扫描
<jpa:repositories base-package="org.fkjava.mycloud.store.dao"/>
复制代码
 
 
4.创建实体对象的实例,保存对象
@Resource
private FileInfoDao fileInfoDao;
 
public void test(String name, String contentType, long length, String path) {
        FileInfo info = new FileInfo();
        info.setContentType(contentType);
        info.setLength(length);
        info.setName(name);
        info.setPath(path);
 
        // 保存文件信息
        this.fileInfoDao.save(info);
}
 
【阅读原文】