本文记录学习使用spring data jpa访问数据库

一 什么是Spring Data JPA

  JPA(Java Persistence API)是Sun官方提出的Java持久化规范。它为Java开发人员提供了一种对象、关联映射工具来管理Java应用中的关系数据。主要是为了简化现有的持久化开发工作和整合ORM技术,对不同的ORM框架提供统一的规范标准。

  Spring Data JPA 是Spring基于Hibernate框架和JPA(Java Persistence API)规范的基础上封装的一套JPA应用框架,它提供了增、删、改、查等一些常用得方法供开发者调用,可以轻松实现实现对数据的访问和操作。

二 简单示例

  要使用spring data jpa,我们首先需要在pom.xml中引入所需要的依赖jar包

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency> <dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>

  在application.properties文件配置数据源连接信息

#驱动
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test
#用户
spring.datasource.username=root
#密码
spring.datasource.password=123456
#ddl create:不论数据库表有没有都是创建,update:当表存在时更新,不存在是创建
spring.jpa.properties.hibernate.hbm2ddl.auto=update
#方言
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect
#输出SQL
spring.jpa.show-sql=true
#对SQL格式化
spring.jpa.properties.hibernate.format_sql=true

  创建一个实体对象,完成与数据库表之间的映射

@Entity
@Table(name="t_user")
public class UserInfo { @Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "name", nullable = true, length = 30)
private String name;
@Column(name="age", nullable = true, length = 3)
private Integer age; public UserInfo() {
} public UserInfo(String name, Integer age) {
this.name = name;
this.age = age;
} @Override
public String toString() {
return "UserInfo{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
} //省略getter和setter
}
@Entity 说明当前类为一个实体类,默认属性name可以不输入,默认就是当前类名
@Table(name="t_user") 说明当前类映射的数据库表是t_user
@Id 说明该字段是表的主键
@GeneratedValue(strategy = GenerationType.AUTO) 说明主键的生成策略是 GenerationType.*,*有AUTO、INDENTITY、SEQUENCE 和 TABLE可供选择
@Column(name = "name", nullable = true, length = 30) 说明当前字段在数据库表中对应的列属性,name:表中的列名,nullable:允许为空,length:长度不超过30

  前边已经说过了,Spring Data JPA 已经给我们提供了具体的接口供调用,所以只需要继承他的方法来使用就可以了,创建接口并继承JpaRepository

public interface UserRepository extends JpaRepository<UserInfo, Long> {

}

  在IDEA中打开类图(如上图),可以看到我们继承的JpaRepository 通过继承关系已经有了增删该查(CrudRepository)和分页排序(PagingAndSortingRepository),所以我们的UserRspository也就有了对应的方法

三 测试 

  使用Junit做个简单的测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class JpaApplicationTests { @Resource
private UserRepository userRepository; /**
* 保存用户信息
*/
@Test
public void save() {
UserInfo user = new UserInfo("卢俊义", 3);
userRepository.save(user);
} /**
* 根据ID删除
*/
@Test
public void delete() {
long id = 3;
userRepository.deleteById(id);
} /**
* 修改
*/
@Test
public void update() {
UserInfo user = new UserInfo();
user.setId(Long.valueOf(3));
user.setName("老卢");
user.setAge(5);
userRepository.saveAndFlush(user);
} /**
* 根据ID查询
*/
@Test
public void selectById() {
long id = 3;
UserInfo user = userRepository.findById(id).get();
System.out.println(user);
} /**
* 查询所有
*/
@Test
public void selectAll() {
List<UserInfo> userList = userRepository.findAll();
System.out.println(userList);
} /**
* 根据Id倒序查询
*/
@Test
public void selectAllOrder() {
Sort sort = new Sort(Sort.Direction.DESC, "id");
List<UserInfo> userList = userRepository.findAll(sort);
System.out.println(userList);
} @Test
public void pageSelect() {
int currentPage = 1;
int pageSize = 2;
//分页查询
Pageable page = PageRequest.of(currentPage, pageSize);
Page<UserInfo> pageObject = userRepository.findAll(page);
//分页 ID倒序
Sort sort = new Sort(Sort.Direction.DESC, "id");
Pageable pageOrder = PageRequest.of(currentPage, pageSize, sort);
Page<UserInfo> pageObject2 = userRepository.findAll(pageOrder);
}
}

  

