互动网站设计用pyton可以做网站吗

张小明 2026/3/12 19:10:44
互动网站设计,用pyton可以做网站吗,网站建设培训公司排名,网站鼠标悬停动态效果在 Spring Data JPA / Hibernate 项目中#xff0c;我们经常需要实现不同复杂度的查询。本文从简单到复杂#xff0c;梳理常用查询方案的特点、优缺点和适用场景#xff0c;包括#xff1a;Query、Specification / CriteriaBuilder、Hibernate Criteria、QueryDSL、Query b…在 Spring Data JPA / Hibernate 项目中我们经常需要实现不同复杂度的查询。本文从简单到复杂梳理常用查询方案的特点、优缺点和适用场景包括Query、Specification/CriteriaBuilder、Hibernate Criteria、QueryDSL、Query by ExampleQBE以及EntityManager.createNativeQuery。1️⃣原生 SQL / JPQL (Query)特点固定 SQL 或 JPQL参数绑定可选:param。优点直观SQL 性能可控。对聚合、多表查询支持良好。缺点动态条件写起来麻烦需要大量 if / OR 条件或手写 SQL 拼接。适合场景查询逻辑固定、复杂度不高例如简单报表或固定列表查询。示例Query(SELECT u FROM User u WHERE u.status :status AND u.department :dept)ListUserfindByStatusAndDepartment(Param(status)UserStatusstatus,Param(dept)Stringdepartment);2️⃣JpaSpecificationExecutor Specification / CriteriaBuilder特点Specification 是基于CriteriaBuilder CriteriaQuery Predicate的封装。提供标准 JPA 的动态查询能力。优点动态条件拼接灵活。类型安全编译期检查字段。支持分页、排序、简单聚合。缺点聚合、CASE WHEN 或复杂多表查询写起来冗长。语法比 QueryDSL 繁琐可读性略低。适合场景动态条件 单表或简单 JOIN 分页查询。需要标准 JPA API无需额外依赖的项目。示例CriteriaBuilder 原生使用CriteriaBuildercbentityManager.getCriteriaBuilder();CriteriaQueryUsercqcb.createQuery(User.class);RootUserrootcq.from(User.class);ListPredicatepredicatesnewArrayList();if(status!null)predicates.add(cb.equal(root.get(status),status));if(dept!null)predicates.add(cb.equal(root.get(department),dept));cq.select(root).where(cb.and(predicates.toArray(newPredicate[0])));ListUserusersentityManager.createQuery(cq).getResultList();示例Specification 封装SpecificationUserspec(root,query,cb)-{ListPredicatepredicatesnewArrayList();if(status!null)predicates.add(cb.equal(root.get(status),status));if(dept!null)predicates.add(cb.equal(root.get(department),dept));returncb.and(predicates.toArray(newPredicate[0]));};ListUserusersuserRepository.findAll(spec,Sort.by(username));3️⃣Hibernate Criteria / DetachedCriteria特点Hibernate 原生 Criteria API老版本 JPA 也有类似接口。优点与 Specification 类似可动态构建查询。缺点Hibernate 6 已不推荐使用新项目建议用 CriteriaBuilder 或 QueryDSL。适合场景历史项目或 Hibernate 原生项目。示例SessionsessionentityManager.unwrap(Session.class);Criteriacriteriasession.createCriteria(ExamInfo.class);if(status!null)criteria.add(Restrictions.eq(status,status));ListExamInfolistcriteria.list();4️⃣QueryDSL推荐复杂动态查询特点静态类型查询 DSL完全类型安全。支持动态条件、聚合、JOIN、排序。优点SQL 风格直观类型安全编译期检查。BooleanBuilder 拼接动态条件简单。支持复杂聚合、CASE WHEN、多表 JOIN、分页排序。缺点需要生成 Q 类QueryDSL 注解处理器生成学习成本稍高。示例复杂 SQL 转 QueryDSLQExamInfoeiQExamInfo.examInfo;QExamPaperetpQExamPaper.examPaper;QExamParticipantepQExamParticipant.examParticipant;JPAQueryExamInfoPageVoquerynewJPAQuery(entityManager);BooleanBuilderbuildernewBooleanBuilder();if(param.getStatus()!null)builder.and(ei.status.eq(param.getStatus()));if(StrUtil.isNotBlank(param.getExamName()))builder.and(ei.examName.like(%param.getExamName()%));query.select(Projections.constructor(ExamInfoPageVo.class,ei.id,ei.examName,ei.status,ei.validStartTime,ei.validEndTime,ei.reviewDelayDays,ei.paper.id,etp.title,etp.duration,etp.score,ep.count(),ep.when(ep.required.eq(true),1).sum(),ep.when(ep.required.eq(false).and(ep.finalScore.isNull()),1).sum())).from(ei).leftJoin(ei.paper,etp).leftJoin(ei.participants,ep).where(builder).groupBy(ei.id,ei.examName,ei.status,ei.validStartTime,ei.validEndTime,ei.reviewDelayDays,ei.paper.id,etp.title,etp.duration,etp.score).fetch();其中 JPAQuery 可换成全局的 queryFactoryConfiguration public class QueryDslConfig { PersistenceContext private EntityManager entityManager; Bean public JPAQueryFactory jpaQueryFactory() { return new JPAQueryFactory(entityManager); } } 然后 Resource private JPAQueryFactory queryFactory; queryFactory.select().fetch(); queryFactory.update().execute()5️⃣Spring Data JPA Query by Example (QBE)特点根据实体示例生成查询。优点快速生成简单查询无需写 SQL / Specification。类型安全代码简洁。缺点几乎不支持 JOIN、聚合和复杂 CASE WHEN。动态条件能力有限只能匹配实体非空属性。适合场景简单动态条件查询、快速原型或后台管理系统。示例UserprobenewUser();probe.setStatus(UserStatus.ACTIVE);probe.setDepartment(IT);ExampleMatchermatcherExampleMatcher.matching().withIgnorePaths(id).withIgnoreCase(username).withStringMatcher(StringMatcher.CONTAINING);ExampleUserexampleExample.of(probe,matcher);ListUserusersuserRepository.findAll(example);6️⃣EntityManager.createNativeQuery原生 SQL特点直接执行原生 SQL 查询或更新。优点支持所有 SQL 特性JOIN、聚合、CASE、函数。可调用数据库特定函数或存储过程。性能可控适合复杂查询或批量操作。缺点不类型安全运行时才报错。需要手动映射结果到 DTO/VO。适合场景报表查询、复杂聚合、多表操作。数据库特性函数调用JSON、存储过程等。批量更新/删除操作。极端性能优化场景。示例QueryqueryentityManager.createNativeQuery(SELECT d.dept_name, COUNT(u.id) AS user_count FROM users u JOIN department d ON u.dept_id d.id GROUP BY d.dept_name);ListObject[]resultsquery.getResultList();for(Object[]row:results){System.out.println(Dept: row[0], Count: row[1]);}7️⃣查询方式对比表查询方式动态条件聚合/CASE WHENJOIN类型安全可读性适用场景Query (JPQL/SQL)❌固定✅ 支持✅ 支持❌高简单或固定查询、报表Specification / CriteriaBuilder✅ 完全动态部分✅ 支持简单 JOIN✅中动态条件、分页、简单聚合Hibernate Criteria✅部分✅ 支持✅中历史项目或 Hibernate 原生项目QueryDSL✅ 完全动态✅ 支持✅ 支持✅高复杂动态查询、多表聚合、报表QBE✅ 受限❌ 不支持❌ 不支持✅高简单实体查询、快速原型createNativeQuery❌固定可手动拼接✅ 支持✅ 支持❌中报表、复杂聚合、多表操作、数据库函数、批量操作8️⃣总结建议固定查询、简单报表Query最直接。动态条件 分页 简单聚合Specification / CriteriaBuilder标准 JPA API复杂动态查询、多表 JOIN、聚合、报表类查询QueryDSL 最适合。快速简单动态查询单表QBE 方便但企业项目使用不多。依赖数据库特性、复杂 SQL、性能优化、批量操作原生 SQL (createNativeQuery) 最灵活。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

