入门spring-data-JPA以及测试类的编写

   **************** 写在前面的话,笔者小白一枚,只会一些基础的入门 ***********

1.    使用spring-data个人感觉十分的顺手,也许是不习惯繁琐的配置,所以当有新技术时,大多先看看有没有可以 使用注解这一特性  

      个人觉得spring-data已经算是一个 比较完美的东西,

      首先用搜spring 将 使用spring-data 的包 放入扫描 ,还有事务 和注解扫描

 <bean id="entityMagFacoty" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
      <property name="dataSource" ref="datasource"  />
        <property name="jpaVendorAdapter" >
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"/>
        </property>

        <property name="packagesToScan" value="com.Reposity"/>

        <property name="jpaProperties">
            <props>
                <prop key="hibernate.ejb.naming,strategy">org.hibernate.cfg.ImprovedNamingStrategy</prop>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">create</prop>
            </props>
        </property>
    </bean>
<!--事务管理器-->
    <bean id="transactionaMang" class="org.springframework.orm.jpa.JpaTransactionManager">
       <property name="entityManagerFactory" ref="entityMagFacoty" />
    </bean>
 <!--支持注解的事务-->
<tx:annotation-driven transaction-manager="transactionaMang" />

<!--配置data-->
<jpa:repositories base-package="com.Reposity" entity-manager-factory-ref="entityMagFacoty"/>

<context:component-scan base-package="com"/>

2. 配置好spring-data的包扫描后 :它有四个可供继承的接口

 Repository(底层JDBC) JpaRepository  CrudRepository  PagingAndSortingRepository(高级Hibernate)

   ***********************推荐 第二个和第三个************************ 
  毕竟 大部分东西都是 半自动的好 看看如今 的Mybatis 和 Hibernate 和 JDBC

   封装太好的东西意味着性能的损耗(Hibernate),

     完全不封装的东西意味着繁琐(JDBC)

     所以慢慢 Mybatis这种东西大行于世,

类似的还有 全自动步枪(M4A1)和半自动步枪(AK47)和 燧发枪-------当然是Ak47好用,耐用

 2.1 Repository  :(也可以这样   public interface EmpReposity extends Repository<Student,Integer>{}

一个接口 继承Repository  ,把需要映射的 实体类(pojo)和他的主键的类型写上就行了


@RepositoryDefinition(domainClass = Student.class,idClass = Integer.class)
public interface empTReposty {
    @Query(" select a from Student a  where a.name like %?1%    ")
    public List<Student> getListS(String name);

    @Query(" select a from Student a  where a.name like %:name%    ")
    public List<Student> getListSparam(@Param("name") String name);

    @Query(" select a from Student a  where a.name=:name  ")
    public List<Student> getListSparams(@Param("name") String name);
// 原生的sql语句
    @Query(nativeQuery = true, value =  " update Student a  set a.U_id=?1   ")
    public void updateLIstYUansheng(Integer age );
//控制事务
    @Modifying
    @Query(" update Student a  set a.age=?1   where a.name=?2  ")
    public void updateLIst(Integer age,String name);

}
 ******spring-data支持根据 方法名生成sql语句************* 

         

  • And --- 等价于 SQL 中的 and 关键字,比如 findByUsernameAndPassword(String user, Striang pwd);
  • Or --- 等价于 SQL 中的 or 关键字,比如 findByUsernameOrAddress(String user, String addr);
  • Between --- 等价于 SQL 中的 between 关键字,比如 findBySalaryBetween(int max, int min);
  • LessThan --- 等价于 SQL 中的 "<",比如 findBySalaryLessThan(int max);
  • GreaterThan --- 等价于 SQL 中的">",比如 findBySalaryGreaterThan(int min);
  • IsNull --- 等价于 SQL 中的 "is null",比如 findByUsernameIsNull();
  • IsNotNull --- 等价于 SQL 中的 "is not null",比如 findByUsernameIsNotNull();
    

    ******spring-data支持原生的sql语句********  

// 原生的sql语句
    @Query(nativeQuery = true, value =  " update Student a  set a.U_id=?1   ")
    public void updateLIstYUansheng(Integer age );

***********************以上所写的继承方法适用于其他三个类***************************

      主要介绍特殊的 PagingAndSortingRepository(自带分页和排序的接口)

              使用中需要注意的是:

   Pageable  pageable=new PageRequest(0,12) ;//分页帮助类spring-data自带的,0是页数第一页,12 是 一页多少行
        Page<Student> pageStu= empPageRespoty.findAll(pageable);// 同样是自带的Page, findAll 
         pageStu.getTotalElements();// 获取所有的元素
        pageStu.getTotalPages();// 所有的页数
       //当前页面的一些信息
       List<Student> students=pageStu.getContent();
       pageStu.getNumber();
      // 排序的同样是 spring-data自带的        排序方式     根据什么排序
       Sort.Order order=new Sort.Order(Sort.Direction.DESC,"id");
       Sort sort1=new Sort(order);
       Pageable  pageables=new PageRequest(0,12,sort1) ;
       Page<Student> pastus= empPageRespoty.findAll(pageable); 
***********************生产中的用法************************************ 
@Transactional
public interface EMPRepository extends JpaRepository<EMPModel, Integer>, JpaSpecificationExecutor<EMPModel> {}
   **********同一个包下的有不想继承 以上四个的 必须注明*****8
  @NoRepositoryBean
public interface AfterMarketRepository { 你自己写的方法 }
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值