日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

JPA扩展(自定义sql)

發(fā)布時(shí)間:2025/7/14 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JPA扩展(自定义sql) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

pom.xml

<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>1.5.9.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>per.qiao</groupId><artifactId>springbootdemo</artifactId><version>0.0.1-SNAPSHOT</version><name>springbootdemo</name><description>sprnigboot學(xué)習(xí)</description><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><!-- 擴(kuò)展JPA包 --><dependency><groupId>com.slyak</groupId><artifactId>spring-data-jpa-extra</artifactId><version>2.1.2.RELEASE</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

得益于spring-data-jpa-extra 包

先編寫兩個(gè)文件

@Configuration @EnableConfigurationProperties(SpringJpaExtraProperties.class) @AutoConfigureAfter({ DataSourceAutoConfiguration.class }) public class JpaExtraAutoConfiguration {@Autowiredprivate SpringJpaExtraProperties springJpaProperties;@Beanprotected FreemarkerSqlTemplates freemarkerSqlTemplates() {FreemarkerSqlTemplates sqlTemplates = new FreemarkerSqlTemplates();String templateBasePackage = springJpaProperties.getTemplateBasePackage();if (templateBasePackage != null) {sqlTemplates.setTemplateBasePackage(templateBasePackage);}String templateLocation = springJpaProperties.getTemplateLocation();if (templateLocation != null) {sqlTemplates.setTemplateLocation(templateLocation);}// 默認(rèn)是xmlsqlTemplates.setSuffix(".sftl");return sqlTemplates;} } @ConfigurationProperties(prefix = "spring.jpa.extra") public class SpringJpaExtraProperties {/*** 源碼看 FreemarkerSqlTemplates.resolveSqlResource* 例如 templateLocation:classpath:/sqltemplates 那么 掃描路徑為 classpath:/sqltemplates/** /*.sftl* templateLocation:classpath:/sqltemplates/Test.sftl 那么將只掃描這個(gè)一個(gè)文件* 例如 templateBasePackage:sqltemplates.mysql 那么掃描路徑為 classpath*: sqltemplates/sql/** /*.sftl** 兩個(gè)屬性可以共存*/private String templateLocation;private String templateBasePackage;public String getTemplateLocation() {return templateLocation;}public void setTemplateLocation(String templateLocation) {this.templateLocation = templateLocation;}public String getTemplateBasePackage() {return templateBasePackage;}public void setTemplateBasePackage(String templateBasePackage) {this.templateBasePackage = templateBasePackage;} }

再寫一個(gè)facoties文件

META-INF/spring.facotries

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ per.qiao.config.JpaExtraAutoConfiguration

yml文件

debug: false spring:main:banner-mode: "off"jpa:database: mysqlshow-sql: truehibernate:ddl-auto: updatenaming:#命名策略strategy: org.hibernate.cfg.ImprovedNamingStrategyproperties:hibernate:dialect: org.hibernate.dialect.MySQL5Dialectextra:#源碼看 FreemarkerSqlTemplates.resolveSqlResource#templateLocation: classpath: sqltemplatestemplateBasePackage: sqltemplatesdatasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://localhost:3306/test?characterEncoding=utf8username: rootpassword: 123456

Dao文件

public interface TestRepository extends GenericJpaRepository<Test, Long>, JpaSpecificationExecutor {@TemplateQueryList<Test> getData();@TemplateQueryList<Test> getList(@Param("id") Integer id);@TemplateQueryList<Test> getListByPage(Test test, Pageable pageable);@TemplateQueryList<Map<String, Object>> getListMap(@Param("id") Integer id);@TemplateQueryPage<Test> findByName(String name, Pageable pageable);// 這個(gè)是JPA默認(rèn)的支持@Query使用原生sql@Query(nativeQuery = true, value = "select * from test where name like ?1")List<Test> findTest(String name); }

sql的文件 Test.sftl

該文件使用freemarker的語法 FreeMarker基礎(chǔ)語法

--getData select id, name, subject from test where 1 = 1 <#--<#if content??>--><#--AND id = ${id}--> <#--</#if>-->--getList select * from test where 1 = 1 <#if id??>AND id = ${id} </#if>--getListByPage select * from test where 1 = 1 <#if id??>AND id = ${id} </#if>--getListMap select name, birthday from test t left join test2 t2 on t.id = t2.id where 1 = 1 <#if id??>And t.id = ${id} </#if>--findByName select * from test <#if name??>And name = ${name} </#if>

entity

@Entity @ToString @Builder @NoArgsConstructor @AllArgsConstructor @Data public class Test implements Serializable {@Idprivate Long id;private String name;private String subject;private Integer score; }

spirngBoot啟動(dòng)類上要加上@EnableJpaRepositories

@SpringBootApplication @RestController @ComponentScan({"per.qiao.entity"}) @EnableJpaRepositories(basePackages = {"per.qiao.**.dao"},repositoryFactoryBeanClass = GenericJpaRepositoryFactoryBean.class,repositoryBaseClass = GenericJpaRepositoryImpl.class) public class App {

調(diào)用

public void say() {// getDataList<Test> data = testRepository.getData();//List<Test> tests = testRepository.getList(1);//Test test = Test.builder().id(1L).build();PageRequest pageRequest = new PageRequest(1, 2, new Sort(Sort.Direction.ASC, "id"));List<Test> pageDatas = testRepository.getListByPage(test, pageRequest);System.out.println(pageDatas);//List<Map<String, Object>> listMap = testRepository.getListMap(1);//Page<Test> page = testRepository.findByName("張三", pageRequest);List<Test> content = page.getContent();System.out.println(content);// 使用jpa的默認(rèn)@Query注解List<Test> tests = testRepository.findTest("張%");System.out.println(tests); }

==注意sftl配置文件的名字要與實(shí)體類的名字一樣==

可以自定義修改一些東西,比如文件名與類名一樣這點(diǎn),關(guān)鍵類在FreemarkerTemplateQuery

源碼地址: spring-data-jpa-extra

轉(zhuǎn)載于:https://www.cnblogs.com/qiaozhuangshi/p/11148885.html

總結(jié)

以上是生活随笔為你收集整理的JPA扩展(自定义sql)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 吸咬奶头狂揉60分钟视频 | 亚洲日本片 | 一区二区视频在线看 | 中国一级特黄毛片 | 日本黄色三级视频 | 欧美日本亚洲韩国国产 | 亚洲一级av无码毛片精品 | 精品国产黄色片 | 无码人妻精品一区二区蜜桃色欲 | 久久综合福利 | 日韩精品成人免费观看视频 | 老司机午夜av | 狠狠操一区二区 | 懂色视频在线观看 | 日韩性爰视频 | 少妇激情视频 | 久久不射网| 欧美女优一区 | 亚洲欧美综合另类自拍 | 日韩成年人视频 | 在线看日韩av | caopeng在线视频 | 久久夜色精品 | 亚洲永久精品一区二区 | 又大又粗弄得我出好多水 | 51av在线 | 超级变态重口av番号 | 国产一区二区亚洲 | 偷拍亚洲欧美 | 草草视频在线观看 | 中国一及毛片 | 国产欧美一区二区三区在线老狼 | 亚洲图片综合区 | 欧美日韩一区在线观看 | 国产午夜精品久久久久久久久久 | 九色porny视频 | 中文字幕一区二区三区夫目前犯 | 亚洲a人 | 天天操天天干天天摸 | 国产一二区在线 | 亚洲青涩网| 在线一区二区视频 | 亚洲av成人精品毛片 | www.香蕉视频 | 午夜精品一区二区三区在线播放 | 日韩视频免费观看高清完整版在线观看 | 国产麻豆剧传媒精品国产 | 青娱乐伊人 | 久久理伦 | 91久久精品日日躁夜夜躁国产 | 欧美最猛黑人xxxx | 中文字幕日韩精品亚洲一区小树林 | 波多野结衣大片 | 国产欧美精品一区二区 | 欧美日韩性 | 午夜插插| 亚洲第一色 | 不用播放器的av网站 | 日韩欧美国产成人精品免费 | 国产九色在线播放九色 | 亚洲韩国精品 | 亚洲蜜臀av| 你懂的网站在线 | 人人妻人人澡人人爽人人dvd | 久久精品亚洲一区 | 欧美综合在线视频 | 精品国产乱码久久久 | 女性向av免费网站 | 韩日毛片| 国产一区二区精彩视频 | 久久免费国产精品 | 国产免费黄色网址 | 精品国产免费av | 日韩图色 | 国产在线观看免费视频今夜 | 国产精品视频免费网站 | 91免费在线看| 日韩免费av一区二区 | 日日干天天射 | 岛国av在线播放 | 97夜色 | 日韩三级国产精品 | 久艹在线视频 | ww欧美| 中文字幕在线视频免费观看 | 中文字幕国产在线 | 全黄一级裸体片 | 国产亚洲欧美精品久久久www | 91女神在线 | 蜜臀av一区二区三区有限公司 | 穿扒开跪着折磨屁股视频 | 亚洲成人日韩 | 99艹| 在线免费成人网 | 成人黄色免费看 | 99在线观看 | 国产成人啪精品午夜在线观看 | 国产大片91 | 超碰在线视屏 |