对于总是使用mybatis的我,突发奇想的想使用spring-data-jpa搭一个小环境,这几天处处碰壁,现总结如下:

环境采用springboot

maven需要导入:

       <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>

application.yml简单配置:

spring:
jpa:
hibernate:
ddl-auto: update
show-sql: true
database-platform: org.hibernate.dialect.MySQL5Dialect
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/blog?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
username: jmper
password: jmper_ming
tomcat:
max-active: 100
max-idle: 200
initial-size: 20

下面具体使用jpa:

 package com.jmper.blog.entity;

 import lombok.Data;

 import javax.persistence.*;
import java.io.Serializable;
import java.time.LocalDateTime; /**
* 留言
*
* @author jmper
* @version 1.0 (createTime:2018-06-18 17:32:57)
*/
@Data
@Entity
@Table(name = "j_message")
public class Message implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "name",nullable = false,length = 10)
private String name;
@Column(name = "email",nullable = false,length = 30)
private String email;
@Column(name = "content",nullable = false,columnDefinition = "TEXT")
private String content;
@Column(name = "create_time",nullable = false,columnDefinition = "DATETIME")
private LocalDateTime createTime; }

@Entity 标识这是一个orm实体类

@Table 设置映射表名

@Data lombok 注解

@Id标注在主键上,

@GeneratedValue 设置主键生成策略

JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO.

  • TABLE:使用一个特定的数据库表格来保存主键。
  • SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。
  • IDENTITY:主键由数据库自动生成(主要是自动增长型)
  • AUTO:主键由程序控制(也是默认的,在指定主键时,如果不指定主键生成策略,默认为AUTO)

请根据实际合理选择主键生成策略

Dao层开发:

1、Repository<T, ID>  父接口

2、CrudRepository<T, ID> extends Repository<T, ID>   增删改查接口

3、QueryByExampleExecutor   根据实例 查询4、PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID>   分页接口

5、JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T>    jpa子接口,包括所有父接口功能

平时采用直接实现JpaRepository接口

例如:

package com.jmper.blog.dao;

import com.jmper.blog.entity.Message;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository; /**
* 留言
*
* @author jmper
* @version 1.0 (createTime: 2018-06-19 09:25:25)
*/
public interface MessageRepository extends JpaRepository<Message, Integer> { /**
* 整体分页
*
* @param pageable 分页
* @return 分页
*/
@Override
Page<Message> findAll(Pageable pageable);
}

此接口中默认存在一套基础curd命令,同时也可以根据特殊的方法名解析成相应的sql语句

例如: findById,  findByIdAndEmail 等

如果想自定义sql语句,可以采用@query注解

并利用HQL来编写sql语句,但是HQL不支持limit关键字,需要使用 Pageable参数进行分页处理

Pageable pageable = PageRequest.of(p-1, ps);

或者加上 排序

Sort sort=Sort.by(Sort.Direction.ASC,"field");
Pageable pageable = PageRequest.of(p-1, ps,sort);

也可以使用本地sql

   @Query("select m from Message m where m.name=:name")
List<Message> findMessagesByName(@Param("name") String name); @Query("select m from Message m where m.id=?1")
List<Message> findMessagesById(Integer id,Pageable pageable);
@Query(value = "select m.* from j_message m where m.id=?1",nativeQuery = true)
List<Message> findMessagesByNativeId(Integer id,Pageable pageable);

需要注意的是:对于返回非Message 也就是,想要返回自定义对象类型(DTO)我采用的方法是hql+new,

因为jpa不支持自定义返回类型。

    @Query(value = "select new com.jmper.blog.dto.MessageDto(m) from Message m where m.id=?1")
List<MessageDto> findMessagesByNativeId(Integer id,Pageable pageable);

