SpringDataJPA

一、ORM思想

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

二、整合SpringDataJpa与Spring


    
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        
        <property name="packagesToScan" value="com.li.domain"/>
        
        <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"/>
                
                <property name="showSql" value="true"/>
            bean>
        property>
        
        <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>
    
    <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, JpaSpecificationExecutor {
}

五、测试

@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);
    }
}

 

你可能感兴趣的:(SpringDataJPA)