- 浏览: 140227 次
文章分类
- 全部博客 (149)
- Java (41)
- 设计模式 (23)
- php (2)
- C++ (2)
- Linux (6)
- C (1)
- JavaEE (27)
- javascript (2)
- uplodify (1)
- Mybatis (2)
- Maven (4)
- Lucene (3)
- commons (1)
- Spring (7)
- SQL (3)
- mahout (1)
- MySQL (2)
- extjs4.2.1 (2)
- ubuntu (1)
- hadoop (1)
- hibernate (1)
- Spring JPA (2)
- JPA 2.0 (1)
- express (1)
- redis (2)
- angularjs (1)
- git (1)
- Python (1)
- logging (2)
最新评论
-
xlaohe1:
controller返回的是一个POJO对象,然后用@Resp ...
Spring MVC 4.X ResponseBody 日期类型Json 处理 -
TRAMP_ZZY:
能帮到你,我也很高兴。
Spring MVC 4.X ResponseBody 日期类型Json 处理 -
jobzjc:
第一段有帮到我。如果是非对象,Object方式传递的时候,第一 ...
Spring MVC 4.X ResponseBody 日期类型Json 处理 -
TRAMP_ZZY:
dingran 写道为什么,我怎么就没找到System > ...
Ubuntu 12.04 设置 IBus 开机启动 -
dingran:
为什么,我怎么就没找到System >> Pref ...
Ubuntu 12.04 设置 IBus 开机启动
[url][/url]
1. Sping Data JPA 创建查找的顺序
a. CREATE attempts to construct a store-specific query from the query method name. The general approach is to remove a given set of well-known prefixes from the method name and parse the rest of the method. Read more about query construction in the section called “Query creation”.
b. USE_DECLARED_QUERY tries to find a declared query and will throw an exception in case it can't find one. The query can be defined by an annotation somewhere or declared by other means. Consult the documentation of the specific store to find available options for that store. If the repository infrastructure does not find a declared query for the method at bootstrap time, it fails.
c. CREATE_IF_NOT_FOUND (default) combines CREATE and USE_DECLARED_QUERY. It looks up a declared query first, and if no declared query is found, it creates a custom method name-based query. This is the default lookup strategy and thus will be used if you do not configure anything explicitly. It allows quick query definition by method names but also custom-tuning of these queries by introducing declared queries as needed.
2. 查询创建机制
(1) 有用的前缀 find…By, read…By, query…By, count…By, and get…By,同时可以在查询语句前面加上 Distinct 来创建语句。
(2) 查询方法的创建
http://docs.spring.io/spring-data/jpa/docs/1.6.0.RELEASE/reference/html/index.html
1. Sping Data JPA 创建查找的顺序
a. CREATE attempts to construct a store-specific query from the query method name. The general approach is to remove a given set of well-known prefixes from the method name and parse the rest of the method. Read more about query construction in the section called “Query creation”.
b. USE_DECLARED_QUERY tries to find a declared query and will throw an exception in case it can't find one. The query can be defined by an annotation somewhere or declared by other means. Consult the documentation of the specific store to find available options for that store. If the repository infrastructure does not find a declared query for the method at bootstrap time, it fails.
c. CREATE_IF_NOT_FOUND (default) combines CREATE and USE_DECLARED_QUERY. It looks up a declared query first, and if no declared query is found, it creates a custom method name-based query. This is the default lookup strategy and thus will be used if you do not configure anything explicitly. It allows quick query definition by method names but also custom-tuning of these queries by introducing declared queries as needed.
2. 查询创建机制
(1) 有用的前缀 find…By, read…By, query…By, count…By, and get…By,同时可以在查询语句前面加上 Distinct 来创建语句。
(2) 查询方法的创建
@Repository public class UserDaoImpl implements UserDao { @PersistenceContext private EntityManager entityManager; @Override public User findByName(String name) { TypedQuery<User> query = this.entityManager.createQuery("select u from User u where u.name = :name", User.class); query.setParameter("name", name); return query.getSingleResult(); } @Override public List<User> findAll() { TypedQuery<User> query = this.entityManager.createQuery("select u from User u", User.class); return query.getResultList(); } @Override public void saveOrUpdate(User user) { this.entityManager.persist(user); } } @NoRepositoryBean public interface AbstractRepository<T extends AbstractEntity> extends Repository<T, Long> { @Query("select t from #{#entityName} t where t.id = ?1") List<T> findAllById(Long id); } @MappedSuperclass public class AbstractEntity { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; /** * Returns the identifier of the entity. * * @return the id */ public Long getId() { return id; } /* * (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (this.id == null || obj == null || !(this.getClass().equals(obj.getClass()))) { return false; } AbstractEntity that = (AbstractEntity) obj; return this.id.equals(that.getId()); } /* * (non-Javadoc) * @see java.lang.Object#hashCode() */ @Override public int hashCode() { return id == null ? 0 : id.hashCode(); } @Override public String toString() { return ToStringBuilder.reflectionToString(this); } }
public interface UserRepository extends Repository<User, Integer>, UserRepositoryCustom { List<User> findByNameAndEmail(String name, String email); // Enable the distinct flag for the query List<User> findDistinctUserByNameOrEmail(String name, String email); List<User> findUserDistinctUserByNameOrEmail(String name, String email); // Enabling ignoring case for an individual property List<User> findByNameIgnoreCase(String name); // Enabling static ORDER BY for a query List<User> findByNameAndEmailAllIgnoreCase(String name, String email); // Enabling static ORDER BY for a query @Lock(LockModeType.READ) List<User> findByNameOrderByUserIdAsc(String name); List<User> findByNameOrderByUserIdDesc(String name); Page<User> findByNameLike(String name, Pageable pageable); List<User> findByNameLike(String name, Sort sort); // User @Query @Query("select u from User u where u.email = ?1") User findByEmail(String email); @Query("select u from User u where u.name like %?1") List<User> findByNameEndsWith(String name); //User @Query to execute Navtie Query @Query(value = "select * from user where email = ?0", nativeQuery = true) User findByEmailAddress(String email); // Modify @Modifying(clearAutomatically = true) @Query("update User u set u.name = ?1 where u.id = ?2") int setFixedNameFor(String name, Integer id); }
/* * 选用CrudRepository 接口是为了暴露方法,因为默认的SimpleJpaRepository 已经实现了很多方法 * 必须暴露出来,才能调用 */ public interface ProductRepository extends CrudRepository<Product, Long>{ public abstract Page<Product> findByDescriptionContaining(String description, Pageable pageable); @Query("select p from Product p where p.attributes[?1] = ?2") public abstract List<Product> findByArrtibuteAndValue(String attribute, String value); public abstract Long countByName(String name); public List<Product> findByName(String name); }
public interface DocumentRepository extends JpaRepository<Document, Integer>, CrudRepository<Document, Integer>{ List<Document> findByDocName(String docName); @Query(value="select d from Document d where d.docType=:docType") public Document findByDocType(@Param("docType") Byte docType); public List<Document> findByUploadAuthorLike(String uploadAuthor); @Query("select d from Document d where d.author=:author") public List<Document> findByAuthorLike(String author); public List<Document> findByDocTypeBetween(Byte begin, Byte end); }
@Repository @Transactional(readOnly = true) public class JpaCustomerDaoImpl implements CustomerDao { @PersistenceContext private EntityManager em; @Override @Transactional public Customer save(Customer customer) { if (customer.getId() != null) { em.persist(customer); return customer; } else { return em.merge(customer); } } @Override public Customer findByEmailAddress(EmailAddress emailAddress) { String sql = " select c from Customer c where c.emailAddress = :emailAddress"; TypedQuery<Customer> query = em.createQuery(sql, Customer.class); query.setParameter("emailAddress", emailAddress); return query.getSingleResult(); } }
http://docs.spring.io/spring-data/jpa/docs/1.6.0.RELEASE/reference/html/index.html
发表评论
-
ServletContainerInitializer 初始化器
2016-08-24 14:29 5105概述 为了实现不通过web ... -
Tomcat 7.X 配置https
2014-11-10 11:47 495http://tomcat.apache.org/t ... -
Spring 4.0.3+JPA(hibernate 4.3.5Final 实现)+Maven 配置文件入门实例
2014-06-27 09:42 3307本案例是基于Spring 实现的JPA实例。JPA为SUN公 ... -
Spring 4.0.3+Hibernate4.3.5+Maven 配置文件
2014-06-21 09:43 2298<?xml version="1.0&qu ... -
JavaEE Filter和Listener 分析
2014-02-18 14:18 7911. Filter 使程序可以改变 ... -
Servlet 3.0 文件上传新特性
2014-02-15 21:55 511Servlet 3.0 实现了文件上传的功能,通过注解的方式指 ... -
ServletContext 与ServletConfig剖析
2014-02-15 20:44 6471. ServletContext 是一个全局的储存信息的空间 ... -
JavaMail Spring Mail支持
2014-02-15 15:54 7851. 普通的JavaMail 发送和接受邮件 public ... -
Jdbc 数据库连接池简易实现和JdbcUtils
2014-01-20 16:42 705public class MyDataSource { ... -
Java反射将Jdbc查询结果封装为对象
2014-01-19 10:24 1281public class ORMTest { pu ... -
Spring JdbcTemplate CRUD 操作
2014-01-11 12:12 932/** * Project Name:cjxy ... -
JavaEE 下载文件中文乱码兼容多浏览器
2013-12-11 11:02 503public static String encodeF ... -
Spring 3.2.* MVC通过Ajax获取JSON数据报406错误
2013-09-12 12:13 634Spring 3.2.* MVC通过Ajax获取JSON数据报 ... -
Spring SqlQuery 使用
2013-09-11 17:52 690/** * Project Name:webblog ... -
JavaEE pager-taglib 分页插件(2)
2013-08-12 17:56 438/** * Project Name:TestPag ... -
JavaEE pager-taglib 分页插件(1)
2013-08-12 16:47 1131pg:pager 这个标签用来 ... -
Web 安全与 过滤器
2013-06-03 16:51 7671. Servlet 安全的四大要 ... -
JSP学习笔记二
2013-06-03 15:36 7741. JSP 标准动作获取 Jav ... -
JSP学习笔记一
2013-05-24 16:26 7871. JSP 最终还是会变成一个完整的Servlet 在W ... -
Servlet学习笔记(二)
2013-05-23 17:30 6991. Servlet 的初始化参数 配置: < ...
相关推荐
spring data jpa 实例源码 spring data jpa 实例源码 spring data jpa 实例源码
在这个实例中,我们将会深入理解SpringDataJPA如何与SpringBoot结合,实现数据库的增删改查(CRUD)操作以及实体之间的关联关系处理。 首先,SpringBoot是Spring框架的轻量级启动器,它自动配置了大量常见应用的...
'SpringDataJPA从入门到精通'分为12章 内容包括整体认识JPA、JPA基础查询方法、定义查询方法、注解式查询方法、@Entity实例里面常用注解详解、JpaRepository扩展详解、JPA的MVC扩展REST支持、DataSource的配置、乐观...
在本项目中,我们主要探讨如何手动构建一个基于SpringMVC、Spring Data JPA、Hibernate以及FreeMarker模板引擎的Maven工程,同时实现环境切换功能。这个基础框架为日常开发工作提供了必要的支持。 首先,SpringMVC...
【Spring Data JPA 入门实例】 Spring Data JPA 是 Spring 框架的一个模块,它简化了数据库访问层(DAO)的开发,通过提供自动化的 Repository 实现,使得开发者无需编写大量的 CRUD(创建、读取、更新、删除)代码...
Spring Data JPA是Spring框架的一部分,主要简化了数据访问层(Repository层)的代码开发,它提供了一种简便的方式来实现数据访问层的接口。Spring Data JPA 1.4.2版本的官方参考文档详细介绍了如何使用Spring Data ...
在这个实例中,我们将深入探讨如何利用Spring Data JPA进行基本的CRUD(创建、读取、更新、删除)操作,登录验证,以及分页查询。 首先,我们需要在项目中引入Spring Data JPA的相关依赖,这通常在Maven或Gradle的...
这个入门项目实例旨在帮助开发者快速掌握Spring Data JPA的基本用法和核心概念,通过实际案例进行学习和交流。 在Spring Data JPA中,你可以避免大量编写SQL语句和手动管理实体对象的状态,因为Spring Data JPA为你...
Spring Data JPA 是一个强大的框架,它简化了与Java Persistence API (JPA)的交互,提供了对数据库操作的便捷抽象。1.7.0.RELEASE 版本的文档由 Oliver Gierke、Thomas Darimont 和 Christoph Strobl 编写,并由 ...
Spring Data JPA是Spring框架的一个模块,用于简化Java Persistence API(JPA)的使用,它提供了数据访问的抽象层,让开发者能够以更简洁的方式与数据库进行交互。本入门例子将帮助你理解并掌握Spring Data JPA的...
在这个"Spring+Spring MVC+SpringData JPA整合完成增删改查,翻页实例"中,我们将深入探讨这三个组件如何协同工作,实现高效的数据管理与用户交互。 首先,Spring MVC是Spring框架的一个模块,专门用于构建Web应用...
在本项目中,我们探索的是一个基于2017年技术栈的Java Web应用程序实例,主要涉及Spring Data JPA、Spring 4.2、Spring MVC和Hibernate 4.3。这些技术是Java开发中的核心组件,尤其在企业级应用开发中广泛使用。下面...
首先,我们需要导入`org.springframework.data.jpa.domain.Specifications`包,并创建一个`Specification`实例。例如,如果我们有一个`User`实体类,我们想根据用户名进行查询,可以这样做: ```java public class ...
Spring Data JPA 是一个由 Spring 框架提供的强大库,它极大地简化了基于 Java Persistence API (JPA) 的数据库访问。JPA 是 Java 平台上的标准 ORM(对象关系映射)规范,允许开发者使用面向对象的方式处理数据库...
本项目“springData-jpa-demo”旨在提供一个示例,帮助开发者理解如何在实践中应用Spring Data JPA。 首先,Spring Data JPA 是Spring框架的一部分,它为ORM(对象关系映射)工具如Hibernate提供了高级抽象层。通过...
在Spring Data JPA中,Spring负责管理Repository实例,通过@Autowired注解,我们可以自动将Repository注入到需要的地方,无需手动创建。同时,Spring的事务管理也与Spring Data JPA紧密结合,通过@Transactional注解...
### Spring-data-jpa 的核心知识点解析 #### 一、Spring-data-jpa 基本介绍 Spring-data-jpa 是 Spring 家族中的一个重要成员,它主要用于简化基于 Java Persistence API (JPA) 的数据访问层(DAO)的开发工作。...
5. **启动服务**:Spring Boot 应用启动后,Spring Data JPA 会自动扫描并创建 Repository 实例。 【查询方法的创建】 1. **自动查询方法**:Spring Data JPA 可以根据方法名自动解析生成对应的 SQL。例如,`...
《SpringDataJpa整合FreeMarker源码解析》 在当今的软件开发中,Spring Boot、Spring Data JPA和FreeMarker的整合已经成为了构建高效、简洁Web应用的常见选择。本篇将深入探讨如何将这三个强大的工具结合在一起,...