JPA + MySQL 开发总结
本文为博主原创,转载请注明出处:
org.springframework.data.jpa
是 Spring Data JPA 框架中的一个包,用于简化与 JPA(Java Persistence API)相关的开发任务。Spring Data JPA 提供了一套强大且易于使用的功能,使得与数据库进行持久化操作更加便捷和高效。
1.引入JPA,进行常规开发步骤
使用 org.springframework.data.jpa
的一般步骤:
1.1引入依赖:
在项目的构建文件(如 Maven 的 pom.xml 或 Gradle 的 build.gradle)中添加 Spring Data JPA 的依赖项。例如,在 Maven 中添加以下依赖项:
<dependencies>
<!-- 其他依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
</dependencies>
1.2 创建实体类:
使用 JPA 注解来定义实体类,并将其映射到数据库表。注解包括 @Entity
、@Table
、@Column
等。
import javax.persistence.*; @Entity
@Table(name = "users")
public class User { @Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id; @Column(name = "name")
private String name; // getter and setter methods
}
1.3创建 Repository 接口:
创建一个继承自 JpaRepository
(或其他 Spring Data JPA 提供的 Repository 接口)的接口,用于访问和操作实体类对应的数据。
import org.springframework.data.jpa.repository.JpaRepository; public interface UserRepository extends JpaRepository<User, Long> {
// 可根据需要添加自定义查询方法
}
1.4配置数据源:
在 Spring Boot 的配置文件中,配置数据库连接信息、JPA 相关的属性,例如数据库 URL、用户名、密码等。
spring.datasource.url=jdbc:mysql://localhost:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=secret spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
1.5使用 Repository 进行操作:
在需要使用 JPA 操作数据库的地方,通过注入 Repository 接口对象来调用相应的方法。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; @Service
public class UserService { private final UserRepository userRepository; @Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
} public User saveUser(User user) {
return userRepository.save(user);
} public User getUserById(Long id) {
return userRepository.findById(id).orElse(null);
} // 其他操作方法
}
上述示例是一个简单的使用 org.springframework.data.jpa
的流程。它包括创建实体类、定义 Repository 接口、配置数据源和使用 Repository 进行操作。根据具体需求,可以扩展和定制这些步骤以满足应用程序的要求。
2.UserRepository 中定义使用得方法
在 UserRepository
中定义使用的方法非常简单。Spring Data JPA 提供了一套命名规则,它根据方法名自动解析和生成查询语句。可以按照规则给方法命名,而不需要编写具体的查询语句。
以下是一些常见的方法命名规则及其解析方式:
根据属性查询:
findBy<PropertyName>
:根据属性名称进行查询,例如findByName(String name)
。findBy<PropertyName>And<OtherProperty>
:根据多个属性进行查询,并通过 "And" 连接,例如findByNameAndAge(String name, int age)
。
按条件查询:
findBy<PropertyName>Equals
:根据属性的精确匹配进行查询,例如findByNameEquals(String name)
。findBy<PropertyName>IsNotNull
:根据属性不为 null 的条件进行查询,例如findByEmailIsNotNull()
。
排序和分页:
findAllByOrderBy<PropertyName>
:根据属性进行升序排序查询,例如findAllByOrderByAge()
。findAll(Pageable pageable)
:返回分页结果,可以使用PageRequest.of(...)
创建Pageable
对象。
这只是一小部分可用的方法命名规则示例,您可以根据具体需求查阅 Spring Data JPA 文档以获得更全面的了解。
注意事项:
- 方法名称必须遵循命名规则,否则可能会导致查询失败。
- 方法参数的数量和类型必须与属性的类型和数量匹配。
- 在使用一些特殊操作时,如模糊查询、区间查询等,可以使用
Like
、Between
等关键字来指定更复杂的条件。
示例:
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List; public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByName(String name);
List<User> findByAgeGreaterThan(int age);
List<User> findByEmailIsNotNull();
}
在上述示例中,UserRepository
定义了三个查询方法:根据名称查询用户、根据年龄大于给定值查询用户以及查询邮箱不为 null 的用户。这些方法会根据方法名自动解析为相应的查询条件,并返回符合条件的用户列表。
3.JPA 使用自定义sql
在实际使用过程中,可能需要处理一些特定的查询场景或复杂的条件,可能需要编写自定义的查询语句。Spring Data JPA 提供了注解和其他方式来支持自定义查询,以满足更复杂的需求。
在 Spring Data JPA 中,可以使用自定义的查询语句来满足特定的查询需求。以下是两种常用的方式来实现自定义查询:
3.1使用 @Query
注解
使用方法:
- 在需要进行自定义查询的方法上添加
@Query
注解,并提供相应的查询语句。 - 在查询语句中使用命名参数(例如
:paramName
)来引用方法参数。 - 如果有多个参数,可以通过索引位置(例如
?1
、?2
)引用它们。
- 在需要进行自定义查询的方法上添加
示例:
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import java.util.List; public interface UserRepository extends JpaRepository<User, Long> {
@Query("SELECT u FROM User u WHERE u.name = :name")
List<User> findByName(String name); @Query("SELECT u FROM User u WHERE u.age > :age AND u.email IS NOT NULL")
List<User> findByAgeGreaterThanAndEmailIsNotNull(int age);
}
在上述示例中,使用了 @Query
注解来自定义查询语句。通过 :name
和 :age
引用了方法参数,并根据属性条件进行查询。
3.2使用方法名称解析和关键字:
使用方法
- 在方法名称中使用关键字(如
And
、Or
、Between
等)来指定更复杂的条件。 - 当方法名称无法表达所需的查询时,可以使用
@Query
注解来补充自定义查询。
- 在方法名称中使用关键字(如
示例:
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List; public interface UserRepository extends JpaRepository<User, Long> {
List<User> findByAgeBetween(int minAge, int maxAge); @Query("SELECT u FROM User u WHERE u.name LIKE %:keyword%")
List<User> searchByKeyword(String keyword);
}
在上述示例中,使用了方法名称解析和关键字。findByAgeBetween
方法按照年龄范围进行查询,而 searchByKeyword
方法使用了 LIKE
来进行模糊查询。
无论选择哪种方式,都可以根据需要编写复杂的查询语句,并通过方法名或注解来引用相关参数。这样就可以使用自定义的查询语句来执行更灵活和复杂的数据库操作。
JPA + MySQL 开发总结的更多相关文章
- Springboot+Atomikos+Jpa+Mysql实现JTA分布式事务
1 前言 之前整理了一个spring+jotm实现的分布式事务实现,但是听说spring3.X后不再支持jotm了,jotm也有好几年没更新了,所以今天整理springboot+Atomikos+jp ...
- Win7搭建nginx+php+mysql开发环境以及websocket聊天实例测试
Win7搭建nginx+php+mysql开发环境以及websocket聊天实例测试一.下载相关安装包 1.下载nginx最新版本(nginx1.3.13版之后才支持websocket协议) 下载地址 ...
- 深入理解MySQL开发性能优化.pptx
深入理解MySQL开发性能优化.pptx,依旧上传baidu pan http://pan.baidu.com/s/1jIwGslS,视频暂未出,培训完成后会更新.
- 【MySql】赶集网mysql开发36条军规
[MySql]赶集网mysql开发36条军规 2012-05-14 14:02:33 分类: Linux 写在前面的话: 总是在灾难发生后,才想起容灾的重要性: 总是在吃过亏后,才记得曾经有人提醒 ...
- mysql开发中使用存储过程
在mysql开发中使用存储过程的理由: 当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的 mysql 执行语句是要先编译,然后再执行的.这样如果查询并发大的时候. ...
- [转载] 根据多年经验整理的《互联网MySQL开发规范》
原文: http://weibo.com/p/2304181380b3f180102vsg5 根据多年经验整理的<互联网MySQL开发规范> 写在前面:无规矩不成方圆.对于刚加入互联网的朋 ...
- [转发] 老叶观点:MySQL开发规范之我见
原文: http://imysql.com/2015/07/23/something-important-about-mysql-design-reference.shtml 老叶观点:MySQL开发 ...
- express框架+jade+bootstrap+mysql开发用户注册登录项目
完整的项目代码(github):https://github.com/suqinhui/express-demo express是基于Node.js平台的web应用开发框架,用express框架开发w ...
- MySQL开发指南
数据库开发是数据库管理系统(DBMS)和数据库应用软件设计研发的总称,数据运维.参与数据库生产环境的问题优化和解决等方面的事宜. 1.关于MySQL数据库 2.搭建MySQL环境 3.入门常用SQL. ...
- 第一篇:Win10系统搭建Python+Django+Nginx+MySQL 开发环境详解(完美版)
Win10+Python+Django+Nginx+MySQL 开发环境搭建详解 PaulTsao 说明:本文由作者原创,仅供内部参考学习与交流,转载引用请注明出处,用于商业目的请联系作者本人. Wi ...
随机推荐
- 87 GB 模型种子,GPT-4 缩小版,超越ChatGPT3.5,多平台在线体验
瞬间爆火的Mixtral 8x7B 大家好,我是老章 最近风头最盛的大模型当属Mistral AI 发布的Mixtral 8x7B了,火爆程度压过Google的Gemini. 缘起是MistralAI ...
- .NET周刊【12月第1期 2023-12-06】
国内文章 .NET 与 OpenEuler 共展翅,昇腾九万里 https://www.cnblogs.com/shanyou/p/17858385.html 本文介绍了openEuler操作系统,它 ...
- 字符集(Character Set)和编码(Encoding)的历史演化
字符集(Character Set)和编码(Encoding)是两个相关但不同的概念,它们在计算机和信息技术领域用于处理文本数据. 字符集(Character Set): 字符集是一种定义了一组字符. ...
- wangEditor出现初始化编辑器时候未传入任何参数,请查阅文档
wangEditor出现初始化编辑器时候未传入任何参数,请查阅文档 出现的原因可能是你未在初始视图.元素未创建.created.模态框.弹窗.抽屉中使用,你应该在div元素创建了再执行初始渲染, 解决 ...
- 去哪儿网 (Qunar) DevOps 实践分享
这是 2017 年王晓翔在 msup 全球软件案例研究峰会上的分享,重点分享了提高工程效率过程中存在的问题.取得的成果和要做的事情.内容详实,具有可操作性.我有幸看到了,所以在征得晓翔的同意下重新截图 ...
- 2021年中国DevOps现状调查报告发布!
摘要:为进一步了解和掌握DevOps在中国落地实践的现状和未来发展趋势,中国信息通信研究院依托云计算开源产业联盟,此次联合华为云DevCloud等40余家企业共同发起"2021年中国DevO ...
- 性能提升1400+倍,快来看MySQL Volcano模型迭代器的谓词位置优化详解
摘要:性能提升1400+倍,快来看MySQL Volcano模型迭代器的谓词位置优化详解. 本文分享自华为云社区<华为云数据库内核专家为您揭秘MySQL Volcano模型迭代器性能提升千倍的秘 ...
- 鸿蒙轻内核源码分析:Newlib C
摘要:本文介绍了LiteOS-M内核Newlib C的实现,特别是文件系统和内存分配释放部分,最后介绍了Newlib钩子函数. 本文分享自华为云社区<鸿蒙轻内核M核源码分析系列二十 Newlib ...
- 火山引擎DataTester上线「集成工作台」功能,助力企业打造专属AB平台
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 AB测试不仅是做增长的"利器",也是企业优化效率.增加决策精确度的有效工具.随着国内企业服务市 ...
- Codeforces Round #741 (Div. 2) 个人题解 A~D
比赛链接:Here 1562A. The Miracle and the Sleeper 题意: 给出 \(l,r\) 求出最大化的 \(a\ mod\ b\) (\(l\le b\le b\le a ...