Spring 5框架之 Spring-Data-Jpa入門之HelloWorld (十)

1. 前言

Spring 爲JPA提供了很好的支持。Spring Data項目提供了一個名爲Spring Data JPA ,提供了存儲數據庫的概念與規範以及對查詢特定語言(QueryDSL)的支持。

2.HelloWorld

引入核心的pom依賴如下:

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>2.2.6.RELEASE</version>
        </dependency>

在Spring中如果使用JPA 需要有以下幾個步驟:

  1. 配置數據源連接池
  2. 配置JPA的 EntityManagerFactory
  3. 配置事務管理器
  4. 配置Spring Data

首先配置一個jdbc.properties 文件,其文件內容如下所示:

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/test?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=utf8&autoReconnect=true
jdbc.username=root
jdbc.password=123456

其完整的配置內容的xml如下所示:

  <context:property-placeholder location="day6/jdbc.properties"/>
        <!--配置連接池-->
        <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
                <property name="driverClassName" value="${jdbc.driver}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
        </bean>

        <!--工廠類對象  本地容器實力管理工廠對象-->
        <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
           <!--引用數據源-->
                <property name="dataSource" ref="dataSource"/>     
          <!--掃描entity層對象-->
                <property name="packagesToScan" value="com.codegeek.ioc.day6.model"/>  
                <!--配置jpa供應商適配器-->
                <property name=" ">
                        <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                                <!-- 自動建表 -->
                                <property name="generateDdl" value="true" />
                                <property name="database" value="MYSQL" />
                                <property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect" />
                                <property name="showSql" value="true" />
                        </bean>
                </property>
        </bean>
        <!--配置事務    jpa事務管理-->
        <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
                <property name="entityManagerFactory" ref="entityManagerFactory"/>   <!--引用工廠對象-->
        </bean>
        <!--事務驅動-->
        <tx:advice id="txAdvice" transaction-manager="transactionManager">
                <tx:attributes>
                        <tx:method name="get*" read-only="true"/>
                        <tx:method name="find*" read-only="true"/>
                        <tx:method name="*" propagation="REQUIRED"/>
                </tx:attributes>
        </tx:advice>

        <!--配置切面-->
        <aop:config>
                <aop:pointcut id="pointcut" expression="execution(* com.codegeek.ioc.day6.service.*.*(..))"/>
                <aop:advisor advice-ref="txAdvice" pointcut-ref="pointcut"/>
        </aop:config>
        <!--dao層-->
        <jpa:repositories base-package="com.codegeek.ioc.day6.dao"
                          transaction-manager-ref="transactionManager"
                          entity-manager-factory-ref="entityManagerFactory"
        />

接下來我們創建相應的實體對象,其包結構如下所示:
在這裏插入圖片描述

  • controller
@RestController
public class CompanyController {
    @Autowired
    private CompanyService companyService;


    @RequestMapping(value = "/saveCompany" )
    public ResponseEntity<String> saveCompany(@RequestBody Company company) {
        companyService.save(company);
        return ResponseEntity.ok("保存成功");
    }
}
  • Service
public interface CompanyService {

    void  save(Company company);
}

@Service
public class CompanyServiceImpl implements CompanyService {

    @Autowired
    private CompanyDao companyDao;

    @Override
    public void save(Company company) {
        companyDao.save(company);
    }
}
  • model
@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "t_company")
public class Company {
    @Column(name = "t_companyName")
    private String companyName;

    @Column(name = "t_createTime")
    private Date createTime;

    @OneToMany(mappedBy = "company", cascade = CascadeType.ALL)
    @JsonManagedReference
    private List<Employee> employees;
    @Column(name = "t_companyAddress")
    private String companyAddress;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "t_company_id")
    private Integer id;
}


@Data
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table(name = "t_employee")
public class Employee {
    @Column(name = "t_name")
    private String name;
    @Column(name = "t_salary")
    private Double salary;
    @Column(name = "t_phoneNumber")
    private Integer phoneNumber;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "t_employee_id")
    private Integer id;
    @ManyToOne
    @JoinColumn(name = "t_company_id")
    @JsonBackReference
    private Company company;
    @Column(name="t_gender")
    private String gender;
}

  • dao
@Repository
public interface CompanyDao  extends JpaRepository<Company, Integer> {
  
}

然後我們在Idea中成功啓動項目後會成功創建數據庫表如下所示:
在這裏插入圖片描述
然後我們打開postman向接口發送如下數據:

{"companyName":"google","createTime":1589459522947,"employees":[{"name":"張三","salary":5000.0,"phoneNumber":123456789,"gender":"男"},{"name":"小紅","salary":9000.0,"phoneNumber":987452621,"gender":"女"}],"companyAddress":"America"}

在這裏插入圖片描述
查看Company表如下所示:
在這裏插入圖片描述
查看emplyee表如下所示;
在這裏插入圖片描述
到這裏一個簡單的Spring Data JPA 的入門demo已經結束,下一篇我們將繼續介紹Spring Data Jpa的使用方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章