• 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、测试结果

        

  • 相关阅读:
    归类常用控件GroupBox、TabControl、Expander
    ScrollViewer控件
    捕获鼠标位置
    5、标记拓展
    如何实现文件增量同步——算法
    常用的 Nand Flash 指令如下:
    Consistent Hashing算法
    循环冗余检验 (CRC) 算法原理
    yaffs2根文件系统的构建过程
    linux内存管理之uboot第一步
  • 原文地址:https://www.cnblogs.com/studyDetail/p/7017754.html
Copyright © 2020-2023  润新知