spring-data-jpa 简单使用心得的更多相关文章

  1. Spring Data JPA 简单查询--接口方法

    一.接口方法整理速查 下表针对于简单查询,即JpaRepository接口(继承了CrudRepository接口.PagingAndSortingRepository接口)中的可访问方法进行整理.( ...

  2. JAVA入门[20]-Spring Data JPA简单示例

    Spring 对 JPA 的支持已经非常强大,开发者只需关心核心业务逻辑的实现代码,无需过多关注 EntityManager 的创建.事务处理等 JPA 相关的处理.Spring Data JPA更是 ...

  3. Spring Data JPA简单使用

    用Spring Data JPA操作数据库 这份教程教你用Spring Data JPA从关系数据库mysql中存储和提取数据.总结来自https://spring.io/guides/gs/acce ...

  4. spring data jpa 简单使用

    通过解析方法名创建查询 通过前面的例子,读者基本上对解析方法名创建查询的方式有了一个大致的了解,这也是 Spring Data JPA 吸引开发者的一个很重要的因素.该功能其实并非 Spring Da ...

  5. Spring Data JPA简单查询接口方法速查

    下表针对于简单查询,即JpaRepository接口(继承了CrudRepository接口.PagingAndSortingRepository接口)中的可访问方法进行整理.(1)先按照功能进行分类 ...

  6. Spring Data Jpa简单了解

    原文来源:http://www.cnblogs.com/xuyuanjia/p/5707681.html 以下是自己简单整理原有文章,其实就是在原来文章基础上化重点以及可能会有所删减的方式进行整理,需 ...

  7. Spring Data JPA 简单查询--方法定义规则

    一.常用规则速查 1  And 并且2  Or  或3  Is,Equals 等于4  Between  两者之间5  LessThan 小于6  LessThanEqual   小于等于7  Gre ...

  8. Spring Data JPA 简单查询

    一.常用规则速查 1  And 并且2  Or  或3  Is,Equals 等于4  Between  两者之间5  LessThan 小于6  LessThanEqual   小于等于7  Gre ...

  9. Spring Data Jpa 简单使用事务

    对于两张表,需要顺序操作,必须全部表均操作成功才可,否则两张表不操作. 例如,现在有device,collectionpoint两张表,向两张表顺序执行insert操作 SQL如下 INSERT IN ...

  10. 【jpa】spring data jpa 配置使用

    1.spring data jpa 简单介绍 jpa是用于对象持久化的API,jpa是一种规范,而其他的ORM框架(hibernate,topLink等)是其实现,所以jpa可以使用不同的实现方式,修 ...

随机推荐

  1. 6.Spring Cloud初相识-------Zool路由

    前言: 在生产环境中,我们不可能将每个服务的真实信息暴漏出去,因为这样太不安全. 我们会选择使用路由代理真实的服务信息,由它负责转发给真实的服务. 新建一个Zool: 1.添加依赖 <?xml ...

  2. iOS Xcode 小技巧,提升理解查询能力,Command + 点击鼠标右键 Jump to Definition等

    前言: 介绍下Xcode 小技巧,以及一下快捷键,让你调试程序更加出类拔萃,安排! Command + 点击鼠标右键 Jump to Definition,可能你平时也在用,但是你明白全部的用法吗,试 ...

  3. Form表单之复选框checkbox操作

    input复选(checkbox): <label>input复选1组:</label> <input type="checkbox" name=&q ...

  4. ABAP术语-Business Object

    Business Object 原文:http://www.cnblogs.com/qiangsheng/archive/2008/01/07/1028364.html Represents a ce ...

  5. 基于SpringBoot+SpringSecurity+mybatis+layui实现的一款权限系统

    这是一款适合初学者学习权限以及springBoot开发,mybatis综合操作的后台权限管理系统 其中设计到的数据查询有一对一,一对多,多对多,联合分步查询,充分利用mybatis的强大实现各种操作, ...

  6. css实现下拉菜单功能(多中实现方式即原理)

    引导思路: 1.需要用到的元素:position hover (z-index)  或(overflow)或(display)等等. 关键点就是div的溢出部分的处理. 2.实现过程: 2.1:就是要 ...

  7. Python起源与发展

    Python的创始人为吉多*范罗苏姆(Gudio van Rossum) 1.1989年的圣诞节期间,吉多*范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的解释程序,作为ABC语言的一种继承. 2. ...

  8. 搞笑入群二维码在线生成源码 php图片合成并添加文字水印

    在凤凰网看到一篇文章:微信群二维码也能“整人”,99%的好友会中招!感觉挺好玩,所以自己也想做一个! 冷静分析

  9. Tomcat+nginx+keepalived+memcached实现双VIP负载均衡及Session会话保持

    准备好tomcat 第一台 tar vxf apache-tomcat-7.0.54.tar.gz mv apache-tomcat-7.0.54 /usr/local/tomcat tar vxf ...

  10. C语言Windows程序开发—CreateWindow函数介绍【第03天】

    (一)CreateWindow函数的参数介绍: HWND CreateWindow( LPCTSTR lpClassName, //Windows窗口中预定义的控件结构体,包括:BUTTON(按钮), ...