十三 Springboot-spring data jpa

13.1 什么是Springboot spring data jpa

13.1.1 Jpa与Hibernate

  1. Jpa是Java的Orm规范

  2. Hibernate是Jpa的一种实现方式

  3. Jpa优缺点

    本质:处理Java对象和关系型数据库表之间的转换,只是对JDBC再次做了一层封装
    优点:
    1.程序员操作很简单,代码简单 entityManager.persist(employee);	
    2.直接面向持久对象操作
    3.提供世界级数据缓存(现在几乎所有的ORM框架的缓存都是学的Hibernate)
    		  一级缓存,二级缓存,查询缓存(空间换速度)
    4.数据库移植性很强,很少的修改(通过配置方言搞定)
    		把各种数据库抽取了一个方言接口
    		不同数据库实现一个方言接口,如果换了数据库,必须修改方言实现,驱动jar文件,连接数据库信息。
    缺点:
    	1.不能干预sql语句的生成
    		entityManager.find(User.class, 1L);		
            find方法默认查询t_user表的所有字段
    		自动生成select user0_.id,user0_.name,user0_.age from t_user user0_ where	user0_.id=?
    	2.一个项目中,如果对sql语句的优化要求比较高,不适合用JPA(不过可以使用JPA对原生sql的支持来解决)
    	3.如果一张表中有上亿级别的数据量,也不适合用JPA,其实也不适合用jdbc(可以使用数据库读写分离,分库分表方案解决)。
    

13.1.2 Spring data jpa

  1. 是什么

    是spring data对rdms的支持。 致力于减少数据访问层 (DAO) 的开发量. 开发者唯一要做的,就只是声明持久层的接口,其他都交给 Spring Data JPA 来帮你完成!

  2. spring data

    Spring 的一个子项目。用于简化数据访问,支持NoSQL和关系数据存储。
    其主要目标是使数据的访问变得方便快捷。
    1)SpringData 项目所支持 NoSQL 存储:
        MongoDB (文档数据库)
        Neo4j(图形数据库)
        Redis(键/值存储)
        Hbase(列族数据库)
        ElasticSearch
        ...
    2)SpringData 项目所支持的关系数据存储技术:
        JDBC
        JPA
        ...
    

13.1.3 Springboot Spring data jpa

​ 就是使用springboot的自动配置,再一次减缓spring data jpa应用的开发,我们基本不用写配置了。

13.2 入门步骤分析

1)搭建一个springboot项目
   ①pom
   ②配置文件
  ③入口类
④启动测试
2)Springboot集成Spring data jpa
  ①pom
  ②配置
3)写代码测试
  ①domain
  ②Repository
Spring Data 的一个核心接口为我们提供了常用的接口
Repository 接口是 Spring Data 的一个核心接口,它不提供任何方法,开发者需要在自己定义的接口中声明需要的方法 :

 public interface Repository<T, ID extends Serializable> { } 
1. Repository是一个空接口,即是一个标记接口;
2. 若我们定义的接口继承了Repository,则该接口会被IOC容器识别为一个Repository Bean纳入到IOC容器中,进而可以在该接口中定义满足一定规范的方法。
3. 实际上也可以通过@RepositoryDefinition,注解来替代继承Repository接口。
4. 查询方法以find | read | get开头;
5. 涉及查询条件时,条件的属性用条件关键字连接,要注意的是条件属性以首字母大写。
6.使用@Query注解可以自定义JPQL语句实现更灵活的查询。

CrudRepository 接口提供了最基本的对实体类的添删改查操作
 --T save(T entity);//保存单个实体   
  --Iterable<T> save(Iterable<? extends T> entities);//保存集合         
  --T findOne(ID id);//根据id查找实体          
  --boolean exists(ID id);//根据id判断实体是否存在          
  --Iterable<T> findAll();//查询所有实体,不用或慎用!          
  --long count();//查询实体数量          
  --void delete(ID id);//根据Id删除实体          
  --void delete(T entity);//删除一个实体   
  --void delete(Iterable<? extends T> entities);//删除一个实体的集合          
  --void deleteAll();//删除所有实体,不用或慎用!   

PagingAndSortingRepository接口
该接口提供了分页与排序功能   
 --Iterable<T> findAll(Sort sort); //排序    
--Page<T> findAll(Pageable pageable); //分页查询(含排序功能)

JpaRepository:查找所有实体,排序、查找所有实体,执行缓存与数据库同步

  ③Service
  ④测试

13.3 Springboot spring data jpa入门实现1

13.3.1 准备一个springboot项目

​ 略过

13.3.2 集成Spring data jpa

  1. pom

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

    spring:
      application:
        name: springbootdatajpatest
      datasource:
        url: jdbc:mysql://localhost:3306/test
        driver-class-name: com.mysql.jdbc.Driver
        username: root
        password: 123456
      jpa:
        database: mysql #jpa操作mysql
        show-sql: true  #把执行sql显示出来
        hibernate:
          naming:
            physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy #不用管
          ddl-auto: update
        open-in-view: true
        database-platform: org.hibernate.dialect.MySQL55Dialect #使用的mysql5.5方言
    

13.3.3 写代码测试

  1. Domain

    @Entity
    @Table(name="t_employee")
    public class Employee {
    
       @Id
       @GeneratedValue
       private Long id;
    
       @Column
       private String name;
    
       public Employee(String name) {
          this.name = name;
       }
    
       public Employee() {
       }
    }
    
  2. Repository

    public interface EmployeeRepository extends JpaRepository<Employee, Long> {
    }
    
  3. Service

    public interface IEmployeeService {
        void add(Employee employee);
        void del(Long id);
        void update(Employee employee);
        Employee getById(Long id);
        List<Employee> getAll();
    }
    @Service
    public class EmployeeServiceImpl implements IEmployeeService {
        @Autowired
        private EmployeeRepository repository;
        @Override
        public void add(Employee employee) {
            repository.save(employee);
        }
    
        @Override
        public void del(Long id) {
            repository.deleteById(id);
        }
    
        @Override
        public void update(Employee employee) {
            repository.save(employee);
    
        }
    
        @Override
        public Employee getById(Long id) {
            return repository.findById(id).get();
        }
    
        @Override
        public List<Employee> getAll() {
            return repository.findAll();
        }
    }
    
  4. 测试

    @SpringBootTest(classes = App.class)
    @RunWith(SpringRunner.class)
    public class IEmployeeServiceTest {
    
        @Autowired
        private IEmployeeService employeeService;
    
        @Test
        public void add() {
            employeeService.add(new Employee("zs"));
        }
    
        @Test
        public void del() {
            Employee employee = employeeService.
                    getById(1L);
            System.out.println(employee);
            employeeService.del(1L);
            employee = employeeService.
                    getById(1L);
            System.out.println(employee);
        }
    
        @Test
        public void update() {
            Employee employee = employeeService.
                    getById(1L);
            System.out.println(employee);
            employee.setName(employee.getName()+"-edit");
            employeeService.update(employee);
            employee = employeeService.
                    getById(1L);
            System.out.println(employee);
        }
    
        @Test
        public void getById() {
            System.out.println(employeeService.getById(1L));
        }
    
        @Test
        public void getAll() {
            System.out.println(employeeService.getAll());
        }
    }
    

13.4 小结

​ 本章节讲了Springboot怎么集成Spring data jpa

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值