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 (); } }春天的引导下如何自定义库中刀的方法