春天的引导下如何自定义库中刀的方法

  

  

jdk 1.8,弹簧引导1.5.3。更正释放,MySQL,弹簧数据,JPA

  

  

春数据提供了一套简单易用的DAO层抽象与封装,覆盖的凝乳的基本功能,但是在诸多的情况下,需要用户自定义DAO的实现方法,来实现更为复杂和精细的数据库访问操作,该如何来解决这个问题?

  

  

这里我们以自定义testAA的方法为例,来介绍如何实现自定义的刀方法扩展。

  

  

我们这里定义了一个非常简单的mycity表,来作为示例的实体类BaseEntity:

  

数据库表定义:

  

春天的引导下如何自定义库中的刀方法

        进口java.util.Date;   进口javax.persistence.Column;   进口javax.persistence.GeneratedValue;   进口javax.persistence.GenerationType;   进口javax.persistence.Id;   进口javax.persistence.MappedSuperclass;   进口javax.persistence.Temporal;   进口javax.persistence.TemporalType;   进口javax.persistence.Version;   @MappedSuperclass   公共抽象类BaseEntity java实现。可序列化的{   私有静态最终长serialVersionUID=-2420979951576787924 l;   @ id   @GeneratedValue(策略=GenerationType.IDENTITY)   @ column (name=" ID ")   私人长id;   @Version   私人长版本;   @Temporal (TemporalType.TIMESTAMP)   @ column (name=" CREATE_TIME columnDefinition=澳鲜奔浯罜URRENT_TIMESTAMP”)   私人createTime日期;   @Temporal (TemporalType.TIMESTAMP)   @ column (name=" UPDATE_TIME columnDefinition="默认时间戳CURRENT_TIMESTAMP>   进口javax.persistence.Column;   进口javax.persistence.Entity;   进口javax.persistence.Table;   进口lombok.Data;   @ entity   @ table (name=" mycity ")   @ data   公共类城市扩展BaseEntity {   私有静态最终长serialVersionUID=-7510771121759944670 l;   @ column (name="名称")   私人字符串名称;   @ column (name=" country_code ")   私人字符串countryCode;   @ column   私人字符串区;   @ column   私人int人口;   }      

这里的@ data使用了lombok提供的强大标注,来简化冗余Getter/Setter方法的使用。

  

  

标准的CityRepository.Java,这里完全使用缺省提供的方法:

        进口org.springframework.data.jpa.repository.JpaRepository;   进口org.springframework.stereotype.Repository;   进口com.rose.money.City;   @   公共接口CityRepository延伸JpaRepository<城市Long> CityRepositoryCustom {   }      

这里的CityRepository继承了2个父类,包括用户自定义的接口类,让用户自定义的接口可以暴漏出来。
  这里的CityRepsoitoryCustom定义了用户的自定义方法:

        公共接口CityRepositoryCustom {   公共空间testAA ();   }      

注意:这里的自定义后缀是约定的,不能随意修改。

  

自定义方法的实现类:

        进口并不知道;   进口javax.persistence.EntityManager;   进口javax.persistence.PersistenceContext;   进口org.springframework.beans.factory.annotation.Autowired;   公共类CityRepositoryImpl实现CityRepositoryCustom {   @ autowired   @PersistenceContext   私人EntityManager EntityManager;   @Override   公共空间testAA () {   List<对象[]比;城市=entityManager。createNativeQuery(“选择id、名称、地区从mycity”) .getResultList ();   [](对象obj:城市){   system . out。打印(位置1:+ obj [0]);   system . out。打印(“位置2:”+ obj [1]);   system . out。打印(位置3:”+ obj [2]);   }   }   }      

这里的实现类就是读取了几条记录,然后打印出来。其实现了自定义的接口类。

  

  

application.properties:

        spring.application.name=定义jpa   spring.jpa.database=MYSQL   spring.datasource.username=根   spring.datasource.driver-class-name=com.mysql.jdbc.Driver   spring.datasource.password=123456   spring.datasource.url=jdbc: mysql://localhost: 3306/& # 63; useUnicode=true& characterEncoding=utf-8& zeroDateTimeBehavior=convertToNull& allowMultiQueries=true& useSSL=true   spring.jpa.hibernate.naming.strategy=org.hibernate.cfg.ImprovedNamingStrategy   spring.jpa.show-sql=true      

  

测试用例:

        进口org.junit.Test;   进口org.junit.runner.RunWith;   进口org.springframework.beans.factory.annotation.Autowired;   进口org.springframework.boot.test.context.SpringBootTest;   进口org.springframework.test.context.junit4.SpringRunner;   进口com.rose.money.repository.CityRepository;   @RunWith (SpringRunner.class)   @SpringBootTest   公开课CustomjpaApplicationTests {   @ autowired   私人CityRepository cityRepo;   @Test   公共空间contextLoads () {   城市城市=cityRepo.findOne(1升);   System.out.println(“城市=祝辞;”+城市);   cityRepo.testAA ();   }   }

春天的引导下如何自定义库中刀的方法