SpringBoot入门 (五) 数据库访问之spring data jpa的更多相关文章

  1. Springboot 系列(十)使用 Spring data jpa 访问数据库

    前言 Springboot data jpa 和 Spring jdbc 同属于 Spring开源组织,在 Spring jdbc 之后又开发了持久层框架,很明显 Spring data jpa 相对 ...

  2. 数据库链接 mybatis spring data jpa 两种方式

    jdbc mybatis                     spring data jpa dao service webservice jaxrs     jaxws  springmvc w ...

  3. SpringBoot入门 (四) 数据库访问之JdbcTemplate

    本文记录在SpringBoot中使用JdbcTemplate访问数据库. 一 JDBC回顾 最早是在上学时接触的使用JDBC访问数据库,主要有以下几个步骤: 1 加载驱动 Class.forName( ...

  4. SpringBoot入门 (六) 数据库访问之Mybatis

    本文记录学习在SpringBoot中使用Mybatis. 一 什么是Mybatis MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 ...

  5. idea 从数据库快速生成Spring Data JPA实体类

    第一步,调出 Persistence 窗口. File—>Project Structure—>model—> + —>JPA 第二步:打开 Persistence窗口 配置 ...

  6. Spring Data Jpa 入门学习

    本文主要讲解 springData Jpa 入门相关知识, 了解JPA规范与Jpa的实现,搭建springboot+dpringdata jpa环境实现基础增删改操作,适合新手学习,老鸟绕道~ 1. ...

  7. spring data jpa(一)

    第1章     Spring Data JPA的快速入门 1.1   需求说明 Spring Data JPA完成客户的基本CRUD操作 1.2   搭建Spring Data JPA的开发环境 1. ...

  8. 使用Spring Data JPA进行数据分页与排序

    一.导读 如果一次性加载成千上万的列表数据,在网页上显示将十分的耗时,用户体验不好.所以处理较大数据查询结果展现的时候,分页查询是必不可少的.分页查询必然伴随着一定的排序规则,否则分页数据的状态很难控 ...

  9. Spring Data JPA笔记

    1. Spring Data JPA是什么 Spring Data JPA是Spring Data大家族中的一员,它对对持久层做了简化,用户只需要声明方法的接口,不需要实现该接口,Spring Dat ...

随机推荐

  1. SSH中设置字符编码防止乱码

    1.在web.xml中加入一个过滤器和过滤范围的配置 <filter><filter-name>encoding</filter-name><filter-c ...

  2. fastreport字体加粗

    procedure MasterData1OnBeforePrint(Sender: TfrxComponent); begin IF (<frxDB_cdsresult."res_C ...

  3. Berlin 10.1 支持 iPhone 4 (iOS v7.x)

    http://www.cnblogs.com/onechen/p/5559017.html 原本在 Seattle 版本时,还能支持 iPhone 3GS (iOS v6.x), iPhone 4 ( ...

  4. 【Win10】实现 ListViewBase 平滑滚动

    首先解释下标题的 ListViewBase 是什么鬼.ListViewBase 我们可以查阅 MSDN 文档:https://msdn.microsoft.com/zh-cn/library/wind ...

  5. asp.net接收传入的数据流

    我们在日常的应用中,都会遇到这样一个问题,就是我们做的asp.NET程序,会收到其它第三方软件传过来的一些信息数据流,当然了一些文本形式的信息,可以采用get或post的方法来接收,可是要是传过来的是 ...

  6. 使用ABP框架踩过的坑系列1

        企业级(例如ERP)应用, 一遍一遍的在重复:认证.验证.异常处理.日志.国际化和本地化.数据库连接管理.配置管理. 审计记录等,同时.NET有很多最佳实践:分层.模块化.DDD领域驱动.DI ...

  7. wpf使用DynamicDataDisplay插件,修改x轴的样式,改成透明的。

    时光偷走的,永远都是我们眼皮底下看不见的珍贵. 问题:X轴会显示灰色拖动条. 解决:将X轴颜色改为透明. DDD插件是开源的,但是网上的参考资料却很少,所以,很多问题在网上搜索不到,因为没有找到该插件 ...

  8. .net core api Post请求

    POST请求: 1.请求类型:Content-Type:application/json,参数:json字符串 后台接收参数: 1)([FromBody]UserInfo user)必须以对象形式接收 ...

  9. LCS2 - Longest Common Substring II(spoj1812)(sam(后缀自动机)+多串LCS)

    A string is finite sequence of characters over a non-empty finite set \(\sum\). In this problem, \(\ ...

  10. (3)视觉里程计 Visual Odometry

    首先分析include头文件下的slamBase.h文件 # pragma once // 各种头文件 // C++标准库 #include <fstream> #include < ...