对于总是使用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. 数据流管理:redux

    redux和react是两个独立的库,所以redux并不是非用不可,是在Flux框架的基础上改进的一个框架,所以一鸣惊人 redux的三大基本原则 唯一的数据源(single source of tr ...

  2. linux简介及虚拟机安装

    1.简介 计算机组成

  3. 《深入理解Spring Cloud与微服务构建》书籍目录

    转载请标明出处: https://blog.csdn.net/forezp/article/details/79735542 本文出自方志朋的博客 作者简介 方志朋,毕业于武汉理工大学,CSDN博客专 ...

  4. java8新特性学习1

    java8增加了不少新特性,下面就一些常见的新特性进行学习... 1.接口中的方法 2.函数式接口 3.Lambda表达式 4.java8内置的四大核心函数式接口 5.方法引用和构造器引用 6.Str ...

  5. 监控tomcat工具使用

    用LambdaProbe监控Tomcat 简介: Lambda Probe(以前称为Tomcat Probe)是一款实时监控和管理的Apache Tomcat实例的基本工具.Lambda Probe ...

  6. 肝题与oj

    oier很多,oj也很多,这些oj分别有怎样的特点,我们又该怎样选择呢?请各位客官听在下分解 (我主要说一些比较大众的oj) (注意:难度与界面友好度为个人意见,不喜勿喷) 1.入门级 1.NOIop ...

  7. zabbix service安装配置

    1.安装时间同步 yum -y install ntpdate systemctl start ntpdate.service systemctl enable ntpdate.service 2.安 ...

  8. conda 安装 graph-tool, 无需编译

    1. 添加以下channels到~/.condarc $ conda config --add channels conda-forge $ conda config --add channels o ...

  9. 分别使用原生js和jQuery添加/删除元素的class属性

    一.原生js添加/删除元素的class属性: <!-- span元素原有class = "test" --> <span class="test&quo ...

  10. dom技术解析xml (php)

    1.xml实例 test.xml <?xml version="1.0" encoding="utf-8"?><!DOCTYPE 班级 SYS ...