关闭

Spring Boot Jpa 常用操作语句

标签: spring boot jpaspring data jpaSpring jpa基本操作语句Jpa基础概念
54人阅读 评论(0) 收藏 举报
分类:

什么是JPA?  


JPA ( The Java Persistence API )是用于访问,持久化和管理 Java 对象 /类与关系型数据库之间的数据交互的 Java 规范。 JPA 被定义为 EJB ( Enterprise JavaBeans ) 3.0 规范的一部分,作为 EJB 2 CMP 实体 Bean 规范的替代。

注意, JPA 只是一个标准,只定义了一系列接口,而没有具体的实现。很多企业级框架提供了对 JPA 的实现,如 Spring 。因此 Spring 本身与 JPA 无关,只是提供了对 JPA 的支持,因此在 Spring 中你也会看到很多注解都是属于 javax.persistence 包的。

JPA 允许 POJO( Plain Old Java Objects )轻松地持久化,而不需要类来实现 EJB 2 CM P 规范所需的任何接口或方法。 JPA 还允许通过注解或 XML 定义对象的关系映射,定义 Java 类如何映射到关系数据库表。 JPA 还定义了一个运行时 EntityManager API ,用于处理对象的查询和管理事务。 同时, JPA 定义了对象级查询语言 JPQL,以允许从数据库中查询对象,实现了对数据库的解耦合,提高了程序的可移植性,而不具体依赖某一底层数据库。

JPA 是 Java 持久化规范中的一个最新版本。第一个版本是 OMG 持久性服务 Java 绑定,但这个一个失败的产品,甚至没有任何商业产品支持它。接下来的版本是 EJB 1.0 CMP Entity Beans ,它已经非常成功地被大型 Java EE 提供程序( BEA , IBM )采用,但是它复杂性太高而且性能比较差。 EJB 2.0 CMP 试图通过引入本地接口来减少 Entity Bean 的一些复杂性,但是大多数复杂性仍然存在,而且缺乏可移植性。

历史总是要向前发展的,种种的这些使得 EJB 3.0 规范将降低复杂性作为主要目标,这导致规范委员会沿着 JPA 的路径前进。 JPA 旨在统一 EJB 2 CMP , JDO , Hibernate ,从目前来看, JPA 的确取得了成功。

目前大多数持久化供应商已经发布了 JPA 的实现,并被行业和用户采用。这些包括 Hibernate (由 JBoss 和 Red Hat 收购), TopLink (由 Oracle 收购)和 Kodo JDO (由 BEA 和 Oracle 收购)。其他支持 JPA 的产品包括 Cocobase (由 Thought Inc. 收购)和 JPOX 。



JPA的基本操作语句


 //And --- 等价于 SQL 中的 and 关键字,比如 findByHeightAndSex(int height,char sex);  
 public List<User> findByHeightAndSex(int height,char sex);  
  
// Or --- 等价于 SQL 中的 or 关键字,比如 findByHeightOrSex(int height,char sex);  
 public List<User> findByHeightOrSex(int height,char sex);  
  
 //Between --- 等价于 SQL 中的 between 关键字,比如 findByHeightBetween(int min, int max);  
 public List<User> findByHeightBetween(int min,int max);  
  
 //LessThan --- 等价于 SQL 中的 "<",比如 findByHeightLessThan(int max);  
 public List<User> findByHeightLessThan(int max);  
  
 //GreaterThan --- 等价于 SQL 中的">",比如 findByHeightGreaterThan(int min);  
 public List<User> findByHeightGreaterThan(int min);  
  
 //IsNull --- 等价于 SQL 中的 "is null",比如 findByNameIsNull();  
 public List<User> findByNameIsNull();  
  
 //IsNotNull --- 等价于 SQL 中的 "is not null",比如 findByNameIsNotNull();  
 public List<User> findByNameIsNotNull();  
  
 //NotNull --- 与 IsNotNull 等价;  
 public List<User> findByNameNotNull();  
  
 //Like --- 等价于 SQL 中的 "like",比如 findByNameLike(String name);  
 public List<User> findByNameLike(String name);  
  
 //NotLike --- 等价于 SQL 中的 "not like",比如 findByNameNotLike(String name);  
 public List<User> findByNameNotLike(String name);  
  
 //OrderBy --- 等价于 SQL 中的 "order by",比如 findByNameNotNullOrderByHeightAsc();  
 public List<User>findByNameNotNullOrderByHeightAsc();  
  
 //Not --- 等价于 SQL 中的 "! =",比如 findByNameNot(String name);  
 public List<User> findByNameNot(String name);  
  
 //In --- 等价于 SQL 中的 "in",比如 findByNameIN(String name);  
 public List<User> findByNameIn(String name);  
  
 //NotIn --- 等价于 SQL 中的 "not in",比如 findByNameNotIN(String name);  
 public List<User> findByNameNotIn(String name);  



 原生Sql语句


   //利用原生的SQL进行查询操作  
   @Query(value = "select o.* from orders o ,user u where o.uid=u.id and u.name=?1", nativeQuery = true)  
   @Modifying  
   public List<Order> findOrderByName(String name);  
  
   //利用原生的SQL进行删除操作  
   @Query(value = "delete from orders where id=?1 ", nativeQuery = true)  
   @Modifying  
   public void deleteOrderById(int id);  
  
   //利用原生的SQL进行删除操作  
   @Query(value = "delete from orders where uid=?1 ", nativeQuery = true)  
   @Modifying  
   public void deleteOrderByUId(int uid);  
  
   //利用原生的SQL进行修改操作  
   @Query(value = "update orders set name=?1 where id=?2 ", nativeQuery = true)  
   @Modifying  
   public void updateOrderName(String name,int id);  
  
   //利用原生的SQL进行插入操作  
   @Query(value = "insert into orders(name,uid) value(?1,?2)", nativeQuery = true)  
   @Modifying  
   public void insertOrder(String name,int uid);

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:400次
    • 积分:97
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章存档