SpringDataJPA

一、ORM思想

        主要目的:操作实体类就相当于操作数据库表
        建立两个映射关系:
        实体类和表的映射关系
        实体类中属性和表中字段的映射关系
        不再重点关注:sql语句

二、整合SpringDataJpa与Spring

<!--spring和spring data jpa的配置-->
    <!--    1.创建entityManageFactory对象交给spring管理-->
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!--自动扫描实体类的包,注入spring-->
        <property name="packagesToScan" value="com.li.domain"/>
        <!--jpa实现厂家-->
        <property name="persistenceProvider">
            <bean class="org.hibernate.jpa.HibernatePersistenceProvider"/>
        </property>
        <!--供应商适配器-->
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <!--是否自动创建数据库表-->
                <property name="generateDdl" value="false"/>
                <!--指定数据库类型-->
                <property name="database" value="MYSQL"/>
                <!--数据库方言:支持特有的语法-->
                <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect"/>
                <!--是否显示sql语句-->
                <property name="showSql" value="true"/>
            </bean>
        </property>
        <!--jpa方言:高级特性-->
        <property name="jpaDialect">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaDialect"/>
        </property>
    </bean>
    <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="driverClass" value="com.mysql.jdbc.Driver"/>
        <property name="jdbcUrl" value="jdbc:mysql:///mbase"/>
        <property name="user" value="root"/>
        <property name="password" value="123"/>
    </bean>
    <!--整合spring data jpa-->
    <jpa:repositories base-package="com.li.dao" transaction-manager-ref="transactionManager"
                      entity-manager-factory-ref="entityManagerFactory">
    </jpa:repositories>
    <!--配置事务管理器-->
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"/>
    </bean>
    <!--包扫描-->
    <context:component-scan base-package="com.li"/>
</beans>

三、编写实体类,使用Jpa注解配置映射关系

/**
 * 配置映射关系:
 *      1.实体类和表的映射关系
 *      2.实体类中的属性和表中的字段的映射关系
 *         @Entity : 声明为实体类
 *         @Table : 配置实体类和表的映射关系
 *            name:配置数据库表的名称
 *
 */
@Entity
@Table(name="cst_customer")
public class Customer implements Serializable {
    /**
     * @Id: 声明主键的配置
     * @GeneratedValue :主键生成策略
     *    GenerationType.IDENTITY:自增 Mysql
     *    GenerationType.SEQUENCE:序列 oracle
     *@Column : 配置属性和字段的映射关系
     *   name: 数据库表中字段名称
     */
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name="cust_id")
    private Long custId;
    @Column(name="cust_name")
    private String custName;
    @Column(name="cust_source")
    private String custSource;
    @Column(name="cust_industry")
    private String custIndustry;
    @Column(name="cust_level")
    private String custLevel;
    @Column(name="cust_address")
    private String custAddress;
    @Column(name="cust_phone")
    private String custPhone;

四、编写一个符合springDataJpa的dao层接口

           * 只需要编写dao层接口,不需要编写dao层接口的实现类
           * dao层接口规范
              1.需要继承两个接口(JpaRepository,JpaSpecificationExecutor)
              2.需要提供响应的泛型

/**
 * 符合springDataJpa的dao层接口的规范
 *      JpaRepository<实体类的类型,实体类中主键属性的类型>
 *          封装了CRUD操作
 *      JpaSpecificationExecutor<实体类类型>
 *          封装复杂分页查询
 */
public interface CustomerDao extends JpaRepository<Customer,Long>, JpaSpecificationExecutor<Customer> {
}

五、测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext.xml")
public class CustomerTest {
    @Autowired
    private CustomerDao customerDao;

    /**
     * 立即加载
     */
    @Test
    public void findOne(){
        Customer one = customerDao.findOne(1l);
        System.out.println(one);
    }
}

 

posted @ 2020-05-01 10:34  撑起一片阳光  阅读(169)  评论(0编辑  收藏  举报