河北众成建设有限公司网站成都网站品牌设计

Excalidraw开源工具新增AI历史版本对比功能 在远程协作成为常态的今天,技术团队、产品设计和项目管理对可视化工具的需求早已超越“画个图”的基础功能。我们不再满足于静态的流程图或架构草稿——我们需要的是一个能理解意图、支持迭代、并让每一次修改都清晰可追溯…

张小明 2026/3/5 4:09:15 网站建设

外贸人常用网站广告制作公司转型

3分钟掌握jsPDF国际化:轻松创建多语言PDF文档的终极指南 【免费下载链接】jsPDF 项目地址: https://gitcode.com/gh_mirrors/jsp/jsPDF 在全球化的今天,为不同语言用户生成PDF文档已成为开发者的必备技能。jsPDF作为最流行的JavaScript PDF生成库…

张小明 2026/3/5 4:09:15 网站建设

临汾网站建设福州seo排名优化

第一章:为什么你的单据总被退回?——Open-AutoGLM报销痛点解析在使用 Open-AutoGLM 自动化报销系统时,许多用户频繁遭遇单据被退回的问题。这不仅影响报销效率,还增加了财务沟通成本。问题的根源往往并非系统故障,而是…

张小明 2026/3/5 4:09:19 网站建设

嘉兴的信息公司网站拓者设计吧官网案例

枚举类型,通常称为枚举或枚举,是一种特殊的类,用于表示固定数量的常量值。 定义一个简单的枚举 关键字都是一样的 enum Color { red, green, blue }可以以,结尾以便利于复制,而不会产生问题 enum Color { red, gre…

张小明 2026/3/5 4:09:18 网站建设

建设软件网站seo网站关键词优化费用

影视混剪工具演示版本修复记录: 2025-12-22 v1.0.6 修复音视频合成中文路径问题;之前的版本全英文路径文件应该没问题;没试过 2025-12-22 v1.0.5 1、修复打包后ffmpeg路径访问失败问题; 2、一键整合增加原声强度,合成…

张小明 2026/3/5 4:09:19 网站建设

网站开发与实训报告360免费wifi旧版本下载

完整指南:2025年快速上手Common Voice语音数据集 【免费下载链接】cv-dataset Metadata and versioning details for the Common Voice dataset 项目地址: https://gitcode.com/gh_mirrors/cv/cv-dataset 想要构建语音识别模型却苦于找不到高质量数据&#…

张小明 2026/3/5 4:09:20 网站建设