spring-data-jpa 简单使用心得
对于总是使用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 简单使用心得的更多相关文章
- Spring Data JPA 简单查询--接口方法
一.接口方法整理速查 下表针对于简单查询,即JpaRepository接口(继承了CrudRepository接口.PagingAndSortingRepository接口)中的可访问方法进行整理.( ...
- JAVA入门[20]-Spring Data JPA简单示例
Spring 对 JPA 的支持已经非常强大,开发者只需关心核心业务逻辑的实现代码,无需过多关注 EntityManager 的创建.事务处理等 JPA 相关的处理.Spring Data JPA更是 ...
- Spring Data JPA简单使用
用Spring Data JPA操作数据库 这份教程教你用Spring Data JPA从关系数据库mysql中存储和提取数据.总结来自https://spring.io/guides/gs/acce ...
- spring data jpa 简单使用
通过解析方法名创建查询 通过前面的例子,读者基本上对解析方法名创建查询的方式有了一个大致的了解,这也是 Spring Data JPA 吸引开发者的一个很重要的因素.该功能其实并非 Spring Da ...
- Spring Data JPA简单查询接口方法速查
下表针对于简单查询,即JpaRepository接口(继承了CrudRepository接口.PagingAndSortingRepository接口)中的可访问方法进行整理.(1)先按照功能进行分类 ...
- Spring Data Jpa简单了解
原文来源:http://www.cnblogs.com/xuyuanjia/p/5707681.html 以下是自己简单整理原有文章,其实就是在原来文章基础上化重点以及可能会有所删减的方式进行整理,需 ...
- Spring Data JPA 简单查询--方法定义规则
一.常用规则速查 1 And 并且2 Or 或3 Is,Equals 等于4 Between 两者之间5 LessThan 小于6 LessThanEqual 小于等于7 Gre ...
- Spring Data JPA 简单查询
一.常用规则速查 1 And 并且2 Or 或3 Is,Equals 等于4 Between 两者之间5 LessThan 小于6 LessThanEqual 小于等于7 Gre ...
- Spring Data Jpa 简单使用事务
对于两张表,需要顺序操作,必须全部表均操作成功才可,否则两张表不操作. 例如,现在有device,collectionpoint两张表,向两张表顺序执行insert操作 SQL如下 INSERT IN ...
- 【jpa】spring data jpa 配置使用
1.spring data jpa 简单介绍 jpa是用于对象持久化的API,jpa是一种规范,而其他的ORM框架(hibernate,topLink等)是其实现,所以jpa可以使用不同的实现方式,修 ...
随机推荐
- Selenium处理页面---弹窗、表格、鼠标悬停、frame、下拉框、上传文件
一.Selenium测试-常用页面处理 1.概述 UI自动化测试(GUI界面层):UI层是用户使用产品的入口,所有功能通过这一层提供给用户,测试工作大多集中在这一层,常见的测试工具有UFT.Robot ...
- 访问oracle数据库
如果是本地 :sqlplus system/xxx(用户名/密码) 远程到服务器, sqlplus system/xxx(用户名/密码) @IP:port/orcl(orcl为数据库实例)
- jQuery编程代码规范的最佳实践
好像是feedly订阅里看到的文章,读完后觉得非常不错,译之备用,多看受益. 加载jQuery 1.坚持使用CDN来加载jQuery,这种别人服务器免费帮你托管文件的便宜干嘛不占呢.点击查看使用C ...
- Object C学习笔记20-结构体(转)
在学习Object C中的过程中,关于struct的资料貌似非常少,查阅了C方面的资料总结了一些学习心得! 一. 定义结构 结构体是一种数据类型的组合和数据抽象.结构体的定义语法如下: struct ...
- iOS之一些实用的Demo
图像浏览及处理 FLAnimatedImage - gif播放处理的工具. CLImageEditor - 超强的图片编辑库,快速帮你实现旋转,防缩,滤镜等等一系列麻烦的事情. ios-image-f ...
- Angularjs基础(五)
AngularJS Select(选项框) AngularJS 可是使用数组或对象创建一个下拉列表选项.使用ng-options创建选项框 在AngularJS 中我们可以使用ng-option指令来 ...
- display:flex 布局之 骰子
代码部分 html <body> <div class="box"> <div class="a a1"> <span ...
- kali linux 中文出现乱码问题的解决
确定locales已经安装,用”apt-get install locales”命令:之后可用”locale -a”查看当前系统支持的字符集. 1. 在命令行输入”dpkg-reconfigure l ...
- 编译安装开源免费中文分词scws
一.SCWS了解一下: SCWS 是 Simple Chinese Word Segmentation 的首字母缩写(即:简易中文分词系统). 这是一套基于词频词典的机械式中文分词引擎,它能将一整段的 ...
- IDEA中使用插件添加更多可选择的主题,使代码高亮,缓解视觉疲劳
1.点击 File-->settings(或Ctrl+Shift+S)打开IDE设置面板 点击plugins-->右侧选择Marketplace-->搜索框中输入Material-- ...