zoukankan      html  css  js  c++  java
  • Spring Boot入门——JPA

    JPA最大的特点就是可以根据@Entity自动创建你数据库表,用户只需要声明持久层的接口,不需要实现该接口

    1、JPA概念

      JPA全称Java Persistence API,JPA通过JDK5.0注解或XML描述对象、关系表的映射关系,并将运行期的实体对象持久化到数据库中。

      JPA是Sun官方提供发Java持久化规范,为java开发人员提供了一种对象/关系映射工具来管理java应用中的关系数据。

      持久化(Persistence),即把数据保存到可永久保存的存储设备中(如磁盘),持久化的主要应用是将内存中的对象存储在数据库中,或者存储在磁盘文件中或XML数据文件中。

    2、Hibernate概念

      Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的ORM框架。可以自动生成SQL语句,自动执行,使得java程序员可以随心所欲的使用对象编程的思想来操作数据库。

    3、Spring Boot JPA特点

      a、简洁,只需要声明接口,接口无需实现

      b、简单易用,提供了多种不同功能的接口

      c、集成了多种查询策略,支持JPQL

      d、简化了排序分页等功能

      e、可以和Spring Boot整合,进一步简化

      f、支持扩展

    4、使用Spring Boot JPA的步骤

      a、在pom.xml文件中添加mysql,spring-data-jpa依赖

        <!-- mysql依赖 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.42</version>
        </dependency>
        
        <!-- spring-boot-jpa依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

      b、在application.properties文件中配置mysql连接配置信息

    #mysql配置信息
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test
    spring.datasource.username=root
    spring.datasource.password=root
    spring.datasource.driver-class-name=com.mysql.jdbc.Driver

    # 下面为连接池的补充设置,应用到上面所有数据源中
    # 初始化大小,最小,最大
    #spring.datasource.initialSize=5
    #spring.datasource.minIdle=5
    #spring.datasource.maxActive=20
    #配置获取连接等待超时的时间
    #spring.datasource.maxWait=60000
    #配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
    #spring.datasource.timeBetweenEvictionRunsMillis=60000
    # 配置一个连接在池中最小生存的时间,单位是毫秒
    #spring.datasource.minEvictableIdleTimeMillis=300000
    #spring.datasource.validationQuery=SELECT 1 FROM DUAL
    #spring.datasource.testWhileIdle=true
    #spring.datasource.testOnBorrow=false
    #spring.datasource.testOnReturn=false
    # 打开PSCache,并且指定每个连接上PSCache的大小
    #spring.datasource.poolPreparedStatements=true
    #spring.datasource.maxPoolPreparedStatementPerConnectionSize=20
    # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
    #spring.datasource.filters=stat,wall,log4j
    # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
    #spring.datasource.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    # 合并多个DruidDataSource的监控数据
    #spring.datasource.useGlobalDataSourceStat=true

      c、在application.properties文件中配置JPA配置信息

    #spring boot JPA相关配置
    spring.jpa.datasource=MYSQL
    
    # Show or not log for each sql query
    spring.jpa.show-sql = true
    
    # Hibernate ddl auto (create, create-drop, update)
    spring.jpa.hibernate.ddl-auto = update
    
    # Naming strategy
    spring.jpa.hibernate.naming-strategy = org.hibernate.cfg.ImprovedNamingStrategy
    
    #spring.jpa.database=org.hibernate.dialect.MySQL5InnoDBDialect 
    spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect

      d、编写测试样例

    /*
    * Grade类
    */
    package com.wyl.bean;
    
    import javax.persistence.Entity;
    import javax.persistence.GeneratedValue;
    import javax.persistence.GenerationType;
    import javax.persistence.Id;
    
    @Entity
    public class Grade {
    
        @Id
        @GeneratedValue(strategy=GenerationType.AUTO)//设置id自增长
        private int id;
        private String gradeNm;
        private int teacherId;
        
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getGradeNm() {
            return gradeNm;
        }
        public void setGradeNm(String gradeNm) {
            this.gradeNm = gradeNm;
        }
        public int getTeacherId() {
            return teacherId;
        }
        public void setTeacherId(int teacherId) {
            this.teacherId = teacherId;
        }
    }
    Grade.class
    /*
    ** GradeDAO,数据库操作类必须继承Repository类
    */
    package
    com.wyl.dao; import org.springframework.data.repository.Repository; import com.wyl.bean.Grade;
    /* * Spring Boot中dao最重要的就是继承 Repository类,完成数据库相应的操作
    * GradeDAO也可以继承CrudRepository类,调用Spring boot中已有的数据库操作方法更方便
    * GradeDAO继承PagingAndSortingRepository类,完成分页查询和排序
    *  
    */ public interface
    GradeDAO extends Repository<Grade, Integer>{
      
      //自定义的数据库操作方法
    //
    public Grade findByGradeNm(String gradeNm);
      
      @Query("from Grade where gradeNm=:nm")
        public Grade findByGradeNm(@Param("nm")String gradeNm); }
    package com.wyl.service;
    
    import javax.annotation.Resource;
    
    import org.springframework.stereotype.Service;
    
    import com.wyl.bean.Grade;
    import com.wyl.dao.GradeDAO;
    
    /**
     * GradeService类,调用gradeDAO中的方法
     * */
    @Service
    public class GradeService {
    
        @Resource
        private GradeDAO gradeDAO;
        
      @Transactional
    public Grade findByGradeNm(String gradeNm){ return gradeDAO.findByGradeNm(gradeNm); }
      
      //分页查询
      /*@Transactional
        public Iterable<Grade> getAll(){
            return gradeDAO3.findAll(new PageRequest(0, 4));
        }
        
      //排序查询
        @Transactional
        public Iterable<Grade> getAll2(){
            Sort sort = new Sort(Sort.Direction.DESC, "teacherId");
            return gradeDAO3.findAll(sort);
        }*/ }
    package com.wyl.controller;
    
    import javax.annotation.Resource;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.wyl.bean.Grade;
    import com.wyl.service.GradeService;
    
    @RestController
    public class JPAController {
    
        @Resource
        private GradeService gradeService;
        
        @RequestMapping("/finfByGradeNm")
        public Grade finfByGradeNm(String gradeNm){
            
            System.out.println("finfByGradeNm");
            return gradeService.findByGradeNm(gradeNm);
        }
    }

      e、测试结果

        

  • 相关阅读:
    [HNOI2002]营业额统计
    HDU 1374
    HDU 3345
    HDU 2089
    Graham扫描法
    Codeforces 1144D Deduction Queries 并查集
    Codeforces 916E Jamie and Tree 线段树
    Codeforces 1167F Scalar Queries 树状数组
    Codeforces 1167E Range Deleting
    Codeforces 749E Inversions After Shuffle 树状数组 + 数学期望
  • 原文地址:https://www.cnblogs.com/studyDetail/p/7017754.html
Copyright © 2011-2022 走看看