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