本文记录学习使用 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);
- }
- }
来源: https://www.cnblogs.com/love-wzy/p/10330832.html